2016-08-10 10 views
0

私のテーブルに簡単な挿入を試みていますが、私のプログラムはSQL構文エラーがあると言います。何か案は?あなたは 'NOT NULLと' と宣言されたすべての列の値を指定する必要がありますPrepared Statementを使用したJDBC挿入には、SQL構文エラーがあります。

SQL CODE

CREATE TABLE ticket (
    start_time DATETIME NOT NULL, 
    end_time DATETIME NOT NULL, 
    seat VARCHAR(50) NOT NULL, 
    sep VARCHAR(50) NOT NULL, 
    price INT(50) NOT NULL, 
    foroom VARCHAR(50) NOT NULL, 
    printer INT(15) NOT NULL, 
    PRIMARY KEY (seat) 
); 

JAVA CODE

try 
{ 
    System.out.println("Attempting to connect...\n"); 
    Class.forName("com.mysql.jdbc.Driver"); 
    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/baseis?autoReconnect=true&useSSL=false","root",""); 
    System.out.println("Connection Succesful!!!"); 
    String sql = "INSERT INTO ticket (start_time)" + " VALUES (?)"; 
    PreparedStatement prepared = connection.prepareStatement(sql); 
    prepared.setString(1,"2016-07-17 19:00:00"); 
    prepared.executeUpdate(sql); 
} 
catch(SQLException error) 
{ 
    System.out.println("Error: " + error.getMessage()); 
} 

ERROR

Error: 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 '?)' at line 1 

答えて

3

:パラメータインデックスが範囲外(1>数:

// set some values for the record 
String seat = ""; 
String sep = ""; 
int price = 0; 
String foroom = ""; 
int printer = 0; 

String sql = "INSERT INTO ticket (start_time, end_time, seat, sep, price, foroom, printer) VALUES (?, ?, ?, ?, ?, ?, ?)"; 
PreparedStatement prepared = connection.prepareStatement(sql); 
prepared.setString(1, "2016-07-17 19:00:00"); 
prepared.setString(2, "2016-07-17 20:00:00"); 
prepared.setString(3, seat); 
prepared.setString(4, sep); 
prepared.setInt(5, price); 
prepared.setString(6, foroom); 
prepared.setInt(7, printer); 
prepared.executeUpdate(); 
+0

2番目の問題は、実際に問題のエラーを引き起こした問題ではありません。あなたの答えは、 'prepared.executeUpdate(sql)'の代わりに 'prepared.executeUpdate()'を使ったので、誤って修正されます) –

+1

私は修正の一部を知っていましたが、明示的に言及しませんでした。私はそれをもっと明白にするために答えを編集しました。ありがとう! – Jason

1

このような問題をデバッグするための最良の方法はにありますデータベースに送信された実際のSQL文を取得します。あなたはすべてのNOT NULL列の値を提供する必要があり、かつexecuteUpdate()sql文字列を提供していない

+0

は、今私を取得、この」エラーを、それを試してみましたパラメータは0です)。 –

+0

なぜパラメータがないのですか? –

+0

'PreparedStatement :: setString()'を使用している場合は、文字列を引用符で囲む必要はありません。 – Jason

関連する問題