JDBC连接oracle问题 问题如下:使用JDBC连接oracle时,使用SQL查询,是否能够获得查询结果多余一条记录的结果集?我是oracle菜鸟,以前一直使用MySQL,所以请各位达人不吝赐教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比如在使用sevlet时,可以使用如下语句: .. ResultSet rs = stmt.executeQuery("SELECT....") String temp=""; when(rs.next()) { temp=rs.getString(1);} .. 刚刚试过,只能返回最后一条记录以下是我的代码请各位给看看public class TestOracle{ String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@192.168.1.128:1521:foodqs"; OracleStatement stmt = null; OracleResultSet rs = null; OracleConnection conn = null; String sql = "select * from cheng"; public void test() throws ClassNotFoundException, SQLException { Class.forName(driver); conn = (OracleConnection)DriverManager.getConnection(strUrl, "system", "foodqs"); System.out.println(sql); stmt=(OracleStatement)conn.createStatement(); for(int j=0;j<10;j++){ rs=(OracleResultSet)stmt.executeQuery(sql);// // for(int i=0;i<10&&rs.next();i++)// { rs.next(); rs.getString(1); rs.getString(2); System.out.println("id:"+rs.getString(1)); System.out.println("name:"+rs.getString(2));// } } try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { } }} select 結果 from table group by 結果 having count(*) > 1; while (rs.next()){ rs.getString(1); rs.getString(2); System.out.println("id:"+rs.getString(1)); System.out.println("name:"+rs.getString(2)); } rs.next(); rs.getString(1); rs.getString(2); System.out.println("id:"+rs.getString(1)); System.out.println("name:"+rs.getString(2)); 这段改成: while (rs.next()) { System.out.println("id:"+rs.getString(1)); System.out.println("name:"+rs.getString(2)); } 你再试试 public void test() throws ClassNotFoundException, SQLException { Class.forName(driver); conn = (OracleConnection)DriverManager.getConnection(strUrl, "system", "foodqs"); System.out.println(sql); stmt=(OracleStatement)conn.createStatement(); { rs=(OracleResultSet)stmt.executeQuery(sql); while(rs.next()){ rs.getString(1); rs.getString(2); System.out.println("id:"+rs.getString(1)); System.out.println("name:"+rs.getString(2)); } } try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { } } 你的java代码错了.public void test() throws ClassNotFoundException, SQLException { Class.forName(driver); conn = (OracleConnection)DriverManager.getConnection(strUrl, "system", "foodqs"); System.out.println(sql); stmt=(OracleStatement)conn.createStatement(); for(int j=0;j <10;j++){ rs=(OracleResultSet)stmt.executeQuery(sql); rs.next(); rs.getString(1); rs.getString(2); System.out.println("id:"+rs.getString(1)); System.out.println("name:"+rs.getString(2)); } try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { } } }去掉注释的行,你的代码就是这个样子,注意:你每次循环都重新执行了一次查询,然后取第一行.所以你只能得到同一行数据.这帖可以转去java区了...PS:1.把rs=(OracleResultSet)stmt.executeQuery(sql); 移到循环外面 然后根据rs.next()循环就可以了.2.其实在这个层次上,跟mysql没有区别.等你用到的sql复杂了,才涉及不同数据库的区别.3.还有,不需要用oracle driver中给的OracleStatement,OracleResultSet, 直接用jdbc的就可以了,不需要管oracle 是怎么实现jdbc规范的. public void test() throws ClassNotFoundException, SQLException { Class.forName(driver); conn = (OracleConnection)DriverManager.getConnection(strUrl, "system", "foodqs"); System.out.println(sql); stmt=(OracleStatement)conn.createStatement(); rs=(OracleResultSet)stmt.executeQuery(sql); for(int i=0;i<10;i++){ rs.next(); rs.getString(1); rs.getString(2); System.out.println("id:"+rs.getString(1)); System.out.println("name:"+rs.getString(2)); } try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { } }报错:elect * from chengid:9name:agagagagjava.sql.SQLException: 用尽的 Resultset at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269) at oracle.jdbc.driver.OracleStatement.prepare_for_new_get(OracleStatement.java:3195) at oracle.jdbc.driver.OracleStatement.getStringValue(OracleStatement.java:3444) at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:434) at db.TestOracle.test(TestOracle.java:43) at db.TestOracle.main(TestOracle.java:186) 无敌了你,把强转都去掉,请按rs.next()来循环.查清楚你数据库中的记录是多少条,不要用for(int i=0;i <10;i++),当游标指到最后一行的时候,再用rs.next()就会报错的 conn = DriverManager.getConnection(strUrl, "system", "foodqs"); System.out.println(sql); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); for(rs.next();){ System.out.println("id:"+rs.getString(1)); System.out.println("name:"+rs.getString(2)); } for(rs.next())这里要改一下:用while(rs.next()),汗... 如何查询某段代码在数据库哪些地方出现过? vs2010不能连接oracle 11g 求高手指点如何实现急急急! OCCI里Cursor返回空结果的处理方法? 大家给我解释下这段sql吧,看不了多懂 请问自定义函数和存储过程的区别? 简单的操作 改init.ora设置后直接重启服务器它会起作用吗? 修改oracle中的package名后 请问如何得知某个表是否被锁定? oralce 中获得年月?? LOOP循环的问题
..
ResultSet rs = stmt.executeQuery("SELECT....")
String temp="";
when(rs.next())
{
temp=rs.getString(1);
}
..
以下是我的代码
请各位给看看
public class TestOracle
{
String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@192.168.1.128:1521:foodqs"; OracleStatement stmt = null; OracleResultSet rs = null;
OracleConnection conn = null;
String sql = "select * from cheng";
public void test() throws ClassNotFoundException, SQLException
{
Class.forName(driver); conn = (OracleConnection)DriverManager.getConnection(strUrl, "system", "foodqs");
System.out.println(sql);
stmt=(OracleStatement)conn.createStatement();
for(int j=0;j<10;j++){
rs=(OracleResultSet)stmt.executeQuery(sql);
//
// for(int i=0;i<10&&rs.next();i++)
// {
rs.next();
rs.getString(1);
rs.getString(2);
System.out.println("id:"+rs.getString(1));
System.out.println("name:"+rs.getString(2));// }
}
try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { }
}
}
{
rs.getString(1);
rs.getString(2);
System.out.println("id:"+rs.getString(1));
System.out.println("name:"+rs.getString(2));
}
rs.next();
rs.getString(1);
rs.getString(2);
System.out.println("id:"+rs.getString(1));
System.out.println("name:"+rs.getString(2));
这段改成:
while (rs.next())
{
System.out.println("id:"+rs.getString(1));
System.out.println("name:"+rs.getString(2));
}
你再试试
{
Class.forName(driver); conn = (OracleConnection)DriverManager.getConnection(strUrl, "system", "foodqs");
System.out.println(sql);
stmt=(OracleStatement)conn.createStatement();
{
rs=(OracleResultSet)stmt.executeQuery(sql);
while(rs.next()){
rs.getString(1);
rs.getString(2);
System.out.println("id:"+rs.getString(1));
System.out.println("name:"+rs.getString(2)); }
}
try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { }
}
{
Class.forName(driver); conn = (OracleConnection)DriverManager.getConnection(strUrl, "system", "foodqs");
System.out.println(sql);
stmt=(OracleStatement)conn.createStatement();
for(int j=0;j <10;j++){
rs=(OracleResultSet)stmt.executeQuery(sql);
rs.next();
rs.getString(1);
rs.getString(2);
System.out.println("id:"+rs.getString(1));
System.out.println("name:"+rs.getString(2)); }
try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { }
}
}去掉注释的行,你的代码就是这个样子,
注意:你每次循环都重新执行了一次查询,然后取第一行.
所以你只能得到同一行数据.这帖可以转去java区了...
PS:
1.把rs=(OracleResultSet)stmt.executeQuery(sql); 移到循环外面
然后根据rs.next()循环就可以了.
2.其实在这个层次上,跟mysql没有区别.等你用到的sql复杂了,才涉及不同数据库的区别.
3.还有,不需要用oracle driver中给的OracleStatement,OracleResultSet,
直接用jdbc的就可以了,不需要管oracle 是怎么实现jdbc规范的.
{
Class.forName(driver); conn = (OracleConnection)DriverManager.getConnection(strUrl, "system", "foodqs");
System.out.println(sql);
stmt=(OracleStatement)conn.createStatement();
rs=(OracleResultSet)stmt.executeQuery(sql);
for(int i=0;i<10;i++){
rs.next();
rs.getString(1);
rs.getString(2);
System.out.println("id:"+rs.getString(1));
System.out.println("name:"+rs.getString(2));
}
try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { }
}报错:
elect * from cheng
id:9
name:agagagag
java.sql.SQLException: 用尽的 Resultset
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleStatement.prepare_for_new_get(OracleStatement.java:3195)
at oracle.jdbc.driver.OracleStatement.getStringValue(OracleStatement.java:3444)
at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:434)
at db.TestOracle.test(TestOracle.java:43)
at db.TestOracle.main(TestOracle.java:186)
查清楚你数据库中的记录是多少条,
不要用for(int i=0;i <10;i++),
当游标指到最后一行的时候,再用rs.next()就会报错的 conn = DriverManager.getConnection(strUrl, "system", "foodqs");
System.out.println(sql);
stmt = conn.createStatement();
rs = stmt.executeQuery(sql); for(rs.next();){
System.out.println("id:"+rs.getString(1));
System.out.println("name:"+rs.getString(2));
}
用while(rs.next()),汗...