我正在做我的毕业设计。 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/