Мой оператор Java SQL Update не обновляет мою базу данных, и я не знаю, является ли это проблемой с оператором или соединением - PullRequest
0 голосов
/ 27 марта 2019

Я подключаю свою программу 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, но все остается прежним.Что я должен делать?Заранее спасибо!

1 Ответ

2 голосов
/ 27 марта 2019

Ваша проблема в том, что, хотя вы мудро использовали подготовленный оператор в своем коде для обновления, вы фактически никогда не использовали его для столбца 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 + "'";

Но, пожалуйста, свяжите значение с ? заполнителемвместо этого, как я предложил выше.Одно из преимуществ использования операторов заключается в том, что это избавляет вас от необходимости беспокоиться о том, как экранировать ваши данные в запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...