2017-10-26 1 views
0

Ich bin N00B bei Java und das sind meine ersten Schritte (4 Tage ca. 12 Stunden/Tag ... < 3 Java;)) mit JDBC. Ich habe ein Problem mit der einfachen Abfrage. Ich möchte eine Methode schreiben, die eine Liste von Datensätzen mit der ID größer als Parameter zurückgibt. so schrieb, dass:JDBC Fragezeichen in SQL-Syntax

public List<Person> whereId(int id) { 


     List<Person> persons = new ArrayList<Person>(); 
     Connection connection = null; 
     Statement statement = null; 
     ResultSet resultSet = null; 

     try { 
      connection = DBConnection.getConnection(); 
      statement = connection.createStatement(); 
      resultSet = statement.executeQuery("SELECT * FROM person WHERE id>?"); 

      while(resultSet.next()) { 
       Person person = new Person(); 
       person.setId(resultSet.getInt("id")); 
       person.setfirstName(resultSet.getString("firstName")); 
       person.setlastName(resultSet.getString("lastName")); 

       persons.add(person); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     }finally { 
      if(resultSet!= null) { 
       try { 
        resultSet.close(); 
       } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      if(statement!=null) { 
       try { 
        statement.close(); 
       } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      if(connection!=null) { 
       try { 
        connection.close(); 
       } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 

     return persons; 
    } 
} 

Konsole sagt mir, dass ich eine falsche Syntax in meinem Handbuch haben, die mit meinem MariaDB entspricht. Ich habe wenige Methoden in derselben Klasse geschrieben, aber nur mit diesem habe ich ein Problem. Wenn du weißt, wie du es lösen kannst, sag es mir bitte. Vielleicht ist es ein einfaches Problem, aber das merke ich nicht. Ich war auf dieser Seite die Antwort aus, aber ich habe nicht die Antwort finden, (

Grüße :)

Antwort

0

ersetzen Versuchen ...

statement = connection.createStatement(); 
resultSet = statement.executeQuery("SELECT FROM person WHERE id>?"); 

mit

statement = connection.prepareStatement("SELECT * FROM person WHERE id > ?"); 
statement.setInt(1, minId); 
resultSet = statement.executeQuery(); 

Sie muss auch minId setzen.

+0

es funktioniert! Danke vielmals! Ich weiß nicht warum, aber ich werde versuchen, es bis morgen herauszufinden :) Danke nochmal! Ich habe versucht, das zu tun, weil ich das in der anderen Frage auf dieser Seite gesehen habe, aber diesmal habe ich Statement = null nicht geändert, in PreparedStatement-Anweisung ... jetzt funktioniert es :) –

+0

Sie verwenden eine vorbereitete Anweisung, wenn Sie möchte dieselbe Abfrage mehrfach mit unterschiedlichen Parameterwerten ausführen. Wenn sich der Ausdruck 'id>?' Niemals ändert, sollten Sie ihn einfach wie 'id> 10' codieren und dann brauchen Sie keine vorbereitete Anweisung. Wenn es sich jedoch ändert, sollten Sie die vorbereitete Anweisung verwenden, wie @Mike gezeigt hat. – Matt

+0

@Jason Ja ... bearbeitet. – Mike

0

Nun, Sie führen die Abfrage mit Statement, aber Statement unterstützt keine Platzhalter (?). Prepared Statement unterstützt jedoch die Platzhalter.

Verwenden

PreparedStatement preparedstatement= connection.PreaparedStatement("SELECT * FROM person WHERE id > ?"); 

Für DQL dert executeQuery() ist eine bessere Wahl.