当前位置: 首页 > 知识库问答 >
问题:

尝试使用SQL语句和键创建返回ArrayList的方法

商开宇
2023-03-14
    public static <T extends CMObject> void populateCMObjectsByKey(int key, String SQL, ArrayList<T> list) throws SQLException, ObjectNotFoundException {

        Connection connection = null;
        PreparedStatement pstatement = null;
        ResultSet rs = null;

        try {
            connection = TomcatConnectionManager.getInstance().getConnection(ClientManagerConstants.dbName);
            pstatement = connection.prepareStatement(SQL);
            pstatement.setInt(1, key);
            rs = pstatement.executeQuery();
            while (rs.next()) {
                T.createFromResultSet(rs, list);
            }
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (pstatement != null) {
                pstatement.close();
            }
            //
            connection.close();
            TomcatConnectionManager.getInstance().freeConnection(ClientManagerConstants.dbName, connection);
        }
        return;
    }

编译器在“t.createFromResultSet(rs,list);”上指示错误,该错误为“type CMObject中的方法createFromResultSet(ResultSet,ArrayList)不适用于参数(ResultSet,ArrayList)”。我想要做的是不可能的吗?

共有1个答案

夏俊杰
2023-03-14

问题是,静态方法不能从泛型类型引用中获得--只能从任何上限获得非静态方法(这里是cmobject)。此外,不能重写静态方法。

出于这两个原因,使CreateFromResultSetCMObject及其子类中是非静态的是实现这一目的的唯一方法。但接下来需要一个实例来处理。

// Add an instance as another parameter.
public static <T extends CMObject> void populateCMObjectsByKey(
    int key, String SQL, ArrayList<T> list, T populator)
    throws SQLException, ObjectNotFoundException {

那么您就可以调用实例上的方法:

populator.createFromResultSet(rs, list);
 类似资料:
  • 问题内容: 我试图传递包含键和值的数组。 键是列,值是要选择的值。 我试图编写一个函数,可以传递数组并将键和值用作表的列和值。例如: 我需要这样创建sql语句: 问题答案: 您可以构建一个简单的SQL Select,如下所示:

  • 问题内容: 我正在尝试让Java使用JDBC创建数据库,但是尽管查询正确,但还是出现语法错误。例如,如果我将数据库的名称明确地写入代码中,则可以正常工作。这是我的代码: 我的主班 错误 非常感谢任何知道为什么此方法不起作用的人-我在网上搜索了无济于事。 问题答案: 您不能将数据库名称作为绑定变量-您必须将其嵌入查询文字中。将您的查询更改为此: 您也可以使用普通(而不是)来运行此SQL。

  • 我的java有点生锈,好久没用了 我想做的是让用户定义一个日期(3个整数包含年、月和日)并将其转换为日期对象。 我有一个方法如下,这就是我在谷歌搜索后得到的结果。 它被下面的人调用,现在刚刚被打印出来 问题是日期完全错误。我想要开始日期为2014-01-01,结束日期为2014-12-31,但打印出来的是 开始时间:8月7日星期六00:00:01 GMT 6 - 开始时间:8月7日星期六00:00

  • 问题内容: 我有一类这样的方法: 我如何在另一个类中调用此方法? 问题答案: 1. 如果要从中调用该方法的类位于同一包中,则创建该类的实例并调用该方法。 2. 使用 3. 最好有个赞等等。 例如:

  • 问题内容: 以Oracle论坛中显示的示例:使用plsql生成excel(xls),我想从查询的数据集中生成一个excel文件。 此处提供的示例有效。但是,我遇到了一些挑战: 我的SQL查询很长,超过了4000个字符的限制。 我想将参数传递给我的查询。 我想以一种非常简单的方式做到这一点,并且不使用Dynamic SQL(如果可能)。 我提出的内容如下: 包装定义: 现在,我的匿名阻止最好是如下所

  • 问题内容: 我有以下内容: 创建DB并使用他的前两个 方法工作正常。当运行到该行时,它将引发异常- 问题答案: 这应该在您的情况下有效: 原因:每次执行方法调用时,语句只能执行一个SQL语句。 如果要同时执行两个或多个语句,则可以使用Batch-Jobs来执行。 喜欢: