问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JDBC 用service连接Oracle数据库后,查询没有结果。不知道Oracle的Service连接有何注意事项

发布网友 发布时间:2022-04-07 15:24

我来回答

2个回答

懂视网 时间:2022-04-07 19:46

import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 7 public class OraclDao { 8 9 private Connection conn = null; 10 11 public void initConnection(String url, String uid, String pwd) {// 初始化 12 String className = "oracle.jdbc.driver.OracleDriver"; 13 try { 14 Class.forName(className); 15 conn = DriverManager.getConnection(url, uid, pwd); 16 } catch (ClassNotFoundException e) { 17 e.printStackTrace(); 18 } catch (SQLException e) { 19 e.printStackTrace(); 20 } 21 } 22 23 public void closeConnection() { 24 if (conn != null) { 25 try { 26 conn.close(); 27 conn = null; 28 } catch (SQLException e) { 29 e.printStackTrace(); 30 } 31 } 32 } 33 34 public ResultSet executeSQL(String sql) throws SQLException { 35 Statement stmtt = null; 36 ResultSet rs = null; 37 try { 38 stmtt = conn.createStatement(); 39 rs = stmtt.executeQuery(sql); 40 /* 41 * while (rs.next()) { System.out.println("sdfsdf");// TODO } 42 */ 43 return rs; 44 } catch (SQLException e) { 45 e.printStackTrace(); 46 } finally { 47 if (rs != null) { 48 try { 49 rs.close(); 50 rs = null; 51 } catch (SQLException e) { 52 e.printStackTrace(); 53 } 54 } 55 if (stmtt != null) { 56 try { 57 stmtt.close(); 58 stmtt = null; 59 } catch (SQLException e) { 60 e.printStackTrace(); 61 } 62 } 63 // closeConnection(); 64 } 65 } 66 67 public static void main(String[] args) { 68 String url = "jdbc:oracle:thin:@localhost:" + 1521 + ":orcl"; 69 OraclDao oraclDao = new OraclDao(); 70 oraclDao.initConnection(url, "SCOTT", "tiger"); 71 72 try { 73 ResultSet rs = oraclDao.executeSQL("select * from scott.userinfo"); 74 75 while (rs.next()) { 76 System.out.println("sdfsdf");// TODO 77 } 78 } catch (SQLException e) { 79 e.printStackTrace(); 80 } 81 oraclDao.closeConnection(); 82 } 83 }

如上程序,执行main函数,在executeSQL方法里面ResultSet是有值的,但是当返回到外层(main),发现rs是null。经仔细分析,这一奇怪的现象产生的原因是ResultSet是和连接相关的。(即如果关闭了statement、connection或resultset,则resultset就也没有值了) 

当生成 ResultSet 对象的 Statement 对象关闭、重新执行或用来从多个结果的序列获取下一个结果时,ResultSet 对象将自动关闭。 

本例中,执行executeSQL方法时应该是先执行finally里的,再执行return rs;finally里关闭了resultset和statement,所以返回的resultset的值成为了null。

解决的方法:

1、将查询得到的resultSet中的值保存在arrayList等中,executeSQL方法的返回值类型不要写成ResultSet类型的。

2、finally中的关闭操作往后放,即不写在executeSQL方法里,而是在外层处理过resultset后再关闭。

 

其他:resultset算是比较特殊的了。如果一个函数返回值是int型,程序中假设返回变量a,a的值是5.在finally块中又将a的值置为-1;则上层接收到的返回值仍然是5.虽然先执行finally块,后执行return语句,也不会改变return的值。此时返回的是5,但a的真实值应该是变为-1了。注意这个和resultSet的区别。

jdbc操作数据库返回结果集的注意事项

标签:

热心网友 时间:2022-04-07 16:54

import java.sql.*;
public class TestJDBC {
public static void main(String[] args){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
//注册数据库
Class.forName("oracle.jdbc.driver.OracleDriver");//第一种方法
//new oracle.jdbc.driver.OracleDriver();//第二种方法
//连接数据库
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:" +
"1521:ORCL" ,"scott","tiger");
//执行SQL语句
stmt=conn.createStatement();
rs=stmt.executeQuery("select *from TEST");//rs为结果集,查询结果,是一个游标
//遍历
while(rs.next()){
System.out.print(rs.getString(1)+",");
System.out.print(rs.getString(2)+",");
System.out.print(rs.getString(3));
System.out.println();
//rs.getString(1)与rs.getString("ceshi1")等效
System.out.print(rs.getString("ceshi1")+",");
System.out.print(rs.getString("ceshi2")+",");
System.out.print(rs.getString("ceshi3"));
System.out.println();
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}finally{
//关闭数据库,后面的先关
try{
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
if(conn!=null){
conn.close();
conn=null;
}
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
这个是jdbc的一个测试,是oracle的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
草莓做成冻干食品的意义是什么? 冻干草莓是凉性还是热性 冻干草莓粒营养成分 冻干草莓有营养吗 冻干草莓是否有营养 义乌小商品城有哪些适合孩子玩的玩具呢? 西游记在东山哪个地方取景,曾东山旅游推荐路线 云南有哪些二本大学排名 ipad无限重启怎么办? 数控等离子切割机SL-1325SD等离子切割机的保养 勾践灭吴之战,双方参战兵力为多少 qq被冻结银行卡怎么解绑 墨绿与藏青各适合什么肤色 电脑应该怎么修? 藏青色显黑吗 皮肤黑穿藏青色好看吗 藏青色适合皮肤黑的吗 农行个人小额贷款条件有哪些 电脑怎么修? 藏青色衣服,适合暗黄皮肤吗?网上答案都不一样。。。到底是适不适合呢? 空调待机一天耗多少电 皮肤有点偏黄偏黑的人适合穿藏青色吗?- 问一问 空调一天要多少度电 酒店一间房一天用多少电 皮肤偏黄,适合枣红色,红色,藏青色这三个哪个色? 皮肤黄穿藏青色好看 空调一天用多少度电 皮肤黄穿藏青色好看嘛? 宾馆房间空调制热24小时多少电 藏青色适合什么肤色得人 藏青色适合什么肤色 宾馆安的空调一晚能用多少度电 藏青色帽子适合哪种肤色 农行在手机里可以贷款吗 怎么维修电脑? 皮肤偏黄适合藏青色还是粉红色 农业银行个人小额贷款申请条件有哪些? 皮肤有点偏黄偏黑的人适合穿藏青色吗? 我电脑要怎么修好? 求解答月末平均值怎么算? 每天几个数相加求一个月平均值 我的电脑坏了怎么修呢? excel中数据量特别大,问怎么求每个月的平均值啊?急急急!谢谢 如何用EXCEL算列平均值:假如有列A1-A7,7个月数值,我要通过这7个数值算12个月的平均值,怎么算? 别人用我的qq号绑定了银行卡,我不知道支付密码,怎么样才可以,解除绑定呢? 怎样在excel 中求12个月数据的平均数! 我的QQ刚绑定银行卡就被冻结 需要怎么解决 财务周转率中用到的月平均值该怎么算 如果想解除银行卡和qq绑定,但是银行卡和手机号码都没了该怎么解除绑定 月平均数的算法 读《培养孩子记忆力的50种方法》有感 如何计算“本年度计提折旧的各项固定资产月平均值”?