2013-04-12 50 views
1

Connector/J的documentation表示它可以轻松地将MySQL INT转换为Java字符串类型。 (也就是说,从结果集映射到Java类型。)MySQL连接器/ J - 将Java字符串映射到MySQL INT

但是这样做是否会以其他方式工作?换句话说,您可以在MySQL预计INT的准备语句中使用Java String吗?这被认为是好的/不好的做法?

# 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(); // ... 

回答

1

根据javadoc of setString()(我的重点):

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

含义此可能无法正常工作,但它可能会(我想,当发送一个int表示就像一个字符串),但如果情况发生变化,可能并非如此。无论如何,我不认为这是一种好的做法,因为在字符串中可能存在非整数值。

相反,使用:

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

和处理NumberFormatException,你认为合适。


另外下面一行是无效的,因为​​返回boolean值:

ResultSet rs = prepStmt.execute(); 

相反,你可以使用:

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

ResultSet rs = prepStmt.executeQuery(); 
+0

谢谢,这是一个 好点子。我猜JavaDoc是这么说的。出于某种原因,我正在寻找Connector/J JavaDoc(我比较容易找到它的源代码),但应该只是查看规范接口。 – ktm5124

+0

是的,代码仅用于演示目的,我应该写成executeQuery。 – ktm5124