2013-04-12 99 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