我有一个巨大的CSV文件(500K行x 212列),我想将其导入Java桌面应用程序中的SQLite数据库。如果列包含整数,实数或文本,我不知道提前知道。所以我把所有类型的TEXT都安全起来。虽然它生成了500MB的db文件,但这样可以正常工作。接下来,我按如下方式在JTable中显示数据:
DefaultTableModel model = new DefaultTableModel();
Object[] row = new Object[numCols];
ResultSet rs = stmt.executeQuery("SELECT * FROM " +tableName);
while (rs.next()) { //for each row
for (int i=0; i<numCols; i++) { //for each col
row[i] = rs.getObject(i+1);
}
model.addRow(row);
}
这适用于前158,000行,但随后会耗尽堆内存。我将堆设置为32b系统的最大值,并确认可用的ram。我认为问题在于,因为我将SQLite中的所有内容都存储为TEXT类型,所以rs.getObject()可能会返回字符串,即使大多数列(事实证明)都是整数,这会占用很多冲压。
有人可以建议如何在正确的数据类型中动态创建SQLite列,和/或在用完ram之前将JTable列动态设置为正确的类吗?