日期:2014-05-20  浏览次数:20799 次

菜鸟送分了,关于jdbc连接类的问题
我写了个jdbc连接类,如下:
public   class   MySqlConn   {
public   Connection   conn   =   null;
public   Statement   stmt   =   null;
public   ResultSet   rs   =   null;
public   PreparedStatement   pstmt=null;

public   MySqlConn(){
try{
Class.forName( "org.gjt.mm.mysql.Driver ");
conn=DriverManager.getConnection( "jdbc:mysql://localhost:3306/invertedindex?autoReconnect=true ", "root ", "sa ");
stmt=conn.createStatement();
}
catch(Exception   e){
e.printStackTrace();
}
}

public   ResultSet   executeQuery(String   sql)   throws   Exception   {
rs   =   stmt.executeQuery(sql);
                return   rs;
        }
public   void   closeResultSet(){
if(this.rs!=null){
try{
this.rs.close();
}catch(SQLException   e){
e.printStackTrace();
}
}
}

public   void   closePreparedStatement(){
if(pstmt!=null){
try{
pstmt.close();
}
catch(SQLException   e){
e.printStackTrace();
}
}
}
public   void   closeStatement(){
if(stmt!=null){
try{
stmt.close();
}catch(SQLException   e){
e.printStackTrace();
}
}
}
public   void   closeConn(){
                                                      if(conn!=null){
try{
conn.close();
}
catch(SQLException   e){
e.printStackTrace();
}
}
}
在主函数里我作如下操作:
public   static   void   main(String[]   args)   throws   Exception   {
MySqlConn   mysql=new   MySqlConn();
String   sql= "select   DocId   from   doc ";
while(mysql.executeQuery(sql).next()){
System.out.println(mysql.executeQuery(sql).getInt( "DocId "));
}
mysql.closeResultSet();
mysql.closeStatement();
mysql.closeConn();
if(mysql.conn!=null){
System.out.print(true);
}

}
像上面那样直接while(mysql.executeQuery(sql).next())是不对的,那我应该怎样用连接类里写的那个返回结果集的方法呢?还有在做了关闭ResultSet,关闭Statement,和Conn后为什么Statement,Conn等并没有真正close掉?这个连接类到底应该怎么写?先在这里谢过

------解决方案--------------------
while(mysql.executeQuery(sql).next()) 是肯定不对啦。因为它每次都是去用Statement去执行sql一次。而不是说指针往下走。你这应该是个死循环吧。除非那个sql一行数据也查不出来。
这个问题解决了,再说关闭ResultSet,关闭Statement,和Conn的那个问题吧。
还有问题的话,贴错误信息
------解决方案--------------------
ResultSet rs = mysql.executeQuery(sql);
while(rs.next())
{
System.out.println(rs.getInt( "DocId "));
}

rs.close();
mysql.closeStatement();
mysql.closeConn();
------------------------
public void closeConn(){
if(conn!=null){
try{
conn.close();
conn = null;//关闭加这句
}
catch(SQLException e){
e.printStackTrace();
}
}
}
------解决方案--------------------
理论来讲statement关了以后,那么他的 smt应该==null。其他类似。