我有一个表PERSON
超过5百万行,我需要根据字段NAME
在同一个表内的字段NICKNAME
更新字段NICKNAME
。UpdateString没有通过SQLite JDBC驱动程序
ResultSet rs = statement.executeQuery("select NAME from PERSON");
while(rs.next())
{
// some parsing function like:
// Nickname = myparsingfunction(rs.getString("NAME"));
rs.updateString("NICKNAME", Nickname);
rs.updateRow();
}
但我得到这个错误:
not implemented by SQLite JDBC driver
我使用SQLite-JDBC-3.8.11.2.jar在https://bitbucket.org/xerial/sqlite-jdbc/downloads下载。
我知道我可以使用下面的SQL查询:
statement.executeUpdate("update PERSONS set NICKNAME = Nickname where ID = Id");
但是,这将需要永远和我的理解更新ResultSet
会更快。那么我需要什么选择以最快的方式更新表格呢?还有其他的驱动程序吗我应该移出Java吗?
UPDATE
我能找到使用以下语法快速的解决方案。 CASE
和END
之间的块是我在执行SQL查询之前构建的连接字符串,因此我可以一次发送所有更新。
update PERSON
set NICKNAME= case ID
when 173567 then 'blabla'
when 173568 then 'bleble'
...
when 173569 then 'blublu'
end
where ID in (173567, 173568, 173569)
也许看看使用批处理:http://stackoverflow.com/questions/14264953/how-is-jdbc-batch-update-helpful – tim
昵称解析可能在SQL而不是Java?然后更新声明会快很多。 – RealSkeptic
你为什么说“那将永远”?你认为'updateRow()'的确如此(在支持它的JDBC驱动上)?两者都会向服务器发送“UPDATE”SQL语句。准备一个'UPDATE'语句并对它们进行批处理,对于性能来说实际上会更好*,因为'updateRow()'不是*批处理。 – Andreas