只要是用的时间长一点1,2天它就说 在OperateJDBC中s = con.createStatement();出现错误
我想可能是没有关闭Statement,导致的,特向大家请教一下我用的是 MySQL Server 5.0 ,jar 是mysql-connector-java-3.0.16-ga-bin.jar1 连接数据库
package jzst.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;public class JDBConnection {
static {
ResourceBundle rb = ResourceBundle.getBundle("jzst.jdbc.JDBConnection");
className = rb.getString("className");
url = rb.getString("url");
user = rb.getString("user");
password = rb.getString("password");
} private final static  String className;
private final static String url;
private final static String user;
private final static String password;

public JDBConnection() {
try {
Class.forName(className);
} catch (ClassNotFoundException e) {
System.out.println("加载数据库失败");
e.printStackTrace();
}
}

public Connection creatConnection() {
Connection con = null;
try {
con = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
System.out.println("获得数据库联接失败");
e.printStackTrace();
}
return con;
}
}2 操作数据库package jzst.jdbc;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class OperateJDBC {
private final static JDBConnection jdbc = new JDBConnection();
private Connection con = null;
private ResultSet rs = null;
private Statement s = null;

public OperateJDBC() {
con = jdbc.creatConnection();
}

public ResultSet getResultSet(String sql) {
try {
if(con == null) {
con = jdbc.creatConnection();
}
s = con.createStatement();
try {
rs = s.executeQuery(sql);
} catch (SQLException e) {
System.out.println("获取结果失败-executeQuery");
e.printStackTrace();
}
} catch (SQLException e) {
System.out.println("获得查询联接失败");
e.printStackTrace();
}
return rs;
}
public ResultSet getResultSet(String table,int start,int page) {
try {
if(con == null) {
con = jdbc.creatConnection();
}
s = con.createStatement();
try {
String sql = "select * from "+table+" limit "+start+","+page;
rs = s.executeQuery(sql);
} catch (SQLException e) {
System.out.println("获取结果失败-executeQuery");
e.printStackTrace();
}
} catch (SQLException e) {
System.out.println("获得查询联接失败");
e.printStackTrace();
}
return rs;
}
public int execute(String sql) {
int cont = 0;
try {
if(con == null) {
con = jdbc.creatConnection();
}
s = con.createStatement();
cont = s.executeUpdate(sql);
} catch (SQLException e) {
System.out.println("execute失败");
e.printStackTrace();
}
return cont;
}

public void closeConnection() {
try {
if(rs != null) {
rs.close();
}
} catch (SQLException e) {
System.out.println("关闭ResultSet错误");
e.printStackTrace();
}finally {
rs = null;
}

try {
if(s != null) {
s.close();
}
} catch (SQLException e) {
System.out.println("关闭Statement错误");
e.printStackTrace();
}finally {
s = null;
}

try {
if(con != null) {
con.close();
}
} catch (SQLException e) {
System.out.println("关闭Connection错误");
e.printStackTrace();
}finally {
con = null;
}
}
}

解决方案 »

  1.   

    没有看到你在哪个地方调用了closeConnection()我觉得你需要在getResultSet(String sql),getResultSet(String table,int start,int page)和execute(String sql)方法中在try catch中添加上finally段,并将调用closeConnection(),也就是说每执行一次create和close一次connection
      

  2.   

    getResultSet(String sql),getResultSet(String table,int start,int page),execute(String sql),这几个方法中都只见你创建连接,rs,和statement,都没看到你调用closeConnection(),你的连接都没关啊,当然时间长了就会有问题
      

  3.   

    mysql-connector-java-3.0.16-ga-bin.jar
    这个没有版本问题么???
      

  4.   

    public JDBConnection() {
            try {
                Class.forName(className);
            } catch (ClassNotFoundException e) {
                System.out.println("加载数据库失败");
                e.printStackTrace();
            }
        }
    他放这好象不合适,Class.forName(className)放到static{}里是不是好点,只加载一次就OK了,不用每创建一次就加载一次。
      

  5.   

    getResultSet(String sql),getResultSet(String table,int start,int page),execute(String sql),
    这几个方法中都只见你创建连接,rs,和statement,都没看到你调用closeConnection(),你的连接都没关啊,当然时间长了就会有问题
      

  6.   

    并没有找到closeConnection() 代码在何处被调用了