Подготовленный оператор Java не вводит данные и попадает в catch

#java #sql #sqlite #prepared-statement

#java #sql #sqlite #подготовленный оператор

Вопрос:

В настоящее время я пишу некоторый SQL для более крупной программы. Первоначально я использовал необработанные запросы SQL (которые работали), а затем переключился на подготовленные операторы для обеспечения безопасности и аккуратности.

К сожалению, операторы не выполняют мои вставки или любую другую функцию SQL, и я продолжаю нажимать catch в своем блоке try catch. Сообщение, которое он выдает, — это запрос, который не возвращает результаты, однако я понимаю, что это сообщение само по себе не обязательно указывает на ошибку.

Вот мой код, любая помощь приветствуется

  public User createNewUser(String email, String publicKey, int balance, String privateKey, int units, String type)
 {

    try (Connection conn = DriverManager.getConnection(connectionString);)
    {
        //create new user in the db
        String query = "INSERT INTO "   USER_TABLE_NAME   " (email, publicKey, privateKey, balance) "  
                "Values(?, ?, ?, ?)";

        PreparedStatement makeNewUser = conn.prepareStatement(query);
        makeNewUser.setString(1, email);
        makeNewUser.setString(2, publicKey);
        makeNewUser.setString(3, privateKey);
        makeNewUser.setInt(4, balance)

        ResultSet newUser = makeNewUser.executeQuery();
        newUser.next();
    }
    catch(SQLException e)
    {
        System.out.println("EPIC FAIL "   e.getMessage());
        return null;
    }
  

а вот схема таблицы для пользователей:

     static String createUserTable = "CREATE TABLE IF NOT EXISTS "   USER_TABLE_NAME   "(n"
          " id integer PRIMARY KEY AUTOINCREMENT,n"
          " email text UNIQUE NOT NULL,n"
          " publicKey Text UNIQUE NOT NULL, n"
          " privateKey Text UNIQUE NOT NULL, n"
          " balance INTEGER NOT NULL n"
          ");";
  

Ответ №1:

Изменить

 ResultSet newUser = makeNewUser.executeQuery();
  

чтобы использовать PreparedStatement.executeUpdate()

 makeNewUser.executeUpdate();
  

Ваша вставка не возвращает a ResultSet .