Я пытаюсь добавить две строки на два отдельных столбца столбца моей базы данных с помощью 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 для доступа к моей базе данных.
@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. Все остальные комментарии кажутся правильными.
Так вы обычно обновляете строку в 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();
Во-первых, вы не обновили позицию текущего курсора в ResultSet
, что означает, что он ничего не указывает...
Вы можете использовать...
if (rs.next()) {
rs.updateString("user", user);
rs.updateString("pass", pass);
rs.updateRow();
}
Но это предполагает две вещи...
ResultSet
и Чтобы вставить значение в базу данных, вы должны использовать команду 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)
В качестве примечания...
String
s, вы должны хранить их в массивах char
и