程序之前在公司电脑上跑的好好的,后来搬到自己的电脑,就老报
 [Microsoft][SQLServer JDBC Driver]System Exception: Connection reset.
这个异常。
上网搜该问题,个人觉得大概应该是第一个connection还未关闭的情况下,又新去获取一个connection 的情形下,DriverManager.getConnection(url, user, password) 这句会报错。为了验证写了下面的代码,发现确实如此。
可是公司机器上一样的代码却没有报,十分不解?
可能是数据库不一样,公司用的企业版,自己装的是开发版。打了sp4补丁,没效果。
实在不行打算明天重装SQL Server看看,搞了一天了,郁闷死了~~~
请各位指点:究竟是否是数据库的原因呢?还是我的代码本身就有问题,只是在某些环境下没有暴露而已?
谢谢!//JDBC连接工具类
public final class JdbcUtils {
 private static String db_driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
 private static String url = Setting.getDatabaseConn();
 private static String user = Setting.getDatabaseUser();
 private static String password = Setting.getDatabasePass(); private JdbcUtils() {
 } static {
  try {
   Class.forName(db_driver);
  } catch (ClassNotFoundException e) {
   throw new ExceptionInInitializerError(e);
  }
 } public static Connection getConnection() throws SQLException {
  Connection conn = DriverManager.getConnection(url, user, password);
  return conn;
 }
}//测试代码如下Connection conn = null;
Statement st = null;
ResultSet rs = null;
// 1.建立连接
conn = JdbcUtils.getConnection();//异常爆发点!!!!!!!!!!!!!!!!!!!!!
Connection conn2 = JdbcUtils.getConnection();
conn2.close();// 2.创建语句
st = conn.createStatement();// 3.执行语句
rs = st.executeQuery("select * from code_tbl");// 4.处理结果
while (rs.next()) {
 // 参数中的1,2,3,4是指sql中的列索引
 System.out.println(rs.getObject(1) + "\t" + rs.getObject(2)
   + "\t" + rs.getObject(3) + "\t" + rs.getObject(4));
 break;
}

解决方案 »

  1.   

    //异常爆发点!!!!!!!!!!!!!!!!!!!!!
    Connection conn2 = JdbcUtils.getConnection();
    conn2.close();
    没打开就关闭了???
      

  2.   


    主要头一句 Connection conn2 = JdbcUtils.getConnection(); 这句已经抛出了异常....:(
      

  3.   


    conn = JdbcUtils.getConnection();//异常爆发点!!!!!!!!!!!!!!!!!!!!!
    Connection conn2 = JdbcUtils.getConnection();
    conn2.close();为什么不用CONN呢,就算你CONN2其实和CONN是一样的吧
      

  4.   

    具体来说其实是这样的:实际代码中我有很多代码都是如下的:(简单写下啊,希望能表达清楚)CountryDao.queryCountry()方法中:
         ....
         conn = JdbcUtil.getConnection();
         ....
         String countryName = rs.getString(1); 
         ....
         //然后代码又要调用另一个DAO,希望把英文的 countryName 转成中文的.
         String countryNameCh = CodeDao.getCodeValue(countryName);
         ....而CodeDao.getCodeValue(String key)方法中:
         自然又有
         ....
         conn = JdbcUtil.getConnection();  //这里再次获取连接就报异常了。
         ....
      

  5.   

    逻辑混乱,第一个conn没有关闭,再次连接第二个conn,仔细分析下程序。
      

  6.   

    public static Connection getConnection() throws SQLException {
      Connection conn = DriverManager.getConnection(url, user, password);
      return conn;
     }
    按这段代码,我理解上面代码中两次的conn应该是两个不同的连接对象。自己的疑惑是:
    不明确 DriverManager.getConnection 获得的第一个Connection对象 conn 没有关闭的情况下
    是否可以 DriverManager.getConnection 获得另一个Connection对象 conn2 ?盼请继续执教。
      

  7.   

    谢谢楼上的答复。
    ”翻译“需要连接数据库,不是同一个连接,原来的连接没有关闭。其实就是对前一个连接查出的 resultset 集边遍历,边翻译。故原来的连接没有关闭。
      

  8.   

    你的方法写的有问题。
    Connection conn--全局变量
    public static Connection getConnection() throws SQLException {
      if(conn != null)
         retrun conn;
      else
      {
       conn= DriverManager.getConnection(url, user, password);
       return conn;
      }
     }
    这样试试。
      

  9.   

    谢谢各位的回帖。分子不多,平摊了。
    问题现在解决了。原来之前数据库安装后有点问题,1433端口没起来。我的连接串后来就去连了1434端口。
    开始看着好像没什么问题。能连接上去。没想惹出现在这个问题。刚才把1433端口起来,并连接1433端口,之后问题就不存在了为自己汗那另外,这样应当说明 DriverManager.getConnection 获得的是两个连接。求认定。