作者Chansamo (Chansamo)
看板java
标题[问题] 有关更新资料表问题
时间Sun Apr 1 04:01:59 2012
小弟现在刚入门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