2016-08-10 30 views
0

我正在嘗試一個簡單的插入到我的表中,但我的程序說我有一個SQL語法錯誤。有任何想法嗎?帶有準備好聲明的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

您需要爲所有NOT NULL列提供值,並且不提供sql字符串executeUpdate()

// 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

雖然這將是第二個問題,實際上並不是造成問題中的錯誤的問題。你的答案只是修復了'意外'(因爲你使用'prepared.executeUpdate()'而不是'prepared.executeUpdate(sql)') –

+1

我意識到修復的那部分內容,但沒有明確提到它。我編輯了答案,使其更加明顯。謝謝! – Jason

1

您需要爲聲明爲 'NOT NULL'

最好到像這樣的調試問題的方式中的所有列提供值捕獲發送到數據庫的實際SQL語句。

+0

試了一下,現在我得到這個「錯誤:參數指標超出範圍(1>號的參數,即0)。「 –

+0

它爲什麼說它沒有參數? –

+0

如果你正在使用'PreparedStatement :: setString()',你不需要引用字符串。 – Jason