private void sUpdateBtnActionPerformed(java.awt.event.ActionEvent evt) {
String query = "UPDATE Student SET lastname = ?, firstname = ?, course = ?, yearlvl = ?, username = ?, password = ?";
dbConn = DbConnection.dbConnect();
prepState = dbConn.prepareStatement(query);
prepState.setString(1, sLnTf.getText());
prepState.setString(2, sFnTf.getText());
prepState.setString(3, courseTf.getText());
prepState.setInt(4, Integer.parseInt(yearLvlTf.getText()));
prepState.setString(5, sUserTf.getText());
prepState.setString(6, sPassTf.getText());
prepState.executeUpdate();
}catch(Exception e){
appendEvent(sdf.format(new Date()) + " Error: " + e);
}
}
连接数据库的方法:
import java.sql.*;
import javax.swing.*;
public class DbConnection {
Connection dbConn = null;
public static Connection dbConnect(){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection dbConn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=H:/Integ Ongoing Project/_Midterm Project/Server/src/database/Database.accdb");
return dbConn;
}catch(Exception e){
System.out.println(e.getMessage());
return null;
}
}
}
最佳答案
密码是 reserved word 。如果您必须将其保留为字段名称,请将其括在查询中的括号中,以减少混淆数据库引擎的可能性。
UPDATE Student
SET
lastname = ?,
firstname = ?,
course = ?,
yearlvl = ?,
username = ?,
[password] = ?
WHERE student_id = ?
请注意,正如 Stephen 建议的那样,我包含了一个 WHERE
子句,因为您似乎不太可能希望将这些相同的字段值应用于 Student
表中的每一行。我使用 student_id
作为表主键的占位符名称...唯一标识每一行的字段。我的目的是修改 WHERE
子句以引用您想要更改其记录的学生的主键。
如果您实际上正在尝试添加新记录,请使用 INSERT
语句,而不是更新现有记录。
INSERT INTO Student (
lastname,
firstname,
course,
yearlvl,
username,
[password]
)
VALUES (
?,
?,
?,
?,
?,
?
)
如果您将自动编号作为主键的数据类型,数据库引擎将为您管理它。
关于java - JDBC 中的一般错误(更新数据库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14776175/