gpt4 book ai didi

java - 我的 Java SQL Update 语句没有更新我的数据库,我不知道这是语句问题还是连接问题

转载 作者:行者123 更新时间:2023-12-02 01:34:49 44 4
gpt4 key购买 nike

我正在将我的 Java 程序连接到存储在程序文件夹中的数据库,并且我让用户回答测验问题,并且我希望将结果存储在数据库中。 Update语句不起作用,不知道是实际语句的问题还是数据库连接的问题。

我尝试使用相同的表创建一个新数据库并重新连接到该数据库,但似乎没有任何效果。

//database connection class
public class databaseConnection {
public static Connection dbConnector() {
try {
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager
.getConnection("jdbc:sqlite:D:\\Users\\mariammahmoud\\eclipse-workspace\\ia_2019_final\\testjava.db");
return conn;
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
return null;
}
}
}

public class student {

public static final String DB_NAME = "testjava.db";

public static final String TABLE_STUDENTS = "students";

public static final String COLUMN_NAME = "name";
public static final String COLUMN_GRADE = "grade";
public static final String COLUMN_RESULTS = "results";
public static final String COLUMN_EVENTS = "events";
public static final String COLUMN_USERNAME = "username";

public void main() {
try {
String user_name = login_student.sendQuiz();
Connection conn = databaseConnection.dbConnector();
ArrayList<String> results = new ArrayList<String>(15);
instructions();
questions(results);
results.trimToSize();

System.out.println("Here are the events that you should consider competing in:");
System.out.println(results);

String separator = ",";

int total = results.size() * separator.length();
for (String finalResults : results) {
total += finalResults.length();
}

StringBuilder sb = new StringBuilder(total);
for (String finalResults : results) {
sb.append(separator).append(finalResults);
}

String resultsDatabase = sb.substring(separator.length());
String sql = "UPDATE students SET events = ? WHERE username = " +user_name;
PreparedStatement myStmt = conn.prepareStatement(sql);
myStmt.setString(1, resultsDatabase);

myStmt.executeUpdate();

} catch (SQLException e) {
System.out.println("Something went wrong:" + e.getMessage());
e.printStackTrace();
}

}

我希望更新语句能够更新 testjava.db 数据库,但一切都保持不变。我应该怎么办?预先感谢您!

最佳答案

您的问题是,虽然您在代码中明智地使用了准备好的语句进行更新,但您从未真正将其用于 WHERE 子句中的 username 列。因此,您当前正在执行的查询不会被解释为将某些输入与用户名进行比较。相反,username 值将被解释为一列。试试这个版本:

String resultsDatabase = sb.substring(separator.length());
String sql = "UPDATE students SET events = ? WHERE username = ?";
PreparedStatement myStmt = conn.prepareStatement(sql);
myStmt.setString(1, resultsDatabase);
myStmt.setString(2, user_name);
myStmt.executeUpdate();

请注意,您可以刚刚尝试过以下操作:

String sql = "UPDATE students SET events = ? WHERE username = '" + user_name + "'";

但是,请按照我上面的建议将值绑定(bind)到 ? 占位符。 using 语句的好处之一是它使您不必担心如何转义查询中的数据。

关于java - 我的 Java SQL Update 语句没有更新我的数据库,我不知道这是语句问题还是连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55379741/

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