2013-05-10 18 views
1

我有使用JDBC的這個問題。 我可以創建一個名爲food.db的表,其中包含文本字段的早餐,午餐和晚餐。當我打電話給以下...如何使用SQLite JDBC傳遞文本或字符串?

  statement.executeUpdate("create table food (breakfast string, lunch string, dinner string)"); 
      breakfast = JOptionPane.showInputDialog("What was your breakfast?"); 
      lunch = JOptionPane.showInputDialog("What was your lunch?"); 
      dinner = JOptionPane.showInputDialog("What was your dinner?"); 
     statement.executeUpdate("insert into food values(\'"+breakfast+"\', \'"+lunch+"\' ,\'"+dinner+"\')"); 

但是,最後一條語句會導致錯誤。無論出於何種原因,它說,無論我輸入什麼「早餐」(例如燕麥片),都不是列,即使我知道我可以用這種方式使用SQLite的語法來更新列。

此外我已經檢查了executeUpdate()的參數,並且單引號和一切的語法匹配...我嘗試過文本和字符串列字段,爲兩者獲取相同的錯誤。

+0

請檢查更新的答案。您正在轉義不需要的單引號。 – 2013-05-10 15:06:31

+0

請使用具有參數化查詢的'PreparedStatement',而不是將用戶輸入連接到查詢中。您目前對SQL注入開放。 – 2013-05-11 07:24:20

回答

2

試試這個

變化stringVARCHAR(SIZE) OR TEXT

statement.executeUpdate("CREATE TABLE food (breakfast VARCHAR(25), lunch VARCHAR(25), dinner VARCHAR(25))"); 
String breakfast = JOptionPane.showInputDialog("What was your breakfast?"); 
String lunch = JOptionPane.showInputDialog("What was your lunch?"); 
String dinner = JOptionPane.showInputDialog("What was your dinner?"); 
statement.executeUpdate("INSERT INTO food (breakfast, lunch , dinner) VALUES ('"+breakfast+"', '"+lunch+"' ,'"+dinner+"')"); 
+0

是的,這工作,謝謝! 「食物」之後,我有什麼理由不能跳過'(早餐,午餐,晚餐)'部分? – 2013-05-10 14:51:09

+0

在你的情況下,只有三個字段,所以它沒關係,你放在食物後面(早餐,午餐,晚餐)部分....你可以簡單地寫它作爲statement.executeUpdate(「INSERT INTO food VALUES('」+早餐+「','」+午餐+「','+晚餐+」')「); – 2013-05-10 14:56:33

+0

好吧,這是我以前做的事情,但無論如何,謝謝! – 2013-05-10 15:26:02

0

您CREATE TABLE更改爲

statement.executeUpdate("create table food (breakfast text, lunch text, dinner text)"); 

你的INSERT INTO語句漏出的不需要單引號'。更改爲

statement.executeUpdate("insert into food values('"+breakfast+"', '"+lunch+"' ,'"+dinner+"')"); 


有SQLite中沒有string數據類型,但由於SQLite的的SQL不是強類型它不給一個錯誤。列親和性接管並將任何未知數據類型視爲NUMERIC。更好地將列數據類型切換到TEXT或VARCHAR。