如何在Java中使用sql.Array获取列的值?

时间:2013-11-08 19:25:06

标签: java sql jdbc resultset sqlresultsetmapping

我编写了一个执行查询的代码,存储结果集。我使用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++;
        }

现在我想打印结果集index-by-index,这是我们在打印List时通常会做的事情:

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)方法不能用于对象类型Array,但是有没有其他方法可以将结果集存储在某个列表中并且只要我可以访问/读取它?

让我知道:)。

感谢。

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

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++;
        }

}

,例外是

  

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

4 个答案:

答案 0 :(得分:1)

ResultSet.getArray(int columnIndex):以ResultSet的形式检索此java.sql.Array个对象的当前行中指定列的值。

Array data = result.getArray(1);

要在Java编程语言中以SQL ARRAY的形式检索此Array对象指定的array值的内容,您需要调用data.getArray() 。例如,假设datajava.sql.Array String类型值:

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

现在,您可以使用index作为常规Java数组访问该数组。

请阅读:Using Array Objects

答案 1 :(得分:0)

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

答案 2 :(得分: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);
        }

}

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

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());
    }

}

希望有所帮助:)

答案 3 :(得分:0)

Yups,这将有助于使用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());
}

}