求大神帮助java.lang.ClassCastException问题

zqxz7hao 2012-11-26 05:20:02
ArrayList al= (ArrayList) new SqlHelper().executeQuery(sql, paras);

这句出错
报错是:
java.lang.ClassCastException: oracle.jdbc.driver.OracleResultSetImpl cannot be cast to java.util.ArrayList


我是看一个视频课程 视频课程里面
ArrayList al= (ArrayList) new SqlHelper().executeQuery(sql, paras);
他这样写不会错误

但是为什么我会报错??是驱动问题 是JDK问题 ?
...全文
257 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqxz7hao 2012-11-26
  • 打赏
  • 举报
回复
最后发现 executeQuery 的确是与2楼大哥说的是被重新封装了 但是中间课程我没看到 感谢各位大大解答 特别感谢2楼大哥 public static ResultSet executeQuery(String sql,String[] parameters) { try { ct=getConnection(); ps=ct.prepareStatement(sql); if(parameters!=null) { for(int i=0;i<parameters.length;i++) { ps.setString(i+1,parameters[i]); } } rs = ps.executeQuery(); } catch(Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } finally { } return rs; } 重新封装后 public ArrayList executeQuery(String sql,String []paras) { ArrayList al=new ArrayList(); try { ct=getConnection();; ps=ct.prepareStatement(sql); //给sql问号赋值 for (int i = 0; i < paras.length; i++) { ps.setString(i+1, paras[i]); } rs=ps.executeQuery(); //非常有用的 ResultSetMetaData rsmd=rs.getMetaData(); //用法rs可以的到有多少列 int columnNum=rsmd.getColumnCount(); //循环从a1中取出数据封装到ArrayList中 while(rs.next()) { Object []objects=new Object[columnNum]; for(int i=0;i<objects.length;i++) { objects[i]=rs.getObject(i+1); //返回对象数组 } al.add(objects); } return al; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); }finally { }
zqxz7hao 2012-11-26
  • 打赏
  • 举报
回复
引用 2 楼 sbaiitx 的回复:
错误很明显啊,别人返回的是 OracleResultSetImpl ,是一个游标,而不是一个List , 是不是课程哪里封装过的啊.
谢谢你的提醒 还真有可能是
zqxz7hao 2012-11-26
  • 打赏
  • 举报
回复
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import java.sql.*; public class SqlHelper { //定义变量 private static Connection ct = null; //大多数情况下用preparedstatement替代statement private static PreparedStatement ps = null; private static ResultSet rs = null; //连接数据库的参数 private static String url = ""; private static String username = ""; private static String driver = ""; private static String password = ""; private static CallableStatement cs = null; public static CallableStatement getCs() { return cs; } private static Properties pp = null; private static InputStream fis = null; //加载驱动,只需要一次,用静态代码块 static { try { //从dbinfo.properties pp = new Properties(); fis=SqlHelper.class.getClassLoader().getResourceAsStream("dbinfo.properties"); //fis = new FileInputStream(); pp.load(fis); url = pp.getProperty("url"); username = pp.getProperty("username"); driver = pp.getProperty("driver"); password = pp.getProperty("password"); Class.forName(driver); } catch (Exception e) { e.printStackTrace(); } finally { try { fis.close();} catch(IOException e) {e.printStackTrace();} fis = null;//垃圾回收站上收拾 } } //得到连接 public static Connection getConnection() { try {ct = DriverManager.getConnection(url,username,password);} catch(Exception e) {e.printStackTrace();} return ct; } //*************callPro1存储过程函数1************* public static CallableStatement callPro1(String sql,String[] parameters) { try{ ct = getConnection(); cs = ct.prepareCall(sql); if(parameters!=null){ for(int i=0;i<parameters.length;i++){ cs.setObject(i+1,parameters[i]); } } cs.execute(); } catch(Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage());} finally { close(rs,cs,ct);} return cs; } //*******************callpro2存储过程2************************ public static CallableStatement callPro2(String sql,String[] inparameters, Integer[] outparameters) { try { ct = getConnection(); cs = ct.prepareCall(sql); if(inparameters!=null) { for(int i=0;i<inparameters.length;i++) { cs.setObject(i+1,inparameters[i]); } } //cs.registerOutparameter(2,oracle.jdbc.OracleTypes.CURSOR); if(outparameters!=null) { for(int i=0;i<outparameters.length;i++) { cs.registerOutParameter(inparameters.length+1+i,outparameters[i]); } } cs.execute(); } catch(Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } finally { } return cs; } public static ResultSet executeQuery(String sql,String[] parameters) { try { ct=getConnection(); ps=ct.prepareStatement(sql); if(parameters!=null) { for(int i=0;i<parameters.length;i++) { ps.setString(i+1,parameters[i]); } } rs = ps.executeQuery(); } catch(Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } finally { } return rs; } public static Connection getCt() { return ct; } public static PreparedStatement getPs() { return ps; } public static ResultSet getRs() { return rs; } public static void executeUpdate2(String[] sql,String[][] parameters) { try { ct = getConnection(); ct.setAutoCommit(false); for(int i=0;i<sql.length;i++) { if(null!=parameters[i]) { ps = ct.prepareStatement(sql[i]); for(int j=0;j<parameters[i].length;j++) { ps.setString(j+1,parameters[i][j]); } ps.executeUpdate(); } } ct.commit(); }catch (Exception e) { e.printStackTrace(); try { ct.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } throw new RuntimeException(e.getMessage()); }finally { close(rs,ps,ct); } } //先写一个update、delete、insert //sql格式:update 表名 set 字段名 =?where 字段=? //parameter神应该是(”abc“,23) public static void executeUpdate(String sql,String[] parameters) { try { ct=getConnection(); ps = ct.prepareStatement(sql); if(parameters!=null) { for(int i=0;i<parameters.length;i++) { ps.setString(i+1,parameters[i]); } } ps.executeUpdate(); } catch(Exception e) { e.printStackTrace();//开发阶段 //抛出异常 //可以处理,也可以不处理 throw new RuntimeException(e.getMessage()); } finally { close(rs,ps,ct); } } public static void close(ResultSet rs,Statement ps,Connection ct) { //关闭资源(先开后关) if(rs!=null) { try { rs.close(); } catch(SQLException e) { e.printStackTrace(); } rs=null; } if(ps!=null) { try { ps.close(); } catch(SQLException e) { e.printStackTrace(); } ps=null; } if(null!=ct) { try { ct.close(); } catch(SQLException e) { e.printStackTrace(); } ct=null; } } }
usfizal88 2012-11-26
  • 打赏
  • 举报
回复
今天看了一个动态代理的例子,和你这个很像。要么把全部代码拷起来?
sbaiitx 2012-11-26
  • 打赏
  • 举报
回复
错误很明显啊,别人返回的是 OracleResultSetImpl ,是一个游标,而不是一个List , 是不是课程哪里封装过的啊.
zxhcloth 2012-11-26
  • 打赏
  • 举报
回复
很清楚的告诉你new SqlHelper().executeQuery(sql, paras)返回的是oracle.jdbc.driver.OracleResultSetImpl类型,你却要将其强制转换成ArrayList,所以报错。 要知道原因,你得看SqlHelper的源码,一看就知道了。

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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