Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的Java SQL Update语句没有更新我的数据库,我没有';我不知道它是否';语句或连接有问题吗_Java_Sql_Jdbc - Fatal编程技术网

我的Java SQL Update语句没有更新我的数据库,我没有';我不知道它是否';语句或连接有问题吗

我的Java SQL Update语句没有更新我的数据库,我没有';我不知道它是否';语句或连接有问题吗,java,sql,jdbc,Java,Sql,Jdbc,我将Java程序连接到存储在Program文件夹中的数据库,让用户回答测验问题,我希望结果存储在数据库中。Update语句不起作用,我不知道是实际语句还是数据库连接有问题 我尝试用相同的表创建一个新的数据库并重新连接到该数据库,但似乎没有任何效果 //database connection class public class databaseConnection { public static Connection dbConnector() { try {

我将Java程序连接到存储在Program文件夹中的数据库,让用户回答测验问题,我希望结果存储在数据库中。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();
        }

    }
//数据库连接类
公共类数据库连接{
公共静态连接dbConnector(){
试一试{
Class.forName(“org.sqlite.JDBC”);
连接连接=驱动器管理器
.getConnection(“jdbc:sqlite:D:\\Users\\mariammahmoud\\eclipse workspace\\ia_2019_final\\testjava.db”);
返回连接;
}捕获(例外e){
showMessageDialog(null,e);
返回null;
}
}
}
公立班学生{
公共静态最终字符串DB_NAME=“testjava.DB”;
公共静态最终字符串表\u STUDENTS=“STUDENTS”;
公共静态最终字符串列\u NAME=“NAME”;
公共静态最终字符串列\u GRADE=“GRADE”;
公共静态最终字符串列\u RESULTS=“RESULTS”;
公共静态最终字符串列_EVENTS=“EVENTS”;
公共静态最终字符串列\u USERNAME=“USERNAME”;
公共图书馆{
试一试{
字符串user_name=login_student.sendquick();
Connection conn=databaseConnection.dbConnector();
ArrayList结果=新的ArrayList(15);
指令();
问题(结果);
结果:trimToSize();
Soop.Out.PrtLn(“这里是你应该考虑的事件:”);
系统输出打印项次(结果);
字符串分隔符=“,”;
int total=results.size()*separator.length();
对于(字符串最终结果:结果){
合计+=最终结果长度();
}
StringBuilder sb=新StringBuilder(总计);
对于(字符串最终结果:结果){
附加(分隔符)。附加(最终结果);
}
字符串resultsDatabase=sb.substring(separator.length());
String sql=“UPDATE students SET events=?WHERE username=“+user\u name;
PreparedStatement myStmt=conn.prepareStatement(sql);
setString(1,resultsDatabase);
myStmt.executeUpdate();
}捕获(SQLE异常){
System.out.println(“出错:+e.getMessage());
e、 printStackTrace();
}
}

我希望update语句更新testjava.db数据库,但一切都没有改变。我该怎么办?提前谢谢你!

你的问题是,虽然你在代码中明智地使用了一条准备好的语句来进行更新,但实际上从未将它用于
WHERE
子句.Henc中的
username
列e、 您当前执行的查询不会被解释为将某些输入与
用户名
进行比较。相反,
用户名
值将被解释为一列。请尝试此版本:

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 + "'";

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

您的问题是,虽然您在代码中明智地使用了一条准备好的语句进行更新,但实际上从未将其用于查询
WHERE
子句中的
username
列。因此,您当前执行的查询不会被解释为将某些输入与
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 + "'";

<>但是,请将一个值绑定到<代码> 占位符,正如我上面所建议的。使用语句的一个好处是,它可以免除你担心如何在查询中逃避数据。

@ MiaMaMaMod如果这个答案解决了你的问题,那么考虑一下接受它,点击左边的绿色复选标记。如果这个答案解决了你的问题,那么考虑一下接受它,通过点击答案左边的绿色复选标记。