2016-04-18 5 views
1

Ich arbeite an meinem Abschluss-Projekt. Ich bin eine Java-Anwendung, die eine Verbindung zu einer Datenbank herstellt. Ich möchte mit Combobox Suche in Datenbank zu übernehmen, wenn der Benutzer wählen Sie den Punkt das Ergebnis zeigt in JTable ich den Code geschrieben, aber ich weiß nicht, was mit meinem SQL-Befehl ist falsch es diese Ausnahme werfenFehler mit SQL-Befehlen in Java

أبر 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) 

Das ist mein Code:

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 Klasse

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; 
} 

}

+0

Microsoft Access nicht die Graviszeichen verwenden zu zitieren Spaltennamen –

Antwort

0

Dies ist kein Swing-p Problem. Es ist ein SQL-Problem.

Zuerst erstellen Sie eine Methode, um eine SQL-Abfrage auszuführen und ein ResultSet zurückzugeben. Dann kodierst du alle Daten fest, damit das SQL funktioniert. Dann fügen Sie die Logik hinzu, die die dynamische Abfrage ausführt, indem Sie die Suchzeichenfolge aus dem Kombinationsfeld abrufen. Die Idee ist, das Problem zu vereinfachen und sich auf den direkten Fehler zu konzentrieren.

In Bezug auf das Problem ich ein paar Vorschläge:

1) Ich habe nie die Anführungszeichen um die einzelnen Spaltennamen verwenden, haben so dass ich, wenn sie gebraucht werden, nicht kennen. In jedem Fall würde ich die führenden Leerzeichen vor dem "Course_Name" in der SQL entfernen.

2) Verwenden Sie ein PreparedStatement. Es ermöglicht Ihnen, Parameter für Ihre Variablen in der SQL-Zeichenfolge anzugeben und formatiert dann die SQL mit diesen Variablen, sodass Sie sich keine Gedanken über die Formatierung machen müssen. Ein einfaches Beispiel:

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(); 
-1

Ihre SQL-Anweisung wie diese von table_name Wo column_name = 'text'

String sql = „Wählen Sie column_name aussehen sollte;

+0

(1-) So codieren Sie eine where-Klausel nicht, wenn Sie Variablen verwenden.Weitere Informationen finden Sie im folgenden einfachen Beispiel, das eine PreparedStatement-Anweisung verwendet, die Sie auch zur einfachen Abfrage verwenden sollten. – camickr