gpt4 book ai didi

JavaFX 更新 Sqlite 表

转载 作者:行者123 更新时间:2023-12-01 11:16:49 26 4
gpt4 key购买 nike

我目前正在开发一个程序,其功能是存储我的密码,这就是我使用名为 Users 的 SQL 数据库的原因。该数据库包含将使用该程序的所有用户的表。这些表有四列:

SiteName, Username, Password, AdditionalInfo

我在更新特定行时遇到问题。这是我收到错误的代码:

public static void editPassword(String user, String siteEdited, String site, String usernamej, String password, String info){
try{
System.out.println(usernamej);
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:res/Users");
c.setAutoCommit(false);
stmt = c.createStatement();
String update = "UPDATE " + user + " set Username = " + usernamej + " where SiteName = " + siteEdited;
stmt.executeUpdate(update);
stmt.close();
c.close();
}catch(Exception e){
System.err.print( e.getClass().getName() + ": " + e.getMessage());
}
}

它位于一个专门用于处理 sql 数据库的类中,当我尝试将用户名更改为“test”时,它会出现以下错误:

java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such column: test)

最佳答案

假设您为 user 传入的值是表的名称,您的 update 字符串将如下所示

UPDATE usertable SET Username = test where SiteName = siteEditedValue 

您需要引用字符串值:

UPDATE usertable SET Username = 'test' where SiteName = 'siteEditedValue'

快速而肮脏的方法是:

String update = "UPDATE " + user + " set Username = '" + usernamej + "' where SiteName = '" + siteEdited + "'";

但是,在这种情况下,使用 PreparedStatement 会好得多:

public static void editPassword(String user, String siteEdited, String site, String usernamej, String password, String info){
try{
System.out.println(usernamej);
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:res/Users");
stmt = c.prepareStatement("UPDATE " + user + " SET Username = ? Where SiteName = ?");
stmt.setString(1, usernamej);
stmt.setString(2, siteEdited);
stmt.executeUpdate();
stmt.close();
c.close();
}catch(Exception e){
System.err.print( e.getClass().getName() + ": " + e.getMessage());
}
}

此代码假定 stmt 的类型是 PreparedStatement,而不仅仅是 Statement

除了为您处理引用值之外,这还将为您转义任何 sql,从而防止 SQL 注入(inject)攻击的可能性(虽然这些问题在桌面应用程序中远不如 Web 应用程序中的问题,但仍然是一个值得养成的好习惯)。

关于JavaFX 更新 Sqlite 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31724175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com