1

Connector/J的文档说它可以轻松地将 MySQL INT 转换为 Java String 类型。(即,从结果集映射到 Java 类型。)

但这是否反过来起作用?换句话说,你能String在 MySQL 期望的预处理语句中使用 JavaINT吗?这被认为是好的/坏的做法吗?

# pseudo-code
table EMPLOYEES 
(
    NAME VARCHAR(50)
    EMPLOYEE_NO INT(11)
)

// Java code
PreparedStatement prepStmt = 
    con.prepareStatement("SELECT * from EMPLOYEES where EMPLOYEE_NO=?");
prepStmt.setString(1, str);
ResultSet rs = prepStmt.execute(); // ...
4

1 回答 1

1

根据)的javadocsetString((我的重点):

将指定参数设置为给定的 Java 字符串值。驱动程序在将其发送到数据库时将其转换为SQL VARCHAR 或 LONGVARCHAR值(取决于参数的大小相对于驱动程序对 VARCHAR 值的限制)。

这意味着这可能不起作用,尽管它可能会起作用(我想一个 int 在发送时就像一个字符串一样表示),但如果事情发生变化,情况可能并非如此。无论哪种方式,我都不认为这是一种好的做法,因为字符串中可能存在非整数值。

相反,使用:

prepStmt.setInt(1, Integer.parseInt(str));

并按NumberFormatException您认为合适的方式处理。


此外,以下行无效,因为execute()返回boolean值。:

ResultSet rs = prepStmt.execute();

相反,您可以使用:

if (prepStmt.execute()) {
    ResultSet rs = prepStmt.getResultSet();
}  

或者

ResultSet rs = prepStmt.executeQuery();
于 2013-04-12T01:01:15.467 回答