2012-08-04 69 views
0

我想通過java更新通過odbc驅動程序訪問數據庫。java - odbc - 插入語法錯誤

表名是form1的

我得到一個語法錯誤,當我執行以下命令:

updates="INSERT INTO form1 
(entrydate,name,gender,month,date,phno,emailid,facebookid,address,semester, 
bloodgroup,slno,college,department,liveprojects,trainings); 

values("+abc+",'"+t3.getText()+"','"+t4.getText()+"',"+def+","+def1+","+zzz+",'" 
     +t8.getText()+"','"+t9.getText()+"','"+t10.getText()+"',"+aaaa+",'" 
     +t12.getText()+"',"+xyz+",'"+t13.getText()+"','"+dd+"','sa','da')"; 

謝謝。

+3

那是什麼';列名單後'在做什麼? (請閱讀關於sql注入和綁定參數。) – Mat 2012-08-04 10:42:04

+0

您不應該使用ODBC,而應使用真正的JDBC驅動程序。 – 2012-08-04 12:10:27

回答

0

嘗試在values之前刪除;

1

有兩個問題同你說 - 一個真正的和潛在的一個:

  • 真實:在values關鍵字之前分號需要刪除
  • 潛力:該語句需要轉換使用帶參數,否則任何字符串參數的主體中的單引號都會導致語法錯誤。

這裏是你如何可以切換到參數化準備好的發言:

String updates="INSERT INTO form1 (entrydate,name,gender,month,date,phno,emailid,facebookid,address,semester,bloodgroup,slno,college,department,liveprojects,trainings) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 
PreparedStatement psUpd = con.prepareStatement(updates); 
psUpd.setInt(1, abc); 
psUpd.setString(2, t3.getText()); 
psUpd.setString(3, t4.getText()); 
psUpd.setInt(4, def); 
psUpd.setInt(5, def1); // The types of parameters need to match the type of setXYZ 
... // Continue for the remaining parameters, then call 
psUpd.executeUpdate(); 
0

使用INSERT INTO form1 values(value1,value2......);直接。

2.如果你要堅持自己的格式...然後做以下更改。

-取出;以前values.

-要插入逗號,其更好地使用",",而不是','

0

分號(; )列名後是罪魁禍首。你正在通過這樣做來終止聲明。 只是刪除了; 。你的代碼將起作用。

+0

也可以使用準備報表。它不直接注入字符串中的值。 – 2012-08-04 10:56:33

1

第一個問題:

updates="INSERT INTO form1 
(entrydate,name,gender,month,date,phno,emailid,facebookid,address,semester, 
bloodgroup,slno,college,department,liveprojects,trainings); 

* 你與分離領域和價值;但它會是空白*

其次最好是使用prepareStatement

String sql ="INSERT INTO TableName 
(entrydate,name,gender,month,date,phno,emailid,facebookid,address,semester, 
bloodgroup,slno,college,department,liveprojects,trainings) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?); 

    PreparedStatement ps = con.prepareStatement(sql);  
    int index = 1; 
    ps.setInt(index++, abc); 
    ps.setString(index++, t3.getText()); 
    ps.setString(index++, t4.getText()); 
    ps.setInt(index++, def); 
    ps.setInt(index++, def1); // The types of parameters need to match the type of setXYZ 
    ... // Continue for the remaining parameters, then call 
    ps.executeUpdate(); 
+0

當PreparedStatement使用我得到的消息驅動程序不支持此功能....爲什麼我得到這個消息????我使用訪問2003年和Odbc驅動程序 – 2012-08-05 10:06:39

+0

我用下面的代碼,它的工作..感謝球員的幫助....乾杯聲明stmt = con.createStatement(); 「插入到學生(slno,entrydate,姓名,性別,dob,phno,emailid,facebookid,地址,學期,bloodgroup,學院,部門,現場項目,培訓)」+ 「values(」+ serialno +「, 「+ entdate +」, ' 「+ nameofs +」', ' 「+性別+」', 「+ BOD +」, 「+手機+」, ' 「+ emaid +」', ' 「+ femaid +」', ' 「+地址+」', 「+ SEM +」, ' 「+ BG +」', ' 「+ COLL +」', ' 「+ depto +」', '的java', '的java')「; – 2012-08-05 10:17:25

0

試試這個.....

updates="INSERT INTO form1(entrydate,name,gender,month,date,phno,emailid,facebookid,address,semester,bloodgroup,slno,college,department,liveprojects,trainings) 
values('"+abc+"','"+t3.getText()+"','"+t4.getText()+"','"+def+"','"+def1+"','"+zzz+"','" +t8.getText()+"','"+t9.getText()+"','"+t10.getText()+"','"+aaaa+"','" 
    +t12.getText()+"','"+xyz+"','"+t13.getText()+"','"+dd+"','sa','da')";