JDBC 中ResultSet调用close顺序的问题
哪位可以帮我讲讲有什么讲究
我发现如果顺序不对就会有问题(异常)
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e)
{
System.out.println("无sun.jdbc.odbc.JdbcOdbcDriver驱动");
System.exit(0);
}
try
{
connection = DriverManager.getConnection("jdbc:odbc:test","","");
statement = connection.createStatement();
results=statement.executeQuery("select * from test");
}
catch(SQLException e)
{
System.out.println("数据库连接异常");
}
try
{
int row=0;
while(results.next())
{
row++;
}
row++;
// results.last();
// row=results.getRow();
System.out.println(""+row);
results.close();
statement.executeUpdate("insert into test values("+row+",'建',55,false);");
statement.close();
connection.close();
}
catch(SQLException e)
{
System.out.println("还有读取问题");
}
如果上面的results.close放在statement.executeUpdate("insert into test values("+row+",'建',55,false);");就一定会有异常 为什么?
另外我想得到记录数 使用last 以后再用getRow 为什么last会出现异常
问题点数:30、回复次数:8Top
1 楼kingofvc(提薪像做贼 )回复于 2003-11-02 14:23:57 得分 0
有人在吗?Top
2 楼holyelle(炉子)回复于 2003-11-02 16:07:06 得分 0
try
{
int row=0;
while(results.next())
{
row++;
}
row++;
// results.last();//result已经定位到最后一个了
// row=results.getRow();
将前面的while循环去掉,应该可以通过
results.last();
row=results.getRow();
Top
3 楼mortal(马甲)回复于 2003-11-02 16:07:53 得分 10
还没用完,你怎么可以close掉呢,而且,应该只要关一个就够了,你试一下。对于last()方法,并不是所有的都可以用,还要看JDBC驱动,你走的是jdbc-odbc桥,很可能也不支持,我统一是用select count(*) from table,这样就不用定制了。Top
4 楼holyelle(炉子)回复于 2003-11-02 16:10:27 得分 0
你的异常捕捉比较混乱,看看jdbc方面的书吧Top
5 楼kingofvc(提薪像做贼 )回复于 2003-11-03 17:44:22 得分 0
现在都胡涂了
发现如果results是statement 进行查询以后的产生的 那么除非在statement进行其他操作前close否则永远都不能close了 一旦进行close就会出错
到底是否需要进行close?
ResultSet Statement 还有ConnectionTop
6 楼mortal(马甲)回复于 2003-11-04 09:30:35 得分 10
直接close你的Connection就好了。其它的为什么要关闭呢?Top
7 楼alienbat(亡灵法师)回复于 2003-11-04 10:21:22 得分 10
1。关闭关系: Connection->Statement->ResultSet。排在前面的被关闭,则后面的自动被关闭。
2。last()等方法必须声明Statement对象生成的ResultSet类型为SCROLL才可以使用。
(简写->)Statement st=Connection con.creatStatement(ResultSet.TYPE_SCROLL_...Top
8 楼jeah(阿杰哥)回复于 2003-11-04 12:03:10 得分 0
关闭的顺序是:先rs.close()再stmt.close()最后conn.close(),如果先close后面的,前面的将会驻留内存里,没法回收,这样是不安全的。Top
相关问题
- hookproc被调用的顺序问题:后挂的先被调用?
- 过程的调用顺序和其定义的顺序要一致?
- 同名dll的调用顺序?mfc42.dll与语言有关吗?
- f(),g()交换调用次序后,destructor的调用总是一样的顺序,why?
- 按顺序调用几个存储过程时,数据库时按照顺序来执行的吗?
- 用户控件和调用该控件的页面的执行顺序问题
- 求教JSP页面中调用了JavaBean出现了显示顺序问题!
- 用JDBC-ODBC访问ACCESS,能不能用ResultSet的deleteRow()方法?我怎么用的不行?另外,我在使用CachedRowSet类时,当调用acceptChange()方法时
- jsp中用jdbc调用oracle数据库
- 过程可以在JDBC 中调用吗?




