jsp中如何使用事务对sqlserver操作。
我使用win2000,tomcat 4.0服务器,sqlserver2000。
现在建立一个操作数据库的类,其中包括对事务的操作,但是当我引用
事务的时候总是出错,但是一旦把事务操作语句去掉就可以执行。数据库操作类
代码如下:
package com.db;
import java.sql.*;
import java.util.StringTokenizer;
public class DbTrans
{
private String _username;
private String _password;
private String _driver;
private String _dburl;
public static Connection _con;
Statement _stmt;
boolean isAutoCommit;
public DbTrans()
{
try{
_dburl = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=talentsmbtest";
_username = "sa";
_password = "";
_driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
Class.forName(_driver).newInstance();
_con = DriverManager.getConnection(_dburl,_username,_password);
} catch(Exception ex){
System.out.println("Can not get new Connection"+ex.getMessage());
}
}
/**
*query table
* @param sql
* @return ResultSet */
public ResultSet getDbResultSet(String sql)
{
ResultSet rset = null;
try
{
_stmt = _con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rset = _stmt.executeQuery(sql);
}
catch (Exception e)
{
System.out.println("Query error: " + e);
}
return rset;
}
/**
* 过程开始
* @throws SQLException 捕捉错误
*/
public void beginTrans() throws SQLException {
try {
isAutoCommit = _con.getAutoCommit();
_con.setAutoCommit(false);
}
catch(SQLException ex) {
ex.printStackTrace();
System.out.print("beginTrans Errors");
throw ex;
}
}
/**
* 数据事务提交
* @throws SQLException 捕捉错误
*/
public void commit() throws SQLException {
try{
_con.commit();
_con.setAutoCommit(isAutoCommit);
}
catch(SQLException ex) {
ex.printStackTrace();
System.out.print("Commit Errors!");
throw ex;
}
}
/**
* 数据事务回滚
*/
public void roolback() {
try {
_con.rollback();
_con.setAutoCommit(isAutoCommit);
}
catch(SQLException ex) {
ex.printStackTrace();
System.out.print("Roolback Error!");
}
}
/**
* 判断是否为自动加入数据模式
* @return boolean值
* @throws SQLException 捕捉错误
*/
public boolean getAutoCommit() throws SQLException {
boolean result = false;
try {
result = _con.getAutoCommit();
}
catch(SQLException ex) {
ex.printStackTrace();
System.out.println("getAutoCommit fail "+ex.getMessage());
throw ex;
}
return result;
}
/**
* executeQuery操作,用于数据查询,主要是Select
* @param sql 查询字段
* @return 数据集
* @throws SQLException 捕捉错误
*/
/**
* executeUpdate操作,用于数据更新,主要是Update,Insert
* @param sql 查询字段
* @throws SQLException 捕捉错误
*/
public void executeUpdate(String sql) throws SQLException {
try {
_stmt = _con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
_stmt.executeUpdate(sql);
}
catch (SQLException ex) {
ex.printStackTrace();
System.out.println("dbTrans.executeUpdate:"+ex.getMessage());
throw ex;
}
}
public static void main(String arg[])
{
System.out.println("Hello Everybody!");
}
}
下面是引用的代码:
package com.kqgl;
import java.sql.*;
import java.io.*;
import com.db.*;
public class Wcdj{
DbTrans myDbTrans=new DbTrans();
ResultSet rs=null;
public Wcdj(){}
public boolean addWc(String Akqkh,String Awcyf,String Awcsj,String Ahgsj,String Awcyy)throws SQLException{
// myDbTrans.beginTrans();
boolean adwc=false;
try{
String SQL="insert into t_wcdj (kqkh,wcyf,wcsj,hgsj,wcyy) values('"+Akqkh+"','"+Awcyf+"','"+Awcsj+"','"+Ahgsj+"','"+Awcyy+"')";
myDbTrans.executeUpdate(SQL);
adwc=true;
}catch(SQLException e)
{
// myDbTrans.roolback();
System.out.println(e.toString());
adwc=false;
}
// myDbTrans.commit();
return adwc;
}
}
出现的错误代码:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a
cloned connection while in manual transaction mode.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source
)
..........................
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.ja
va:1125)
at java.lang.Thread.run(Thread.java:536)
dbTrans.executeUpdate:[Microsoft][SQLServer 2000 Driver for JDBC]Can't start a c
loned connection while in manual transaction mode.
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a
cloned connection while in manual transaction mode.