我正在开发一个网络应用程序,其中数据将在客户端和服务器端之间传输。
我已经知道 JavaScript int != Java int。因为,Java int 不能为 null,对吧。 现在这就是我面临的问题。
我将 Java int 变量更改为 Integer。
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();
}
我的问题在这里:
pstmt.setInt(1, tempID);
pstmt.setInt(3, tage);
我不能在这里使用整数变量。我尝试过
intgerObject.intValue();
但这让事情变得更加复杂。我们还有其他转换方法或转换技巧吗?
任何修复都会更好。
正如其他地方已经写过的:
Integer.intValue()
将 Integer 转换为 int。但是正如您所写,
Integer
可以为空,因此明智的做法是在尝试转换为int
之前检查这一点(否则可能会面临获得NullPointerException
的风险)。
pstmt.setInt(1, (tempID != null ? tempID : 0)); // Java 1.5 or later
或
pstmt.setInt(1, (tempID != null ? tempID.intValue() : 0)); // any version, no autoboxing
* 使用默认值零,也可以什么也不做,显示警告或...
我最喜欢不使用自动装箱(第二个示例行),所以很清楚我想要做什么。
问题展示了
PreparedStatement
的用法。在这种情况下,可以使用其 setObject()
方法来代替 setInt()
。它将进行适当的转换并接受Integer
,即使它是null
。
另一种替代方法是
setNull()
方法,但这需要首先测试 null
的值并将列类型作为第二个参数传递。
既然您说您使用的是 Java 5,那么由于自动拆箱,您可以将
setInt
与 Integer
一起使用:pstmt.setInt(1, tempID)
应该可以正常工作。在早期版本的 Java 中,您必须自己调用 .intValue()
。
反之亦然...将
int
分配给 Integer
将自动导致 int
使用 Integer.valueOf(int)
自动装箱。
Java 自动将 Integer 与 int 相互转换(除非您仍在使用 Java 1.4)。
另一种简单的方法是:
Integer i = new Integer("10");
if (i != null)
int ip = Integer.parseInt(i.toString());
即使您使用的是 Java 5 JDK,也许您的 IDE 编译器设置已设置为 Java 1.4 模式?否则我同意其他人已经提到的自动装箱/拆箱。