0

我目前正在构建一个直接从数据库中提取数据的工具,因为 SPSS Modeler 太慢并且首先将其存储在 Java ResultSet 中。

但我尝试将数据导出到 CSV(或类似)文件中,并尝试保留尽可能多的列类型。目前我正在使用opencsv,但它将小数和许多其他数字转换为字符串。当我将文件加载回 SPSS Modeler 时,我只得到整数和字符串。

是否有任何 CSV 库(可能具有特殊编码)或其他文件类型可用于导出数据及其列类型(如 IBM InfoSphere Data Architect 可以做的),因此我可以将其直接加载回 SPSS Modeler 而无需将其更改回来手动在那里?

谢谢!

4

1 回答 1

0

从数据库信息模式中检索元数据

如果数据当前存储在数据库中,您可以从信息架构中检索列类型。您需要做的就是在查询表后检索此信息并将其存储,以便以后可以重用。

// connect to DB as usual
Statement stmt = conn.createStatement();
// create your query
// Note that you can use a dummy query here. 
//You only need to access the metadata schema of the table, regardless of the actual query.
ResultSet rse = stmt.executeQuery("Select A,B FROM table WHERE ..");
// get the ResultSetMetadata
ResultSetMetaData rsmd = rse.getMetaData();

// Get database specific type
rsmd.getColumnTypeName(1); // database specific type name for column 1 (e.g. VARCHAR)
rsmd.getColumnTypeName(2); // database specific type name for column 2 (e.g. DateTime)
....

// Get generic JDBC type http://docs.oracle.com/javase/7/docs/api/java/sql/Types.html
rsmd.getColumnType(1) // generic type for col 1 (e.g. 12)
rsmd.getColumnType(2) // generic type for col 2

加工

您可以将此信息存储在CSV 模式中,并在转换过程中进行处理。我建议您使用SuperCSV,可在此处获得。这个库提供了所谓的单元处理器,它允许您定义列的类型。

描述:

单元处理器是使用 Super CSV 进行读写的一个组成部分——它们自动进行数据类型转换,并强制执行约束。它们实现了责任链设计模式——每个处理器都有一个明确定义的目的,并且可以与其他处理器链接在一起,以完全自动化单个 CSV 列所需的所有转换和约束验证。

于 2015-09-30T14:22:06.827 回答