【问题标题】:JDBC SQLite UpdateJDBC SQLite 更新
【发布时间】:2011-09-03 08:50:48
【问题描述】:

我是 jdbc sqlite 的新手。我想知道如何执行更新。例如,我有一个名为人名和职业的表。我应该使用 PreparedStatement 吗?

PreparedStatement change = conn.prepareStatement("Update people set name = ? ");
change.setString(1, "John");

ResultSet rs = stat.executeQuery("select * from people where name = 'Gandhi';");
while (rs.next()) {
    System.out.println("name = " + rs.getString("name"));
    System.out.println("job = " + rs.getString("occupation"));
}
rs.close();
conn.close();

我想问正确的方法。谢谢你..

【问题讨论】:

  • 对我来说看起来不错。这段代码不适合你吗?怎么不?
  • 不要以';'结束你的陈述在 JDBC 中没有必要。是的,PreparedStatement 很好,但是您似乎没有在“更改”语句上运行 execute()。
  • 您可能希望在更新语句中添加where 子句。那里有一个 WTF 等着发生。
  • 始终在 finally 块中关闭非托管资源,例如 Connection 和 ResultSet。

标签: java sqlite jdbc


【解决方案1】:

您可能想查看Java and SQLite

帖子中的示例:

package com.rungeek.sqlite;

import java.sql.Connection;
import java.sql.DriverManager; 
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class Test {
 public static void main(String[] args) throws Exception {
    Class.forName("org.sqlite.JDBC");
    Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
    Statement stat = conn.createStatement();
    stat.executeUpdate("drop table if exists people;");
    stat.executeUpdate("create table people (name, occupation);");
    PreparedStatement prep = conn.prepareStatement(
        "insert into people values (?, ?);");

    prep.setString(1, "Gandhi");
    prep.setString(2, "politics");
    prep.addBatch();
    prep.setString(1, "Turing");
    prep.setString(2, "computers");
    prep.addBatch();
    prep.setString(1, "Wittgenstein");
    prep.setString(2, "smartypants");
    prep.addBatch();

    conn.setAutoCommit(false);
    prep.executeBatch();
    conn.setAutoCommit(true);

    ResultSet rs = stat.executeQuery("select * from people;");
    while (rs.next()) {
        System.out.println("name = " + rs.getString("name"));
        System.out.println("job = " + rs.getString("occupation"));
    }
    rs.close();
    conn.close();
}
}

谢谢,

【讨论】:

  • 关闭 finally 块中的非托管资源,例如 Connection。
【解决方案2】:

您没有“执行”更新。您需要调用 change.executeUpdate() 才能将 UPDATE 语句发送到引擎。

(正如 ZeroPage 指出的那样:删除 SQL 字符串中的 ;

【讨论】:

  • 这对我有帮助。谢谢!
猜你喜欢
  • 2017-05-07
  • 2020-08-31
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
相关资源
最近更新 更多