BEN asked in 電腦與網際網路程式設計 · 1 decade ago

Java傳新資料到資料庫出的問題

我寫了一段程式碼如下:

ResultSet rls = stmt.executeQuery("SELECT max(Number)as max FROM Orders");

String numb="";

int num=0;

rls.next();

int max=rls.getInt("max");

if(max!=0){

num=max+1;

numb=Integer.toString(num);

} else{

numb=date+"01";

}

String detai=detail.substring(0,detail.length()-3);

String strSQL="Insert into Orders(Number,Price,Content) Values('"+ numb +"',"+ total +",'"+ detai +"')";

out.println(strSQL);

ResultSet rst=stmt.executeUpdate(strSQL);

但是執行時出現下面的錯誤訊息:

An error occurred at line: 7 in the jsp file: /CheckOrder.jsp

Generated servlet error:

C:\Documents and Settings\BEN\.netbeans\5.5\apache-tomcat-5.5.17_base\work\Catalina\localhost\WebApplication\org\apache\jsp\CheckOrder_jsp.java:98: incompatible types

found : int

required: java.sql.ResultSet

ResultSet rst=stmt.executeUpdate(strSQL);

^

An error occurred at line: 7 in the jsp file: /CheckOrder.jsp

Generated servlet error:

Note: C:\Documents and Settings\BEN\.netbeans\5.5\apache-tomcat-5.5.17_base\work\Catalina\localhost\WebApplication\org\apache\jsp\CheckOrder_jsp.java uses or overrides a deprecated API.

An error occurred at line: 7 in the jsp file: /CheckOrder.jsp

Generated servlet error:

Note: Recompile with -Xlint:deprecation for details.

1 error

其中strSQL顯示出來如下

Insert into Orders(Number,Price,Content) Values('97101401',600,'Small Chicken*10')

資料表Orders的欄位型態Number是字串也是索引鍵;Price是數字;Content也是字串

在資料欄位型態下都沒錯誤的情況下一直都出現這樣的錯誤訊息

請各位資深的Java專家們幫我解開這個謎團

1 Answer

Rating
  • Samuel
    Lv 5
    1 decade ago
    Favorite Answer

    1. 目前看起來只有一個簡單的錯誤 :

    ResultSet rst=stmt.executeUpdate(strSQL);

    根據 API 規格 java.sql.Statement.executeUpdate(String sql) 傳回一個 int 值, 此 int 代表 sql 指令完成後傳回的受此指令作用的資料筆數(而不是資料), 可能是0或更多. 例如update了幾筆, 或新增了幾筆, 這個值跟你使用的資料庫有關係, 不是由java產生的, 而是由資料庫傳回的. 所以你放了一個 ResultSet 在 = 左邊去接這個值, 在編譯時就錯誤了, 正如錯誤訊息所顯示的, = 左邊是 ResultSet 右邊是 int(executeUpdate傳回的), 所以編譯錯誤. 將 ResultSet rst=stmt.executeUpdate(strSQL);

    改成如 int rows = stmt.executeUpdate(strSQL); 就對了.

Still have questions? Get your answers by asking now.