2009-05-24 14 views
0

JDBCを使用しようとしていますが、クエリが動作している場合もありますが、 本当に助けていただければ幸いです。JDBCで奇妙な問題が発生しました。selectはnullを返します。

私のコードのいくつか:私は

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

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

を変更した場合

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

しかしその後、結果セットが何もretunrsない.... 私は私を破壊していますここに行き、まだ何が問題なのかわからない

+3

あなたはそれを実行する前に、コンソールにクエリを印刷してみましたか?その出力を取り出し、データベースに対して直接実行してください。 – BobbyShaftoe

+0

ありがとうございました。 私はコメントが受け入れられた答えにあなたを与えることができたらいいと思う。 – Dmitris

答えて

3

最初のステップとして、例外がスローされないことを確認する価値があります。少なくとも、catch()ブロック内の何かをログに記録してください。

また、生成されたSQLをロギングする価値があります。実際に直接実行したときにデータベースから期待されるものを実際に返すようにしてください。

複数のデータベースをお持ちの場合は、あなたが思っているものとは異なることを確認する価値があります。私は前にそのようにキャッチされたことを認めて恥ずかしいです。あなたのコードで

+0

+1 "あなたのキャッチブロックで何かをする"。 – extraneon

2

いくつかの問題、私は短い、それをしておこう:あなたは何のエラー管理をやっていないしているので、

はaspecially、この層でのtry/catchでないencapuslateません。 this.specificTopicはグローバルに見えるので、クエリが失敗した場合は、this.specificTopicに格納されているものを返します。

また、BobbyShaftoeが言ったことを試してください。コンソールで印刷するか、デバッガを使用してください。これはあなたに何が間違っているかの良い兆候を与えるはずです。

+0

topicIdは同じクラスのプライベート変数です。 しかし、あなたは、直接トラフデータベースを実行することにスポットを当てています。 – Dmitris

2

私の最初の推測は、Integer.parseInt(num)が例外をスローする可能性があります。その場合は、SQL文が壊れます。

第2に、Makachが指摘しているように、いくつかの問題があります。最初のキャッチオールあなたが

 ....where msg_id = " + topicId; 

ではなく、むしろ

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

編集のように、文字列の連結を使用してはならない

:あなたがとにかくしようとしていたものをthatsのようだが、SO一部の文字で吸います。

+0

私のコードに関するアドバイスをありがとう。 私はこれを正しい方法に変更しました。 – Dmitris

関連する問題