我的Java SQL Update语句没有更新我的数据库,我不知道它是否与语句或连接有关

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的Java SQL Update语句没有更新我的数据库,我不知道它是否与语句或连接有关相关的知识,希望对你有一定的参考价值。

我将我的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();
        

    

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

答案

您的问题是,当您明智地在代码中使用预准备语句进行更新时,您实际上从未将它用于username子句中的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 + "'";

但是,请将值绑定到?占位符,如上所述。使用语句的一个好处是,它使您不必担心如何在查询中转义数据。

以上是关于我的Java SQL Update语句没有更新我的数据库,我不知道它是否与语句或连接有关的主要内容,如果未能解决你的问题,请参考以下文章

informix 中update 前2条记录的 SQL语句

oracle 数据库用update 语句更新无效。

java下连接mysql数据库 ——更新语句——update

java jdbc 的sql语句、 根据时间查询表中数据、若有数据那么更新数据 如果没有数据、那么

SQL update select结合语句详解及应用

通过 RAW plpgsql 中的 UPDATE 语句获取受影响的行