2009-05-24 4 views
0

Ich versuche, JDBC verwenden und meine Abfrage funktioniert in einigen Fällen, aber nicht in anderen arbeiten. Ich würde wirklich jede Hilfe zu schätzen wissen.Seltsames Problem mit JDBC, wählen Sie Null zurück

Einige meiner Code:

public Result getSpecificTopic() 
    { 
     String query = "Select msg_body, msg_author from lawers_topic_msg";// where msg_id=2 order by msg_id desc"; 
     try 
     { 
      con = mysql.getConnection(); 
      //Statement stmt = con.createStatement(); 
      PreparedStatement stmt = con.prepareStatement(query); 
      //stmt.setInt(1, topicId); 
      ResultSet rs = stmt.executeQuery(query); 
      int rowCount = rs.getRow(); 
      specificTopic = ResultSupport.toResult(rs); 

      con.close(); 
      stmt.close(); 
     } 
     catch(Exception e) 
     { 
     } 
     return this.specificTopic; 
    } 

    public void setTopicId(String num) 
    { 
     this.topicId = Integer.parseInt(num); 
    } 

    public int getTopicId() 
    { 
     return this.topicId; 
    } 

aber wenn ich

String query = "Select msg_body, msg_author from lawers_topic_msg"; 

zum

String query = "Select msg_body, msg_author from lawers_topic_msg where msg_id = " + topicId; 

Dann wird die Suchresultates retunrs nichts .... Ich breche ändern meine Kopf hier und kann immer noch nicht herausfinden, was das Problem ist

+3

Haben Sie versucht, das Drucken der Abfrage an die Konsole, bevor es ausgeführt wird? Nimm die Ausgabe davon und führe sie dann direkt gegen deine Datenbank aus. – BobbyShaftoe

+0

Danke, du hattest Recht. Ich wünschte, ich könnte Ihnen auf den Kommentar Antwort geben. – Dmitris

Antwort

3

Als ersten Schritt lohnt es sich sicherzustellen, dass eine Ausnahme nicht ausgelöst wird - loggen Sie zumindest etwas in Ihren catch() - Block ein.

Es lohnt sich auch, das generierte SQL zu protokollieren und sicherzustellen, dass bei einer direkten Ausführung tatsächlich das zurückgegeben wird, was Sie von der Datenbank erwarten.

Wenn Sie mehrere Datenbanken haben, wäre es wert zu bestätigen, dass Sie gegen den laufen, von dem Sie glauben, dass Sie es sind - ich schäme mich zu zugeben, dass ich auf diese Weise schon einmal erwischt wurde.

+0

+1 für "tue etwas in deinem catch-Block". – extraneon

2

mehr Probleme mit Ihrem Code, ich werde es kurz halten:

nicht mit try/catch auf dieser Ebene encapuslate, aspecially nicht, da Sie kein Fehlermanagement tun. this.specificTopic sieht global aus. Wenn Ihre Abfrage fehlschlägt, gibt sie also zurück, was in dieser.specificTopic-Datei gespeichert wurde.

auch versuchen, was BobbySaftoe sagte. Drucken Sie in der Konsole oder verwenden Sie Ihren Debugger. Dies sollte Ihnen einen guten Hinweis darauf geben, was falsch ist.

+0

topicId ist nur private Variable in derselben Klasse. Aber Sie können über Abfrage direkt über die Datenbank ausführen. – Dmitris

2

meine erste Schätzung wäre Integer.parseInt (num) könnte eine Ausnahme auslösen. Wenn dies der Fall ist, wird die SQL-Anweisung unterbrochen.

Zweitens, wie Makach darauf hingewiesen hat, gibt es mehrere Probleme. zuerst die catch-all

Sie nicht String-Verkettung verwenden sollten, wie

 ....where msg_id = " + topicId; 

sondern

 ....where msg_id = ?" 
     stmt.set Int(1,topicId) 

edit: es scheint, das ist, was Sie sowieso versucht wurden, saugt SO in einigen Zeichen.

+0

Danke für den Hinweis bezüglich meines Codes. Ich habe es jetzt auf die richtige Weise geändert. – Dmitris