Java JDBC SQLite 更新条目不起作用

Posted

技术标签:

【中文标题】Java JDBC SQLite 更新条目不起作用【英文标题】:Java JDBC SQLite update entry not working 【发布时间】:2014-10-09 03:27:09 【问题描述】:

我在 Eclipse 中使用 JDBC 和 SQLite 创建了一个数据库和一组表。

我正在尝试使用以下代码更新表格:

public static void update()
      
        Connection c = null;
        Statement stmt = null;
        try 
          Class.forName("org.sqlite.JDBC");
          c = DriverManager.getConnection("jdbc:sqlite:WalkerTechCars.db");
          c.setAutoCommit(false);
          System.out.println("Opened database successfully");

          stmt = c.createStatement();
          String sql = "UPDATE CUSTOMERS2 set ADDRESS = Byron WHERE PHONE=2;";
          stmt.executeUpdate(sql);
          c.commit();

          ResultSet rs = stmt.executeQuery( "SELECT * FROM CUSTOMERS;" );
          while ( rs.next() ) 
             int id = rs.getInt("id");
             String  name = rs.getString("name");
             int age  = rs.getInt("age");
             String  address = rs.getString("address");
             float salary = rs.getFloat("salary");
             System.out.println( "ID = " + id );
             System.out.println( "NAME = " + name );
             System.out.println( "AGE = " + age );
             System.out.println( "ADDRESS = " + address );
             System.out.println( "SALARY = " + salary );
             System.out.println();
          
          rs.close();
          stmt.close();
          c.close();
         catch ( Exception e ) 
          System.err.println( e.getClass().getName() + ": " + e.getMessage() );
          System.exit(0);
        
        System.out.println("Update Completed successfully");
      

据我所知,我使用的 SQL 语法说:

更新表customers2并将地址设置为Byron where phone =2

但出现以下错误:

java.sql.SQLException: no such column: Byron

这告诉我它将我的请求解释为要求更改名为 Byron 的列,这不是我认为代码所说的内容?

【问题讨论】:

需要引用'Byron' 【参考方案1】:

根据 SQL 语法,varchar 值应与单引号一起使用,因此请更新:

      String sql = "UPDATE CUSTOMERS2 set ADDRESS = Byron WHERE PHONE=2;";

      String sql = "UPDATE CUSTOMERS2 set ADDRESS = 'Byron' WHERE PHONE=2;";

如果您不使用单引号,SQL 会假定您尝试使用不同的列设置值,因此会引发错误:

java.sql.SQLException: no such column: Byron

建议:使用PreparedStatment 进行动态参数查询

PreparedStatement stmt;
String sql = "UPDATE CUSTOMERS2 set ADDRESS=? WHERE PHONE=?";
stmt = c.prepareStatement(sql);
stmt.setString(1, "Byron");
stmt.setInt(2, 2);
stmt.executeUpdate();

【讨论】:

以上是关于Java JDBC SQLite 更新条目不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android SQLite 更新行不起作用并且没有显示错误

iOS sqlite/FMDB 更新不起作用

jdbc mysql执行更新不起作用

从SQlite引入数据时,微调器选择不起作用

为什么此代码的更新按钮不起作用? [关闭]

使用 `executemany` 更新现有 SQLite3 数据库中的条目(使用 Python sqlite3)