Java JDBC SQLite更新项不工作
我在Eclipse中使用JDBC和SQLite创建了一个数据库和一组表 我正在尝试使用以下代码更新表:Java JDBC SQLite更新项不工作,java,eclipse,sqlite,jdbc,Java,Eclipse,Sqlite,Jdbc,我在Eclipse中使用JDBC和SQLite创建了一个数据库和一组表 我正在尝试使用以下代码更新表: public static void update() { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("j
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,其中phone=2
但是我得到了以下错误:
java.sql.SQLException: no such column: Byron
这告诉我,它将我的请求解释为要求更改名为Byron的列,这不是我认为代码所说的?根据SQL语法,
varchar
值应与单引号一起使用,因此请更新以下内容:
String sql = "UPDATE CUSTOMERS2 set ADDRESS = Byron WHERE PHONE=2;";
到
如果不使用单引号,SQL会假定您正在尝试使用其他列设置值,因此会抛出错误:
java.sql.SQLException: no such column: Byron
建议:使用preparedstation
进行动态参数查询
PreparedStatement stmt;
String sql = "UPDATE CUSTOMERS2 set ADDRESS=? WHERE PHONE=?";
stmt = c.prepareStatement(sql);
stmt.setString(1, "Byron");
stmt.setInt(2, 2);
stmt.executeUpdate();
需要引用“拜伦”。
PreparedStatement stmt;
String sql = "UPDATE CUSTOMERS2 set ADDRESS=? WHERE PHONE=?";
stmt = c.prepareStatement(sql);
stmt.setString(1, "Byron");
stmt.setInt(2, 2);
stmt.executeUpdate();