Connector/J的documentation表示,它可以轻松地将MySQL INT转换为Java字符串类型。(即,从结果集映射到Java类型。)
但这能反过来吗?换句话说,在MySQL期望String的语句中,可以使用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(); // ...

最佳答案

根据javadoc of setString()(我的重点):
将指定的参数设置为给定的Java字符串值。这个
驱动程序将其转换为SQL VARCHAR或LONGVARCHAR值(取决于
与VARCHAR上的驱动程序限制相关的参数大小
值)发送到数据库时。
这意味着这可能不起作用,尽管它可能会起作用(我假设一个int在发送时就像一个字符串一样被表示),但是如果事情发生了变化,情况可能就不是这样了。不管怎样,我都不认为这是一个好的实践,因为字符串中可能有非整数值。
相反,请使用:

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

按你认为合适的方式处理。
另外,以下行无效,因为NumberFormatException返回一个execute()值:
ResultSet rs = prepStmt.execute();

相反,您可以使用:
if (prepStmt.execute()) {
    ResultSet rs = prepStmt.getResultSet();
}


ResultSet rs = prepStmt.executeQuery();

10-02 02:48
查看更多