这是Java 8,Windows / Linux上的Oracle JVM,并使用最新的JDBC Java 8兼容驱动程序用于MS-SQL(如果它有任何区别)。
我想使用RowSet
方法将数据从CachedRowSet
(例如toCollection()
)转换/转换/移动到完整行的Collection
。这将允许我使用stream()
和lambda来处理我的Java程序中的行集。
单列toCollection("colname")
方法适用于我。
我想知道如何将JDBC行集转换为包含行集的所有列的集合。 我搜索了一些例子,但没有找到任何例子,任何关于此的指针都将非常感激。
答案 0 :(得分:2)
如上所述,您需要使用toCollection()
方法,但会返回com.sun.rowset.internal.Row
的集合,需要将其转换为使用流API。参见示例:
ResultSetMetaData md = rowset.getMetaData();
List<Map<String, Object>> res = new ArrayList<>();
Collection<Row> c = (Collection<Row>) rowset.toCollection();
for(Row row: c) {
Map<String, Object> m = new HashMap<String, Object>();
for (int i = 1; i <= md.getColumnCount(); i++) {
m.put(md.getColumnName(i), row.getColumnObject(i));
}
res.add(m);
}
res.stream().forEach(m -> System.out.println(m));
答案 1 :(得分:0)
这可能有助于其他人,我不知道。 事实证明我的代码实际上没问题。 我不得不更改IDE Eclipse设置,将Restricted访问消息从默认设置Error更改为Warning。这个更改允许我使用Java Collection of Row(内部Sun类,导入)并将JDBC行集转换为适合在Java 8流中使用的Java集合。我不知道是否支持这种做法,或者通过导入com.sun.rowset.internal来使用Sun内部Row类是一种很好的做法。*;但代码现在运行正常。
答案 2 :(得分:-1)
请查看以下代码段:
ResultSetMetaData rsmd = rs.getMetaData();
HashMap<String,Object> map;
while(rs.next()){
int numColumns = rsmd.getColumnCount();
map = new HashMap<String,Object>();
for (int i=1; i<=numColumns; i++) {
String colName = rsmd.getColumnName(i);
if(rsmd.getColumnType(i)==java.sql.Types.ARRAY){
map.put(colName, rs.getArray(colName));
}
else if(rsmd.getColumnType(i)==java.sql.Types.BIGINT){
map.put(colName, rs.getInt(colName));
}
else if(rsmd.getColumnType(i)==java.sql.Types.BOOLEAN){
map.put(colName, rs.getBoolean(colName));
}
else if(rsmd.getColumnType(i)==java.sql.Types.BLOB){
map.put(colName, rs.getBlob(colName));
}
else if(rsmd.getColumnType(i)==java.sql.Types.DOUBLE){
map.put(colName, rs.getDouble(colName));
}
else if(rsmd.getColumnType(i)==java.sql.Types.FLOAT){
map.put(colName, rs.getFloat(colName));
}
else if(rsmd.getColumnType(i)==java.sql.Types.INTEGER){
map.put(colName, rs.getInt(colName));
}
else if(rsmd.getColumnType(i)==java.sql.Types.NVARCHAR){
map.put(colName, rs.getNString(colName));
}
else if(rsmd.getColumnType(i)==java.sql.Types.VARCHAR){
map.put(colName, rs.getString(colName));
}
else if(rsmd.getColumnType(i)==java.sql.Types.TINYINT){
map.put(colName, rs.getInt(colName));
}
else if(rsmd.getColumnType(i)==java.sql.Types.SMALLINT){
map.put(colName, rs.getInt(colName));
}
else if(rsmd.getColumnType(i)==java.sql.Types.DATE){
map.put(colName, rs.getDate(colName));
}
else if(rsmd.getColumnType(i)==java.sql.Types.TIMESTAMP){
map.put(colName, rs.getTimestamp(colName));
}
else{
map.put(colName, rs.getObject(colName));
}
}
//do something with the map here..
}