java - Java 中的 SQL 命令错误

标签 java ms-access jdbc

我正在做我的毕业设计。 I 是一个连接到数据库的Java 应用程序。我想在用户选择项目时使用组合框在数据库中应用搜索,结果将显示在 JTable 中我编写了代码,但我不知道我的 SQL 命令出了什么问题,它引发了此异常

    أبر 18, 2016 5:03:32 م MyQuery getData
SEVERE: null
java.sql.SQLException: [Microsoft][?????? ????? ODBC Microsoft Access] ??? ?? ???? ?????? (???? ??????? ?????) ?? ????? ??????? '`CAT_NAME`=    Human Resources'.
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6956)
    at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7113)
    at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3109)
    at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:337)
    at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:252)
    at MyQuery.getData(MyQuery.java:33)
    at Travel1.jComboBoxCat1ActionPerformed(Travel1.java:177)
    at Travel1.access$100(Travel1.java:33)
    at Travel1$3.actionPerformed(Travel1.java:137)
    at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1260)
    at javax.swing.JComboBox.setSelectedItem(JComboBox.java:588)
    at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:624)

这是我的代码:

private void jComboBoxCat1ActionPerformed(java.awt.event.ActionEvent evt) {                                              
MyQuery mq = new MyQuery();
    ArrayList<Course> list = mq.getData((String)jComboBoxCat1.getSelectedItem());
    DefaultTableModel model = new DefaultTableModel();
    model.setColumnIdentifiers(new Object[]{"Course Name","Duration","FEES","City","Category"});
    Object[] row = new Object[5];
    for(int i = 0; i < list.size(); i++){
        row[0] = list.get(i).getCourse_Name();
        row[1] = list.get(i).getDuration();
        row[2] = list.get(i).getFEES();
        row[3] = list.get(i).getCourse_Date();
        row[4] = list.get(i).getCity();
        model.addRow(row);
    }
    jTableresult.setModel(model);

MyQuery 类

public ArrayList<Course> getData(String catName){

ArrayList<Course> list = new ArrayList<Course>();
Connection con = getConnection();
Statement st;
ResultSet rs;

try {
st = con.createStatement();
rs = st.executeQuery("SELECT  `   COURSE_NAME`,`DURATION`,`FEES`,`DATE_FROM`,`C_NAME`,CAT_NAME FROM `Course` WHERE `CAT_NAME`= " + catName);
Course p;
while(rs.next()){
p = new Course(
rs.getString("COURSE_NAME"),
rs.getInt("DURATION"),
rs.getInt("FEES"),
rs.getString("DATE_FROM"),
rs.getString("C_NAME"),
rs.getString("CAT_NAME")
);
list.add(p);
}

} catch (SQLException ex) {
Logger.getLogger(Travel1.class.getName()).log(Level.SEVERE, null, ex);
}
return list;
}

}

最佳答案

这不是 Swing 问题。这是一个 SQL 问题。

因此,首先创建一个方法来执行 SQL 查询并返回 ResultSet。然后对所有数据进行硬编码以使 SQL 正常工作。然后,您添加通过从组合框中获取搜索字符串来执行动态查询的逻辑。这个想法是简化问题并专注于直接错误。

关于这个问题我有一些建议:

1)我从未在各个列名称周围使用引号,因此我不知道是否需要它们。无论如何,我都会删除 SQL 中“Course_Name”之前的前导空格。

2) 使用PreparedStatement。它允许您在 SQL 字符串中为变量指定参数,然后使用这些变量格式化 SQL,因此您不必担心格式化问题。一个基本示例:

String sql = "Select * from SomeTable where SomeColumn = ?";

PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, someColumnVariable);

ResultSet rs = stmt.executeQuery();

while (rs.next())
{
    // do something
}

rs.close();
stmt.close();

关于java - Java 中的 SQL 命令错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36699686/

相关文章:

java - ImageView 在 Android 中不起作用

excel - 使用 VBA 格式化从 Access 输出的 Excel 文件?

java - JDBC mysql 连接在 Win8 上比 Ubuntu14 慢得多

java - 无法加载 JDBC 驱动程序类 [com.mysql.jdbc.Driver]

java - MySQL/JDBC 问题

java - 如何在 Maven 中使用 Joda-Time?

java - 链接方法时不能依赖目标类型

java - AWS API Gateway 自定义授权方 lambda

php - 如何使用php将mysql数据库导出到ms access中

python - 如何在 Microsoft Access 数据库中创建查询对象?