Java SQLite JDBC驱动程序未实现UpdateString
我有一个表Java SQLite JDBC驱动程序未实现UpdateString,java,sqlite,jdbc,Java,Sqlite,Jdbc,我有一个表PERSON,其中有500多万行,我需要根据同一个表中的字段名称更新每个表上的字段昵称 ResultSet rs = statement.executeQuery("select NAME from PERSON"); while(rs.next()) { // some parsing function like: // Nickname = myparsingfunction(rs.getString("NAME")); rs.updateString( "
PERSON
,其中有500多万行,我需要根据同一个表中的字段名称
更新每个表上的字段昵称
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();
}
但我有一个错误:
不是由SQLite JDBC驱动程序实现的
我使用的是从下载的sqlite-jdbc-3.8.11.2.jar
我知道我可以使用以下SQL查询:
statement.executeUpdate("update PERSONS set NICKNAME = Nickname where ID = Id");
但这将花费很长时间,我知道更新ResultSet
会更快。那么,我有哪些选项可以以最快的方式更新表呢?还有其他司机吗?我应该离开Java吗
更新
我能够使用下面的语法找到一个快速的解决方案。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)
正如您所遇到的,SQLite JDBC驱动程序目前不支持
updateString
操作。这可以在这个驱动程序中看到
我可以想出三个选择:
myparsingfunction
,这样查询就可以变成updatepersonsetnickname=some_函数(NAME)
updatepersonsetnickname=getNickName(NAME)代码>
我不确定这些选项中的哪一个会提供最好的性能(当然使用纯SQL会更快,但这可能不是一个可行的解决方案)。您应该对每个解决方案进行基准测试,以找到适合您的解决方案。也许可以考虑使用批处理:昵称解析是否可以用SQL而不是Java来完成?那么update语句会快得多。你为什么说“那会花很长时间”?您认为
updateRow()
在支持它的JDBC驱动程序上有什么作用?两者都将向服务器发送UPDATE
SQL语句。准备一个UPDATE
语句并对它们进行批处理实际上会提高性能,因为updateRow()
不是批处理的。
Function.create(db.getConnection(), "getNickName", new Function() {
protected void xFunc() throws SQLException {
String name = value_text(0);
String nickName = ...; // implement myparsingfunction here
result(nickName);
}
});