2017-05-26 89 views
0

我只是想在我的sql數據庫中插入一張簡單的表格。儘管如此,我仍然得到了這個錯誤事件,儘管我嘗試了幾種方法。我在我的數據庫「test」中有一個名爲「values」的表,其中id爲「idValues」,int值爲「value」。我只想插入一個簡單的記錄,其中ID爲1,值爲1(1/1)。某些版本可能有問題嗎?Java - 您的SQL語法錯誤;

package jdbcdemo; 

import java.sql.*;

public class Driver { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    try { 

     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false", "root", "rmi1337"); 

     Statement statement = myConn.createStatement(); 

     String sql = "INSERT INTO values " + "(idValues, value)" + "VALUES (1, 1)"; 
     statement.executeUpdate(sql); 


    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 




} 


com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'values(idValues, value)VALUES (1, 1)' at line 1 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
at com.mysql.jdbc.Util.getInstance(Util.java:408) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486) 
at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1552) 
at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2607) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1480) 
at jdbcdemo.Driver.main(Driver.java:22) 
+3

我猜'values'作爲表名不是一個好選擇 – modsfabio

+3

正如你所看到的,'values'是SQL中的一個關鍵字。如果你要打電話給你的桌子「價值」(我建議你不要),你將不得不逃脫它;例如'\'價值\'' – khelwood

+0

謝謝,應該想到了!那麼他們也可以在創建表格時對我進行處理,儘管 –

回答

3

兩個Valuesvalue是保留字,因此需要轉義像

String sql = "INSERT INTO `values` " + "(idValues, `value`)" + " VALUES (1, 1)"; 
0

它錯過了一個空白。

'values(idValues, value)VALUES (1, 1)' 

應該是:

'values(idValues, value) VALUES (1, 1)' 

所以你應該把它寫:

String sql = "INSERT INTO values " + "(idValues, value) " + " VALUES (1, 1)"; 

但無論如何,你不應該使用關鍵字或保留字作爲元數據。
「值」表是誤導性的,並且可能會根據所使用的DBMS和所用的操作系統進行工作。

在這種link呈現的MySQL是如何處理的大小寫,你可以閱讀:

這意味着這樣的名字不區分在Windows敏感,但情況 在大多數Unix變種敏感。

在此other link中,您可以獲取有關MySQL預留密鑰的信息。

相關問題