我编写了一个java代码,用于从Sqlite数据库中名为edges的一个表中获取值,并将其写入另一个名为distance的表中。但是在将值写入表距离时,我每次都必须重新定义语句。如果我没有重新定义Statement的值,则循环在执行下面给出的代码的一次迭代后退出:
statement.executeUpdate(sql);
但是,如果我重新定义Statement,则循环按预期继续,即我已注释掉的代码行。谢谢。
public static Connection dbconn;
public static Statement statement;
public void solve(InputReader in,OutputWriter out) throws ClassNotFoundException
{
try
{
Class.forName("org.sqlite.JDBC");
dbconn =DriverManager.getConnection("jdbc:sqlite:/home/src/db.db");
System.out.println("Connected");
statement = dbconn.createStatement();
statement.setQueryTimeout(30);
ResultSet rs = statement.executeQuery("select * from edges;");
while(rs.next())
{
String sql = "INSERT INTO distances (Road_Name,Start_Latitude,Start_Longitude)" +
"VALUES ('"+rs.getString("Road_Name")+"',"+rs.getString("Start_Latitude")+","+rs.getString("Start_Longitude")";
//Statement statement= dbconn.createStatement();
statement.executeUpdate(sql);
}
}
catch(Exception e)
{
System.out.println("Exception : "+e);
}
}
答案 0 :(得分:2)
使用单个SQL操作更好地进行此类操作:
INSERT INTO distances (Road_Name, Start_Latitude, Start_Longitude)
SELECT Road_Name, Start_Latitude, Start_Longitude
FROM edges
或者使用两个语句,一个用于Select
,第二个用于Insert
。
答案 1 :(得分:1)
Statement statement
,因为它会关闭ResultSet rs
; 我的建议:
public static Connection dbconn;
public static Statement qry;
public void solve(InputReader in,OutputWriter out) throws ClassNotFoundException
{
try
{
Class.forName("org.sqlite.JDBC");
dbconn =DriverManager.getConnection("jdbc:sqlite:/home/src/db.db");
System.out.println("Connected");
PreparedStatement upd = dbconn.prepareStatement("INSERT INTO distances (Road_Name,Start_Latitude,Start_Longitude) VALUES (?, ?, ?)");
dbconn.setAutoCommit(false);
qry = dbconn.createStatement();
qry.setQueryTimeout(30);
ResultSet rs = qry.executeQuery("select * from edges;");
while(rs.next())
{
upd.setString(1, rs.getString("Road_Name"));
upd.setString(2, rs.getString("Start_Latitude"));
upd.setString(3, rs.getString("Start_Longitude"));
upd.executeUpdate();
}
dbconn.commit();
}
catch(Exception e)
{
System.out.println("Exception : "+e);
}
}