package com.softtone.excution;
import java.sql.*;
import java.util.List;
public class Odb
{
String driverClassName = null;
String URL = null;
String username = null;
String password = null;
Connection mycon = null;
ResultSet rs=null;
Statement statement=null ;
/**
* @param driverClassName
* @param url
* @param username
* @param password
*/
public Odb(){
driverClassName = "com.ibm.db2.jcc.DB2Driver";
URL = "jdbc:db2://202.112.107.114:3700/wapsite";
username = "db2inst";
password = "db2inst";
}
public Odb(String dbip,String dbport,String dbname,String username,String password)
{
this.driverClassName = "COM.ibm.db2.jcc.DB2Driver";
this.URL = "jdbc:db2://"+dbip+":"+dbport+"/"+dbname+"";
this.username = username;
this.password = password;
}
/**
* 返回一个数据库的连接。
*/
public Connection getConnection() {
try{
Driver driver=null;
driver = (Driver)Class.forName(driverClassName).newInstance();
DriverManager.registerDriver(driver);
mycon = DriverManager.getConnection(URL,username,password);// 数据源连接信息
mycon.setAutoCommit(false);
System.out.println("CONN OPENED");
return mycon;
}
catch (Exception e){
close();
e.printStackTrace();
throw new RuntimeException(e);
}
}
public Connection getAConnection(){
try{
if (mycon==null){
return getConnection();
}else{
return mycon;
}
}catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 查询数据库,返回一个ResultSet结果集。
*/
public ResultSet query(String sql){
try{
getAConnection();
statement = mycon.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=statement.executeQuery(sql);
}catch(SQLException ex){
System.err.println("query():"+ex.getMessage());
System.err.println("SQL:"+sql);
throw new RuntimeException(ex);
}catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
throw new RuntimeException(e);
}
return rs;
}
/**
* 执行单条sql语句。
*/
public boolean excute(String sql)
{
try
{
getAConnection();
statement = mycon.createStatement();
statement.execute(sql);
mycon.commit();//提交
return true;
}
catch(SQLException ex)
{
System.err.println("query():"+ex.getMessage());
return false;
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
return false;
}
}
/**
* 批量执行sql语句。
*/
public boolean excute(List<String> sql) throws SQLException
{
try
{
try
{
getAConnection();
}
catch (Exception e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
// close();
}
mycon.setAutoCommit(false);
statement = mycon.createStatement();
//System.out.println("进到这里了吗??");
for(int i=0;i<sql.size();i++)
{
statement.addBatch(sql.get(i));
System.out.println("我所获得的sql语句是:" + sql.get(i));
}
statement.executeBatch();
//System.out.println("几条SQL语句更新了呢?" + updateRows);
System.out.println("我进到这里了吗?");
mycon.commit();//提交
return true;
}
catch(SQLException ex)
{
try {
mycon.rollback();
// close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
System.err.println("query():"+ex.getMessage());
throw ex;
}
}
//关闭数据库连接
public void close()
{
try{
if(rs!=null){
rs.close();
}
}catch(Exception es){
es.printStackTrace();
}
try{
if(statement!=null){
statement.close();
}
}catch(Exception es){
es.printStackTrace();
}
try{
if(mycon!=null){
mycon.close();
System.out.println("CONN CLOSEED");
}
}catch(Exception es){
es.printStackTrace();
}
statement = null;
rs = null;
mycon = null;
}
public static void main(String[] arg) throws Exception{
Odb odb=new Odb();
//odb.getAConnection();
int i=0;
String sql="";
ResultSet rs=null;
sql = "select * from bus_code";
rs = odb.query(sql);
while(rs.next())
{
System.out.println(++i);
}
//System.out.println(rs.getString(2));
rs.close();
odb.close();
}
}
com.ibm.db2.jcc.b.SqlException: [jcc][t4][10251][10308][3.53.70] 正在连接上执行事务时,请求了 java.sql.Connection.close()。
事务仍然保持活动状态,不能关闭连接。 ERRORCODE=-4471, SQLSTATE=null
at com.ibm.db2.jcc.b.bd.a(bd.java:660)
at com.ibm.db2.jcc.b.bd.a(bd.java:60)
at com.ibm.db2.jcc.b.bd.a(bd.java:120)
at com.ibm.db2.jcc.b.jb.t(jb.java:1105)
at com.ibm.db2.jcc.b.jb.w(jb.java:1128)
at com.ibm.db2.jcc.b.jb.u(jb.java:1114)
at com.ibm.db2.jcc.b.jb.close(jb.java:1098)
at com.softtone.excution.Odb.close(Odb.java:192)
at com.softtone.excution.Odb.main(Odb.java:219)
查询没有任何问题,就是无法关闭
数据库:DB2 v9.5
jcc驱动