2013-03-15 16 views
0
try 
     { 
      String sql="INSERT INTO `task`(`task`,`time`) VALUES(?,?)"; 
      PreparedStatement stmt=this.connection.prepareStatement(sql); 
      stmt.setString(1, this.task); 
      stmt.setInt(2, this.time); 
      //stmt. 
      Boolean res= stmt.execute(sql); 
     } 
     catch(Exception e) 
     { 
      System.err.println(e); 
     } 

錯誤:爲什麼這個MySQL插件在Java JDBC未能

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的正確語法手冊 '?,?)' 在1號線

回答

2

不要使用

stmt.execute(sql); 

使用

stmt.execute(); 

到執行你的PreparedStatement

您使用嘗試執行給定的字符串,這顯然不是要執行什麼第一個原因是它(這是java.sql.Statement接口的方法)佔位符'?'值。

第二個是從java.sql.PreparedStatement的方法和執行該PreparedStatement與你通過setXXX()方法輸入的值。


而且,你的情況,你不需要蜱你的字符串,你可以只寫

String sql="INSERT INTO task(task,time) VALUES(?,?)"; 
+0

MySQL中期望的絃樂「價值」沒有價值,所以儘量把?插入引號。 – 2013-03-15 07:35:04

+0

@JevgeniSmirnov:不,不需要它,'PreparedStatement'負責爲你服務。 – jlordo 2013-03-15 07:38:28

+0

@jlordo對於JDBC,你也可能需要反引號,但只有實際需要的地方(就像其他所有MySQL的用法一樣,參見http://dev.mysql.com/doc/refman/5.5/en/identifiers.html) 。 – 2013-03-15 07:40:26

相關問題