2014-10-27 33 views
3

我正嘗試在MySQL中使用預處理語句來創建數據庫。這裏我傳遞參數如圖所示。無法在MySql中使用預處理語句創建數據庫

PreparedStatement createDbStatement = connection.prepareStatement("CREATE DATABASE ?"); 
createDbStatement.setString(1, "first_database"); 
createDbStatement.execute(); 
connection.commit(); 

但我得到一個語法錯誤。是否可以使用預準備語句創建表和數據庫?如果不是,請建議一種替代方法。

回答

6

in a PreparedStatement只能用於綁定值(例如,在values子句中的where條件中),而不能用於對象名稱。因此,您不能使用它來綁定數據庫的名稱。

你可以使用字符串操作添加數據庫名稱,但在這種情況下,真的沒有好處,使用PreparedStatement秒,你應該只使用一個Statement代替:

String dbName = "first_database"; 
Statement createDbStatement = connection.createStatement(); 
createDbStatement.execute("CREATE DATABASE " + dbName); 
+0

尼斯的答案,但我有一個問題;應該在這裏手動驗證'dbName'嗎? – 2014-10-27 07:28:52

+1

這是一個「骨架」答案 - 如果您從用戶輸入中獲取dbName,您應該在此處添加一些輸入理智/驗證。 – Mureinik 2014-10-27 07:30:06

+0

我知道,我只是想知道'Statement.execute()'方法是否對輸入查詢進行任何驗證;或者它只是發送沒有任何驗證的查詢。謝謝。 – 2014-10-27 07:31:39