0

我写了一个执行查询的代码,存储结果集。我使用 getArray(columnLabel) 方法将结果集按列存储在不同的数组中。

代码在这里:

Array imported_by = null;
Array imported_by_ad = null;
Array active_directory_identity_value = null;
while (rs.next()) {
        imported_by = rs.getArray(column_id);
        imported_by_ad = rs.getArray(column_id + 1);
        active_directory_identity_value = rs.getArray(column_id + 2);
        row_count++;
        }

现在我想按索引打印结果集,这是我们在打印列表时通常所做的:

for(int i=0;i<=row_count;i++){
          System.out.println(imported_by.get(i) + " " + imported_by_ad.get(i) + " " 
                             + active_directory_identity_value.get(i));

get(i) 方法不能用于对象类型数组,但是是否有任何其他方法可以将结果集存储在某个列表中并尽可能多地访问/读取它?

让我知道 :)

谢谢。

更新:我也输入转换变量,但不幸的是它现在抛出异常:更新的代码是:

try {
        int row_count = 0;
        ArrayList<String> imported_by = null;
        ArrayList<String> imported_by_ad = null;
        ArrayList<String> active_directory_identity_value = null;
        while (rs.next()) {
            imported_by = (ArrayList<String>) rs.getArray(column_id);
            imported_by_ad = (ArrayList<String>) rs.getArray(column_id + 1);
            active_directory_identity_value = (ArrayList<String>) rs.getArray(column_id + 2);
            row_count++;
        }

}

例外是

sun.jdbc.odbc.JdbcOdbcResultSet.getArray(JdbcOdbcResultSet.java:4395) 的线程“主”java.lang.UnsupportedOperationException 中的异常

4

4 回答 4

1

ResultSet.getArray(int columnIndex): 检索此ResultSet对象当前行中指定列的值作为java.sql.Array.

Array data = result.getArray(1);

要以 Java 编程语言的形式检索此对象SQL ARRAY指定的值的内容,您需要调用. 例如,假设这是一个类型值:Arrayarraydata.getArray()datajava.sql.ArrayString

String strData[] = (String[]) data.getArray();

现在您可以使用index.

请阅读:使用数组对象

于 2013-11-08T19:46:20.310 回答
0

您应该查看Rowset API。它允许您将 ResultSets 保留为脱机副本,甚至可以通过它们将修改返回到数据库中。

于 2013-11-08T19:27:33.993 回答
0

我已经能够使用 Lucene Document(org.apache.lucene.document.Document) 存储结果集,将字段存储到文档中。

这可能不是完美的解决方案,但它确实可以完美运行 :) 示例代码如下:

ResultSet rs = st.executeQuery(query);
        rs = st.executeQuery(query);
        StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
        Directory index = new RAMDirectory();
        IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_CURRENT, analyzer);
        org.apache.lucene.document.Document doc = new org.apache.lucene.document.Document();
        try {
            while (rs.next()) {
                String imported_by = rs.getString(1);
                Field field = new Field("imported_by", imported_by , Field.Store.YES,          Field.Index.NOT_ANALYZED);
                doc.add(field);
                IndexWriter writer = new IndexWriter(index, config);
                writer.addDocument(doc);
                writer.close();
            }
            printDocument(doc);
        } catch (IOException ex) {
            Logger.getLogger(CIMTPFS_Roche.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(CIMTPFS_Roche.class.getName()).log(Level.SEVERE, null, ex);
        }

}

这只会将结果集写入文档并对其进行索引,稍后我们可以使用以下函数从文档中获取字符串值:)

public void printDocument(org.apache.lucene.document.Document doc) {
    List<IndexableField> fields = doc.getFields();
    for (int i = 0; i < fields.size(); i++) {
        System.out.println(fields.get(i).stringValue());
    }

}

希望能帮助到你 :)

于 2013-11-09T10:43:25.770 回答
0

是的,这将有助于使用 Lucene Doc 并对其进行索引:

public void printDocument(org.apache.lucene.document.Document doc) {
List<IndexableField> fields = doc.getFields();
for (int i = 0; i < fields.size(); i++) {
    System.out.println(fields.get(i).stringValue());
}

}

于 2013-11-12T08:20:35.027 回答