[問題] 有關更新資料表問題

看板java作者 (Chansamo)時間13年前 (2012/04/01 04:02), 編輯推噓9(905)
留言14則, 8人參與, 最新討論串1/1
小弟現在剛入門JAVA,若問題太過粗淺還請見諒, 小弟最近在進行資料庫連結時, 想利用程式碼去資料庫新增資料, 但只要執行到executeUpdate時, 程式似乎就會陷入無窮迴圈無法跳出, 也沒有出現任何錯誤訊息, 還請各位大大賜教, 程式碼如下 package JDBCFirstConect; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.Statement; public class ConnecterJDBC { public final static String DBDriver ="com.microsoft.sqlserver.jdbc.SQLServerDriver"; public final static String connectionUrl = "jdbc:sqlserver://localhost:1433;" + "databaseName=Test;user=XX;password=XX;"; public static void main(String[] args) throws Exception { System.out.println("1"); Connection conn= null; Statement stmt=null; System.out.println("2"); Class.forName(DBDriver); System.out.println("3"); conn= DriverManager.getConnection(connectionUrl); System.out.println("4"); stmt=conn.createStatement(); System.out.println("5"); stmt.executeUpdate("use Test");//本行是因為跑不出來才加的, 但即使增加後依然無解 System.out.println("6"); stmt.executeUpdate("INSERT INTO person(pie,name,age,birthday, salary) VALUEs (1,'老王',18,'2004-03-01',9000)"); System.out.print(conn); conn.close(); } }; 執行結果只會顯示為, 1 2 3 4 5 到executeUpdate時就完全沒有反應, 其中pie、age、sa為數字,name、birthday為varchar, 使用之資料庫為SQL server 2008, 資料表是建置在Test資料庫下名為person 還煩請各位大大賜教。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.180.73 ※ 編輯: Chansamo 來自: 118.169.180.73 (04/01 04:03) ※ 編輯: Chansamo 來自: 118.169.180.73 (04/01 04:11)

04/01 11:08, , 1F
Try catch看錯誤訊息拉。
04/01 11:08, 1F

04/01 11:09, , 2F
不管怎麼樣 main throw exception 是不好的習慣!
04/01 11:09, 2F

04/01 11:42, , 3F
hate9572已使用Try catch程式碼,但依然沒有出現錯誤訊息
04/01 11:42, 3F
*[1;31m→ *[33mChansamo*[m*[33m:但已附Try catch程式碼如下 package JDBCFirstConect; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class ConnecterJDBC { public final static String DBDriver ="com.microsoft.sqlserver.jdbc.SQLServerDriver"; public final static String connectionUrl = "jdbc:sqlserver://localhost:1433;" + "databaseName=Test;user=sa;password=iemyuanmj;"; public static void main(String[] args) throws Exception { try{ System.out.println("1"); Connection conn= null; Statement stmt=null; System.out.println("2"); Class.forName(DBDriver); System.out.println("3"); conn= DriverManager.getConnection(connectionUrl); System.out.println("4"); stmt=conn.createStatement(); System.out.println("5"); stmt.executeUpdate("use Test"); System.out.println("6"); stmt.executeUpdate("INSERT INTO person(pie,name,age,birthday,s alary) VALUEs (1,'老王',18,'2004-03-01',9000)"); System.out.print(conn); conn.close(); } catch(SQLException e){ e.toString(); System.out.print("連結失敗"); } } }; ※ 編輯: Chansamo 來自: 118.169.180.73 (04/01 11:45) ※ 編輯: Chansamo 來自: 118.169.180.73 (04/01 11:46)

04/01 12:50, , 4F
commit ? block & wait ?
04/01 12:50, 4F
感謝您的回應,這部分小弟真的不太理解要怎麼修改,還期盼您能詳細解說。

04/01 12:58, , 5F
可以研究一下try catch的用法...
04/01 12:58, 5F

04/01 13:12, , 6F
我不覺得"連結失敗"會比printstacktrace來的清楚(笑
04/01 13:12, 6F
這部分小弟有做過修改,不過依然沒有錯誤訊息出現....還是以無限迴圈的方式繼續跑... 目前小弟已經將連接方式做初步的修改如下 package JDBCFirstConect; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; public class ConnecterJDBC { public final static String DBDriver ="com.microsoft.sqlserver.jdbc.SQLServerDriver"; public final static String connectionUrl = "jdbc:sqlserver://localhost:1433;" + "databaseName=Test;user=sa;password=iemyuanmj;"; public static void main(String[] args) throws Exception { System.out.println("1"); Connection conn= null; PreparedStatement pstmt=null; System.out.println("2"); Class.forName(DBDriver); System.out.println("3"); conn= DriverManager.getConnection(connectionUrl); System.out.println("4"); pstmt=conn.prepareStatement("INSERT INTO person(pie,name,age,birthday,salary) VALUEs (?,?,?,?,?)"); try{ pstmt.setInt(1, 1); pstmt.setString(2, "name"); pstmt.setInt(3, 12); pstmt.setString(4, "2009-1-1"); pstmt.setInt(5, 12); System.out.println("5"); System.out.println("6"); pstmt.executeUpdate(); System.out.print(conn); pstmt.close(); conn.close(); } catch(SQLException e){ e.toString(); System.out.print(e); pstmt.close(); conn.close(); } catch (Exception ex) { pstmt.close(); conn.close(); ex.printStackTrace(); } } }; 雖執行結果上看來是已經執行成功 2 3 4 5 6 ConnectionID:1 ClientConnectionId: 682acbf2-c7ec-4b27-b742-f97760016d5 但到資料庫中Test下的person資料表中查詢, 資料卻沒有匯入, 小弟現在在懷疑的是, 是否在利用java連結資料庫時,必須要先指定這次要用的是mssql中的哪一個資料庫, 後續才能開始選擇要在哪個表單中新增資料? (由於從MSSQL2008中的"新增查詢"中是要先指定才能新增資料) 但小弟在上網查詢過後, 依然找不到相關說要先指定資料庫才能創建或修改資料表的相關資訊, 連我原本已經先在裡面建立的一些資料,想先嘗試讀取也是失敗(程式碼如下) package JDBCSecondConnect; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCThridQueue { public final static String DBDriver ="com.microsoft.sqlserver.jdbc.SQLServerDriver"; public final static String connectionUrl = "jdbc:sqlserver://localhost:1433;" + "databaseName=Test;user=sa;password=iemyuanmj;"; public static void main(String[] args) throws Exception { ResultSet result = null; try{ System.out.println("1"); Connection conn= null; PreparedStatement pstmt=null; System.out.println("2"); Class.forName(DBDriver); System.out.println("3"); conn= DriverManager.getConnection(connectionUrl); System.out.println("4"); pstmt=conn.prepareStatement("select pie,name,age,birthday ,salary from person"); pstmt.setInt(1, 1); pstmt.setString(2, "name"); pstmt.setInt(3, 12); pstmt.setString(4, "2009-1-1"); pstmt.setInt(5, 12); System.out.println("5"); System.out.println("6"); result=pstmt.executeQuery(); while (result.next()){ int pie = result.getInt(1); String name = result.getString(2); int age = result.getInt(3); String birthday = result.getString(4); int salary = result.getInt(5); System.out.println(pie); } System.out.print(conn); result.close(); pstmt.close(); conn.close(); } catch(SQLException e){ e.toString(); System.out.print(e); } } }; 但在這部分, 他就會指出說,他找不到我person資料表, 並顯失錯誤訊息如下 1 2 3 4 com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出範圍。 com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出範圍。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError (SQLServerException.java:190) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam( SQLServerPreparedStatement.java:714) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue( SQLServerPreparedStatement.java:723) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setInt( SQLServerPreparedStatement.java:884) at JDBCSecondConnect.JDBCThridQueue.main(JDBCThridQueue.java:29) 還請各位大大協助, 謝謝 ※ 編輯: Chansamo 來自: 116.59.232.211 (04/01 14:52)

04/01 19:45, , 7F
Select 沒有parameter 把他註解掉吧
04/01 19:45, 7F
"select pie,name,age,birthday,salary from person" 請問是指中間pie-salary的參數嗎? 因為刪去後或改成*結果皆相同, 不知是哪裡要進行修改。

04/01 19:50, , 8F
Insert沒成功 查一下autocommit與 executeupdate的回傳值
04/01 19:50, 8F
若今日使用System.out.print(autocommit());則顯示 java.lang.NullPointerException at java.io.Writer.write(Unknown Source) at java.io.PrintStream.write(Unknown Source) at java.io.PrintStream.print(Unknown Source) at java.io.PrintStream.println(Unknown Source) at JDBCFirstConect.ConnecterJDBC.main(ConnecterJDBC.java:40) 若今日使用System.out.print(ptmt.executeupdate());則顯示 -1 錯誤代碼那邊也會顯示三種狀況 1.Software caused connection abort: recv failed 2.com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset 3.SQL Server 未傳回回應。已關閉連接。 上網查也查不到相關對應的解決方法,還請各位賜教。 ※ 編輯: Chansamo 來自: 221.120.4.249 (04/01 22:58)

04/02 00:37, , 9F
Connection 測一下,isclose()的值.
04/02 00:37, 9F

04/02 00:40, , 10F
Paramater指preparestatment 寫code先看方法怎用吧~_~
04/02 00:40, 10F

04/02 09:20, , 11F
你要再看一下文件或參考書有關SQL的用法~
04/02 09:20, 11F

04/02 10:14, , 12F
preparestatement的用法錯了 去查一下吧
04/02 10:14, 12F

04/02 13:53, , 13F
個人建議你先找個可以run的範例再改成自己要的...
04/02 13:53, 13F

04/02 22:58, , 14F
參考良葛葛http://0rz.tw/H35tq
04/02 22:58, 14F
文章代碼(AID): #1FTsAvTK (java)