Làm thế nào để chuyển đổi Integer sang int?


81

Tôi đang làm việc trên một ứng dụng web trong đó dữ liệu sẽ được chuyển giữa phía máy khách và máy chủ.

Tôi đã biết rằng JavaScript int! = Java int. Bởi vì, Java int không thể là null, đúng. Bây giờ đây là vấn đề tôi đang phải đối mặt.

Tôi đã thay đổi các biến int Java của mình thành Số nguyên.

public void aouEmployee(Employee employee) throws SQLException, ClassNotFoundException
{
   Integer tempID = employee.getId();
   String tname = employee.getName();
   Integer tage = employee.getAge();
   String tdept = employee.getDept();
   PreparedStatement pstmt;
   Class.forName("com.mysql.jdbc.Driver");
   String url ="jdbc:mysql://localhost:3306/general";
   java.sql.Connection con = DriverManager.getConnection(url,"root", "1234");
   System.out.println("URL: " + url);
   System.out.println("Connection: " + con);
   pstmt = (PreparedStatement) con.prepareStatement("REPLACE INTO PERSON SET ID=?, NAME=?, AGE=?, DEPT=?");
   pstmt.setInt(1, tempID);
   pstmt.setString(2, tname);
   pstmt.setInt(3, tage);
   pstmt.setString(4, tdept);
   pstmt.executeUpdate();
 }

Vấn đề của tôi là ở đây:

pstmt.setInt(1, tempID);

pstmt.setInt(3, tage);

Tôi không thể sử dụng các biến Số nguyên ở đây. Tôi đã thử với intgerObject.intValue(); Nhưng nó làm cho mọi thứ phức tạp hơn. Chúng tôi có bất kỳ phương pháp chuyển đổi hoặc kỹ thuật chuyển đổi nào khác không?

Bất kỳ sửa chữa sẽ tốt hơn.


2
Tôi không hiểu. Bạn đang tìm kiếm một cái gì đó đơn giản hơn pstmt.setInt(1, tempID.intValue())? Còn gì dễ dàng hơn việc thêm 11 ký tự mã?
EboMike

1
Hãy thử chuyển sang Java 5 trở lên: quá trình chuyển đổi sẽ được thực hiện tự động.
Nikita Rybak

1
Này, nó hoạt động. Cảm ơn. Nhưng bây giờ vấn đề xuất hiện ở đây "Integer id = rs.getInt (1);".

1
@MaRaVan Tại sao đó là một vấn đề? Nó cũng sẽ hoạt động tốt. Bạn thậm chí đã thử nó?
ColinD

Có, tôi đã sử dụng .intValue () trong setTnt () và nó hoạt động. Nhưng, Integer id = rs.getInt (1); hiện đèn đỏ.

Câu trả lời:


76

Như đã được viết ở nơi khác:

  • Đối với Java 1.5 trở lên, bạn không cần phải làm (hầu như) bất cứ điều gì, nó được thực hiện bởi trình biên dịch.
  • Đối với Java 1.4 trở về trước, sử dụng Integer.intValue()để chuyển đổi từ Số nguyên sang số nguyên.

NHƯNG như bạn đã viết, an Integercó thể là null, vì vậy bạn nên kiểm tra điều đó trước khi cố gắng chuyển đổi thành int(hoặc có nguy cơ nhận được NullPointerException).

pstmt.setInt(1, (tempID != null ? tempID : 0));  // Java 1.5 or later

hoặc là

pstmt.setInt(1, (tempID != null ? tempID.intValue() : 0));  // any version, no autoboxing  

* sử dụng mặc định là 0, cũng không thể làm gì, hiển thị cảnh báo hoặc ...

Tôi hầu như không thích sử dụng autoboxing (dòng mẫu thứ hai) nên rõ ràng tôi muốn làm gì.


1
Java 1.4.2 không có Integer.valueOf(int)Tham khảo: docs.oracle.com/javase/1.4.2/docs/api/java/lang/…
Hardik Mishra

13

Vì bạn nói rằng bạn đang sử dụng Java 5, bạn có thể sử dụng setIntvới chức Integernăng autounboxing: pstmt.setInt(1, tempID)sẽ hoạt động tốt. Trong các phiên bản Java trước đây, bạn sẽ phải gọi .intValue()chính mình.

Điều ngược lại cũng hoạt động ... việc gán một intcho một Integersẽ tự động làm intcho nó được đóng hộp tự động bằng cách sử dụng Integer.valueOf(int).


1
Cách thay đổi "Integer id = rs.getInt (1);" thành số nguyên.

1
Tôi đã làm người đàn ông. Nó hoạt động cho setInt () và tôi đánh giá cao điều đó. Ở đây, id là Integer & rs.getInt () trả về một biến int. Nó không hoạt động.

1
Xin lỗi lập trình viên, tất cả các bạn đã đúng. Mỏ JRE 1.4. Tôi thực sự xin lỗi vì đã làm mất thời gian của bạn.

9

Java chuyển đổi Integer thành int và tự động quay lại (trừ khi bạn vẫn sử dụng Java 1.4).


7
Điều gì xảy ra nếu an Integernull?
SparkAndShine

2
@sparkandshine - hơi muộn, nhưng cũng - nullnên gây ra mộtNullPointerException
user85421

6

Một cách đơn giản khác sẽ là:

Integer i = new Integer("10");

if (i != null)
    int ip = Integer.parseInt(i.toString());

4

Có lẽ bạn đã đặt cài đặt trình biên dịch cho IDE của mình ở chế độ Java 1.4 ngay cả khi bạn đang sử dụng Java 5 JDK? Nếu không, tôi đồng ý với những người khác đã đề cập đến tính năng tự động đóng hộp / mở hộp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.