2016-07-17 7 views
0

Jemand bitte helfen Sie mir.Ich mache Dinge richtig, aber ich bekomme einen Fehler.Es ist eine JAVA-Anwendung mit MYSQL WAMP-Server verbunden.MySQLSyntaxErrorException in JAVA

Fehler: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in der Bedienungsanleitung für die richtige Syntax zu verwenden in der Nähe von 'Chege' at line 1

MEIN CODE zu Ihrem MySQL-Server-Version entspricht:

public class MyQuery { 

    public Connection getConnection() { 
     Connection con = null; 
     try { 
      con = DriverManager.getConnection("jdbc:mysql://" 
        + "localhost:3306/employee_certificate", "root", ""); 
     } catch (SQLException ex) { 
      Logger.getLogger(Query.class.getName()) 
        .log(Level.SEVERE, null, ex); 
     } 
     return con; 
    } 

    public ArrayList<Item> getData(String EmpName) { 
     ArrayList<Item> list = new ArrayList<Item>(); 
     Connection con = getConnection(); 
     Statement st; 
     ResultSet rs; 
     try { 
      st = con.createStatement(); 
      rs = st.executeQuery("SELECT Emp_Id, Emp_Name, Department " 
        + "FROM staff WHERE Emp_Name = " + EmpName + " "); 
      Item I; 
      while (rs.next()) { 
       I = new Item(
         rs.getString("Emp_Id"), 
         rs.getString("Emp_Name"), 
         rs.getString("Department")); 
       list.add(I); 
      } 
     } catch (SQLException ex) { 
      Logger.getLogger(Query.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     return list; 
    } 
} 
+2

den Wert von EmpName in Anführungszeichen oder noch besser Prepared Statements –

+0

Anführungszeichen funktionieren nicht –

+0

'WHERE Emp_Name = '" + EmpName + "'" 'Achten Sie auf die Zitate. –

Antwort

3

Ihre Abfragezeichenfolge ist nicht korrekt. Soll in etwa wie folgt:

rs=st.executeQuery("SELECT Emp_Id, Emp_Name, Department " 
      + "FROM staff WHERE Emp_Name = '"+EmpName+"'"); 

Aber ich würde empfehlen, für das Senden von SQL-Anweisungen an die Datenbank ein PreparedStatement-Objekt zu verwenden.

String query = "SELECT Emp_Id, Emp_Name, Department FROM staff WHERE Emp_Name = ?"; 
PreparedStatement preStatement = conn.prepareStatement(query); 
preStatement.setString(1, EmpName); 
ResultSet result = preStatement.executeQuery(); 

Dieser Ansatz ist sicherer und bequemer.

1

Sie haben ein kleines Problem in Ihrer Suchanfrage:

try { 
    st = con.createStatement(); 
    //Add quotes 'YourString' 
    rs = st.executeQuery("SELECT Emp_Id, Emp_Name, Department " 
      + "FROM staff WHERE Emp_Name = '" + EmpName + "' "); 
    Item I; 
    while (rs.next()) { 
     I = new Item(rs.getString("Emp_Id"), rs.getString("Emp_Name"), rs.getString("Department")); 
     list.add(I); 
    } 
} catch (SQLException ex) { 
    Logger.getLogger(Query.class.getName()).log(Level.SEVERE, null, ex); 
} 

oder für eine Sicherheitsabfrage verwendet vorbereitete Anweisung:

try { 
    PreparedStatement ps = connection.prepareStatement("SELECT Emp_Id, Emp_Name, Department FROM staff WHERE Emp_Name = ?"); 
    ps.setString(1, EmpName); 
    rs = ps.executeUpdate(); 
    Item I; 
    while (rs.next()) { 
     I = new Item(rs.getString("Emp_Id"), rs.getString("Emp_Name"), rs.getString("Department")); 
     list.add(I); 
    } 
} catch (SQLException ex) { 
    Logger.getLogger(Query.class.getName()).log(Level.SEVERE, null, ex); 
} 
Verwandte Themen