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();