站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题数据库:程序中使用事务时的问题(急!!在线等待,请各位大侠帮个忙,小弟先谢各位!!)

数据库:程序中使用事务时的问题(急!!在线等待,请各位大侠帮个忙,小弟先谢各位!!)

摘要: 数据库:程序中使用事务时的问题(急!!在线等待,请各位大侠帮个忙,小弟先谢各位!!)


小弟刚学JAVA中数据库的操作,但在使用事务时就遇到了一个问题,小弟愚昧,特求助于各位,谢谢!!

当我在程序中加入事务处理后就报异常(错误指向关闭数据库连接的语句:conn.close();),如果去掉事务就运行正常.
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]无效的事务处理状态
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLDisconnect(JdbcOdbc.java:3034)
at sun.jdbc.odbc.JdbcOdbcDriver.disconnect(JdbcOdbcDriver.java:981)
at sun.jdbc.odbc.JdbcOdbcConnection.close(JdbcOdbcConnection.java:739)
at Myjdbc.main(Myjdbc.java:57)

源代码如下
import java.sql.*;

public class Myjdbc {
public static void main(String[] args) {
String url="jdbc:odbc:book";
Connection conn=null;
Statement stmt=null;
DatabaseMetaData bdmd=null;
ResultSet rs = null;
PreparedStatement pstmt=null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection(url, "sa", "sa");

conn.setAutoCommit(false);
stmt=conn.createStatement();
stmt.executeUpdate("delete from student");
stmt.executeUpdate("insert into student(sno,sname,sex,age) values('0001','tan谭','b',24)");
conn.commit();

bdmd=conn.getMetaData();
System.out.println(bdmd.getDatabaseProductName());
System.out.println(bdmd.getDatabaseProductVersion());
System.out.println(bdmd.getDriverName());
System.out.println(bdmd.getDriverVersion());

rs=stmt.executeQuery("select sno,sname,sex,age from student");
while (rs.next()){
System.out.println("name:"+rs.getString(2)+" age:"+rs.getString(4));
}

pstmt=conn.prepareStatement("select sno,sname,sex,age from student where sno=?");
pstmt.setString(1, "0001");
rs=pstmt.executeQuery();
while (rs.next()){
System.out.println("name:"+rs.getString(2)+" age:"+rs.getString(4));
}


} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally{
try {
if(rs!=null)
rs.close();
if (stmt != null){
stmt.close();
}
if(conn != null && !conn.isClosed())
conn.close();//使用事务后错误指向这里

} catch (SQLException e) {
e.printStackTrace();
}
}

}

}


怎么没人理我啊,自己顶一下.
刚刚我换了驱动(换成微软提供的JDBC驱动,不使用ODBC桥驱动)后这个问题就没有了
为什么呢,是不是ODBC桥的问题呢,如果是的话,该如何解决啊?????
各位大侠,请帮帮小弟!!


你先要了解你连接的数据库支持事务不。


我连的是SQL2000,肯定是支持事务的


是不是驱动有问题?


谢谢各位的关注与帮助!
最近在外出差,不好意思.
我用的是JDK5.0,ODBC桥驱动是SUN自带的,数据库是SQL2000sp4.

这个问题我现在还没解决,急,请各位帮帮忙.


不是看数据库支持不支持事务,而是看驱动是不是支持事务,即使你的数据支持事务,而驱动程序不支持一样没用,所以说驱动尽量用各自数据库的,而不要用SUN自带的


谢谢,结帖了!


↑返回目录
前一篇: eclipse和jsmooth如何生成exe
后一篇: switch case里的case能够case 1,2,3吗?就是把多个条件放到一个case里