[Microsoft][SQLServer JDBC Driver]System Exception: Connection reset.

ll_rj 2011-02-11 10:57:30
程序之前在公司电脑上跑的好好的,后来搬到自己的电脑,就老报
[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;
}
...全文
238 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ll_rj 2011-02-12
  • 打赏
  • 举报
回复
谢谢各位的回帖。分子不多,平摊了。
问题现在解决了。原来之前数据库安装后有点问题,1433端口没起来。我的连接串后来就去连了1434端口。
开始看着好像没什么问题。能连接上去。没想惹出现在这个问题。刚才把1433端口起来,并连接1433端口,之后问题就不存在了。。。为自己汗那。。。

另外,这样应当说明 DriverManager.getConnection 获得的是两个连接。求认定。
快溜 2011-02-12
  • 打赏
  • 举报
回复
你的方法写的有问题。
Connection conn--全局变量
public static Connection getConnection() throws SQLException {
if(conn != null)
retrun conn;
else
{
conn= DriverManager.getConnection(url, user, password);
return conn;
}
}
这样试试。
ll_rj 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ssp2009 的回复:]

你如何知道是两个不同连接对象?同一个方法,同一个连接字符串。
[/Quote]

不确定啊。只是希望可以这么弄啊 。。。。
又或者是不是不同的连接跟数据库有关啊 。。。。
ll_rj 2011-02-11
  • 打赏
  • 举报
回复
谢谢楼上的答复。
”翻译“需要连接数据库,不是同一个连接,原来的连接没有关闭。

其实就是对前一个连接查出的 resultset 集边遍历,边翻译。故原来的连接没有关闭。
快溜 2011-02-11
  • 打赏
  • 举报
回复
你如何知道是两个不同连接对象?同一个方法,同一个连接字符串。
-晴天 2011-02-11
  • 打赏
  • 举报
回复
你的"翻译",是否也需要连接数据库?和原先是不是同一个连接对象,在进行"翻译"前,原来的连接对象是否已经关闭?如果不是同一个连接对象,或者连接对象关闭了,那还是需要重新连接的.
你从数据库得到过数据,并不意味着永远可以得到数据.
ll_rj 2011-02-11
  • 打赏
  • 举报
回复
public static Connection getConnection() throws SQLException {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
按这段代码,我理解上面代码中两次的conn应该是两个不同的连接对象。

自己的疑惑是:
不明确 DriverManager.getConnection 获得的第一个Connection对象 conn 没有关闭的情况下
是否可以 DriverManager.getConnection 获得另一个Connection对象 conn2 ?

盼请继续执教。
ll_rj 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qianjin036a 的回复:]

连接字符串是否正确?
在另一台机器上运行时,服务器名/用户名/密码等都可能不同,特别是服务器名,你在程序的连接字符串中是否更改为本机的服务器名呢?
[/Quote]

数据库连接是OK的。因为如果没有代码中”翻译“的过程话,可以显示数据。

[Quote=引用 6 楼 ssp2009 的回复:]
逻辑混乱,第一个conn没有关闭,再次连接第二个conn,仔细分析下程序。
[/Quote]
代码确实是如你所述的逻辑,但我不知道这样是不是确定不允许的?
因为也是这样的代码在公司机器上没有问题。


快溜 2011-02-11
  • 打赏
  • 举报
回复
逻辑混乱,第一个conn没有关闭,再次连接第二个conn,仔细分析下程序。
-晴天 2011-02-11
  • 打赏
  • 举报
回复
连接字符串是否正确?
在另一台机器上运行时,服务器名/用户名/密码等都可能不同,特别是服务器名,你在程序的连接字符串中是否更改为本机的服务器名呢?
ll_rj 2011-02-11
  • 打赏
  • 举报
回复
具体来说其实是这样的:

实际代码中我有很多代码都是如下的:(简单写下啊,希望能表达清楚)

CountryDao.queryCountry()方法中:
....
conn = JdbcUtil.getConnection();
....
String countryName = rs.getString(1);
....
//然后代码又要调用另一个DAO,希望把英文的 countryName 转成中文的.
String countryNameCh = CodeDao.getCodeValue(countryName);
....

而CodeDao.getCodeValue(String key)方法中:
自然又有
....
conn = JdbcUtil.getConnection(); //这里再次获取连接就报异常了。
....

SQL77 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ll_rj 的回复:]
引用 1 楼 sql77 的回复:

//异常爆发点!!!!!!!!!!!!!!!!!!!!!
Connection conn2 = JdbcUtils.getConnection();
conn2.close();


没打开就关闭了???


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

conn = JdbcUtils.getConnection();

//异常爆发点!!!!!!!!!!!!!!!!!!!!!
Connection conn2 = JdbcUtils.getConnection();
conn2.close();

为什么不用CONN呢,就算你CONN2其实和CONN是一样的吧
ll_rj 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sql77 的回复:]

//异常爆发点!!!!!!!!!!!!!!!!!!!!!
Connection conn2 = JdbcUtils.getConnection();
conn2.close();


没打开就关闭了???
[/Quote]

主要头一句 Connection conn2 = JdbcUtils.getConnection(); 这句已经抛出了异常....:(
SQL77 2011-02-11
  • 打赏
  • 举报
回复
//异常爆发点!!!!!!!!!!!!!!!!!!!!!
Connection conn2 = JdbcUtils.getConnection();
conn2.close();


没打开就关闭了???

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧