我正在尝试使用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来访问我的数据库。
答案 0 :(得分: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 :(得分:1)
首先,您还没有更新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) Database Access路径
作为旁注......
String
中存储密码,你应该将它们保存在char
阵列中答案 2 :(得分:1)
@ guevarak12 关于原始问题(如何使用可更新的ResultSet): 你的代码错了,你必须将光标移动到正确的位置。 特别是,如果要插入新行,则必须调用rs.moveToInsertRow();在rs.updateString之前("用户",用户)。 如果要更新现有行,则必须移动光标调用rs.next(),然后到达要更新的行。 您还必须以不同的方式创建Statement:
Statement st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE);
请参阅UCanAccess源代码分发中的junit示例,类net.ucanaccess.test.CrudTest。 所有其他评论似乎都是正确的。