[問題] 有關更新資料表問題
小弟現在剛入門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
04/01 11:08, 1F
→
04/01 11:09, , 2F
04/01 11:09, 2F
→
04/01 11:42, , 3F
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
04/01 12:50, 4F
感謝您的回應,這部分小弟真的不太理解要怎麼修改,還期盼您能詳細解說。
→
04/01 12:58, , 5F
04/01 12:58, 5F
推
04/01 13:12, , 6F
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
04/01 19:45, 7F
"select pie,name,age,birthday,salary from person"
請問是指中間pie-salary的參數嗎?
因為刪去後或改成*結果皆相同,
不知是哪裡要進行修改。
推
04/01 19:50, , 8F
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
04/02 00:37, 9F
推
04/02 00:40, , 10F
04/02 00:40, 10F
推
04/02 09:20, , 11F
04/02 09:20, 11F
→
04/02 10:14, , 12F
04/02 10:14, 12F
推
04/02 13:53, , 13F
04/02 13:53, 13F
推
04/02 22:58, , 14F
04/02 22:58, 14F