java 板


LINE

小弟現在剛入門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)
1F:推 hate9527:Try catch看錯誤訊息拉。 04/01 11:08
2F:→ hate9527:不管怎麼樣 main throw exception 是不好的習慣! 04/01 11:09
3F:→ Chansamo:hate9572已使用Try catch程式碼,但依然沒有出現錯誤訊息 04/01 11:42
*[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)
4F:→ iFEELing:commit ? block & wait ? 04/01 12:50
感謝您的回應,這部分小弟真的不太理解要怎麼修改,還期盼您能詳細解說。
5F:→ ashin10:可以研究一下try catch的用法... 04/01 12:58
6F:推 hate9527:我不覺得"連結失敗"會比printstacktrace來的清楚(笑 04/01 13:12
這部分小弟有做過修改,不過依然沒有錯誤訊息出現....還是以無限迴圈的方式繼續跑... 目前小弟已經將連接方式做初步的修改如下 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)
7F:推 hate9527:Select 沒有parameter 把他註解掉吧 04/01 19:45
"select pie,name,age,birthday,salary from person" 請問是指中間pie-salary的參數嗎? 因為刪去後或改成*結果皆相同, 不知是哪裡要進行修改。
8F:推 hate9527:Insert沒成功 查一下autocommit與 executeupdate的回傳值 04/01 19:50
若今日使用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)
9F:推 hate9527:Connection 測一下,isclose()的值. 04/02 00:37
10F:推 hate9527:Paramater指preparestatment 寫code先看方法怎用吧~_~ 04/02 00:40
11F:推 swpoker:你要再看一下文件或參考書有關SQL的用法~ 04/02 09:20
12F:→ IamTD:preparestatement的用法錯了 去查一下吧 04/02 10:14
13F:推 risker760915:個人建議你先找個可以run的範例再改成自己要的... 04/02 13:53
14F:推 BearWu:參考良葛葛http://0rz.tw/H35tq 04/02 22:58







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP