Как вставить две строки в мою базу данных Access из Java с помощью UCanAccess?

1

Я пытаюсь добавить две строки на два отдельных столбца столбца моей базы данных с помощью Java, но я не уверен, что я делаю неправильно. Код, который я использую

 try{
    Connection conn = DriverManager.getConnection(
                "jdbc:ucanaccess://C:/Users/nevik/Desktop/databaseJava/Employee.accdb");
        Statement st = conn.createStatement();
        String sql = "Select * from Table2";
        ResultSet rs = st.executeQuery(sql);


        rs.updateString("user", user);
        rs.updateString("pass", pass);

        rs.updateRow();

    }
    catch(SQLException ex){
        System.err.println("Error: "+ ex);
    }

Первый столбец в моей базе данных - user а следующий - pass. Я использую UCanAccess для доступа к моей базе данных.

Теги:
jdbc
ucanaccess

3 ответа

1

@guevarak12 Об исходном вопросе (как использовать обновляемый ResultSet): ваш код неправильный, вам нужно переместить курсор в правильное положение. В частности, если вы вставляете новую строку, вы должны вызвать rs.moveToInsertRow(); перед rs.updateString("пользователь", пользователь). Если вы обновляете существующую строку, вам нужно переместить курсор, вызывающий rs.next(), и таким образом достичь строки для обновления. Также вы должны создать выражение по-другому:

Statement st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);

См. Примеры junit в дистрибутиве исходного кода UCanAccess, класс net.ucanaccess.test.CrudTest. Все остальные комментарии кажутся правильными.

1

Так вы обычно обновляете строку в java:

String query = "update Table2 set user = ?, pass= ?";
PreparedStatement preparedStmt = conn.prepareStatement(query);
preparedStmt.setInt   (1, user);
preparedStmt.setString(2, pass);

// execute the java preparedstatement
preparedStmt.executeUpdate();
1

Во-первых, вы не обновили позицию текущего курсора в ResultSet, что означает, что он ничего не указывает...

Вы можете использовать...

if (rs.next()) {
   rs.updateString("user", user);
   rs.updateString("pass", pass);
   rs.updateRow();
}

Но это предполагает две вещи...

  1. У вас есть база данных, поддерживающая обновление значений в ResultSet и
  2. Вы хотите обновить существующие значения.

Чтобы вставить значение в базу данных, вы должны использовать команду INSERT, например...

try(Connection conn = DriverManager.getConnection(
            "jdbc:ucanaccess://C:/Users/nevik/Desktop/databaseJava/Employee.accdb")) {
    try (PreparedStatement stmt = conn.prepareStatement("INSERT into Table2 (user, pass) VALUES (?, ?)") {
        stmt.setString(1, user);
        stmt.setString(2, pass);
        int rowsUpdated = stmt.executeUpdate();
    }
}
catch(SQLException ex){
    System.err.println("Error: "+ ex);
}

Вам может потребоваться некоторое время, чтобы перейти к базовому учебному курсу SQL и тропе доступа к базе данных JDBC (TM)

В качестве примечания...

  1. Вы не должны хранить пароли в String s, вы должны хранить их в массивах char и
  2. Вы не должны хранить пароли в базе данных, не шифруя их каким-либо образом
  • 0
    setString просит меня передать int для первого аргумента
  • 0
    обновил предложение try try (Соединение conn = DriverManager.getConnection ("jdbc: ucanaccess: // C: /Users/nevik/Desktop/databaseJava/Employee.accdb")) {try (PreparedStatement stmt = conn.prepareStatement ("INSERT into Table2 (user, pass) VALUES ("+ user +", "+ pass +") ")) {stmt.setString (1, user); stmt.setString (2, pass); stmt.executeUpdate (); } получил ошибку: net.ucanaccess.jdbc.UcanaccessSQLException: пользователю не хватает привилегии или объект не найден: USER12 Я не могу понять, на что ссылается USER12
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню