2017-05-26 1 views
0

私はちょうど私のSQLデータベースのテーブルに簡単な挿入をしたいです。それにもかかわらず、私はいくつかの方法で試してみましたが、このエラーイベントが発生します。 id "idValues"の単純な列と "value"というint値の列を使用して、データベース "test"に "values"という名前のテーブルがあります。 IDは1、値(1/1)は1の単純なレコードを挿入したいだけです。特定のバージョンに問題がありますか?両方ValuesvalueJava - 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

tablenameとしての 'values'は良い選択ではないと思います。 – modsfabio

+3

' values'はSQLのキーワードです。あなたのテーブルを "値"と呼ぶつもりなら(そして私はそうしないことをお勧めします)、それをエスケープする必要があります。例えば'\' values \ '' – khelwood

+0

ありがとう、それを考えたはずです!しかし、テーブルを作成するときにも私にこのことを教えてもらえました。 –

答えて

3

import java.sql.*;

package jdbcdemo; 
は予約語であり、したがって

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や使用されるOSに応じて動作する可能性があります。

これは、そのような名前は、Windowsの大文字と小文字を区別しません意味しますが、Unixのほとんどの品種では大文字と小文字が区別 です:MySQLは大文字と小文字の区別を処理する方法を提示する。このlink

は、あなたが読むことができます。

このother linkには、MySQL予約キーに関する情報があります。

関連する問題