日期:2014-05-19  浏览次数:20670 次

求大神帮助java.lang.ClassCastException问题
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问题 ?
------最佳解决方案--------------------
错误很明显啊,别人返回的是 OracleResultSetImpl ,是一个游标,而不是一个List , 是不是课程哪里封装过的啊.
------其他解决方案--------------------
很清楚的告诉你new SqlHelper().executeQuery(sql, paras)返回的是oracle.jdbc.driver.OracleResultSetImpl类型,你却要将其强制转换成ArrayList,所以报错。
要知道原因,你得看SqlHelper的源码,一看就知道了。
------其他解决方案--------------------
今天看了一个动态代理的例子,和你这个很像。要么把全部代码拷起来?
------其他解决方案--------------------


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");
            
           &n