java - JDBC 中的一般错误(更新数据库)

标签 java ms-access jdbc odbc

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/

相关文章:

ms-access - VBA 使用全局变量 Access 奇怪的行为

java - 使用 UNICODE 或 ASCII 字符代码创建 SQL 查询

mysql - 如何解决Hibernate "ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Duplicate entry "异常

java - 强度切片opencv(与kinect)

java - 如何使用maven项目和javafx获取资源文件

c# - 来自 C# 的 MS Access SQL LIKE 查询

sql - 如何返回一个结果集中的最小和最大记录 (Microsoft Access)

java - JDBC 声明表不存在

java - 使用 TextArea 使用 JavaFX 编辑大文本文件

java - Android:防止Alert中的EditText为空