2012-03-08 10 views
1

私はデータベースとJavaプログラムを持っています。テキストフィールドにMockIDが入力され、送信ボタンが押された場合、その入力されたMock IDに従った詳細は、データベースから取得してテキストエリアに表示するように、コードを記述しようとしています。以下は私が書いたコードです。このコードは、私が行った改正後に機能するようになりました。しかし、テキストエリアでは、実際には、与えられたモックIDのレコードからの関連情報は表示されず、テキストのみが表示されます。 誰かに助言してもらえますか?Java MySQL PreparedStatement SELECTステートメント

JButton button = new JButton("Submit"); 
    button.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 


     String mockId = textField.getText();  

     try { 

      String sql = "SELECT MockID, Subject, Year, Date FROM mockexam WHERE MockID =?";  

      PreparedStatement prest = con.prepareStatement(sql); 
      prest.setString(1, mockId); 

      prest.executeQuery(); 
      textArea.append("MockID, Subject, Year, Date"); 
      JOptionPane.showMessageDialog(frmFindMock, "Record has been updated."); 


     } 

     catch (SQLException e) { 
     //System.out.println("Record couldn't be added!"); 
     e.printStackTrace(); 
     JOptionPane.showMessageDialog(frmFindMock, "Record couldn't be updated. Please try again."); 
     } 
     } 

     }); 

    button.setBounds(303, 60, 75, 23); 
    panel_1.add(button); 

答えて

1

?バインド変数プレースホルダです。あなたは1つしか持っていないのですが、どうして4つのものを縛るのですか?

1

あなたPreparedStatementは一つだけvariable..ie MockID

SELECT MockID、件名、年、日付mockexam FROM MockID =?....ので、次の文に

   prest.setString(2, "Subject"); 
       prest.setString(3, "Year"); 
       prest.setString(4, "Date"); 

をされています必須ではありません。

Update for your comments

我々はによって表されているすべての変数に対してsetStringを行う....ここだけMockIdは可変であり、あなたがしたい場合で.....あなたは全体の行を取得することができます「?」 "select *"を使用して...しかし、まだ1つの引数(?で表される)がPreparedStatementにあり、それはあなたのMockIdです。

+0

私は、Mock ID、Subject、Year、DateをTextAreaの結果として表示したいと思います。なぜ私はMockID =を持っていたのですか?なぜなら、ユーザーが入力する特定のMockIDに対して情報を表示する必要があるからです。 – Pita

+0

はい私は知っています... "?"で表されるすべての変数に対してsetStringを実行します....ここではMockIdだけが変数です..... "select * "...しかし、まだ1つの議論しかないでしょう(?)をPreparedStatementに設定してください。これはあなたのMockIdです –

4
 String sql = "SELECT MockID, Subject, Year, Date FROM mockexam WHERE MockID =?";  

     PreparedStatement prest = con.prepareStatement(sql); 
     prest.setString(1, "MockID"); 
     prest.setString(2, "Subject"); 
     prest.setString(3, "Year"); 
     prest.setString(4, "Date"); 

これは問題です。あなたのSQL文字列では、1つの引数(?で示される)のための部屋を作ったが、次にあなたは4を設定しようとした。また、MockID、Subject、Year、Dateをステートメントにハードコードしたので、setStringを使用して(正しく設定しない)理由がありません。

はこれを行う、あなたに答えを表示するには:

ResultSet rs = prest.executeQuery(); 
String result; 
while(rs.next()) { 
    String id = rs.getString("MockID"); 
    String subject = rs.getString("Subject"); 
    String year = rs.getString("Year"); 
    String Date = rs.getString("Date"); 
    result += id + ", " + subject + ", " + year + ", " + date + "\n"; 
} 
textarea.append(result); 
+0

私は、Mock ID、Subject、Year、DateをTextAreaの結果として表示したいと思います。なぜ私はMockID =を持っていたのですか?なぜなら、ユーザーが入力する特定のMockIDに対して情報を表示する必要があるからです。 – Pita

+0

例: 'String sql =" SELECT MockID、Subject、Year、Date FROM mockexam WHERE MockID =? "; PreparedStatement perst = con.prepareStatement(sql); prest.setString(1、 "1"); ' ' MockID = 1 'のエントリのデータベースから 'COLUMNS' MockID、Subject、Year、Dateを選択します。 – twain249

+0

あなたは何を意味しているのか分かります。私はあなたが意味するものを理解していることを知っているので、コードを試して修正します:) – Pita

0

「日付」列名のために良い選択ではありません。私が知っているすべてのデータベースの予約語です。ユーザーにとってはあまり有益ではありません。誕生日?死の日?注文日?どういう意味ですか?

「EXAM_DATE」などに変更して、それが役立つかどうかを確認します。

0
String sql = "SELECT MockID, Subject, Year, Date FROM mockexam WHERE MockID =?";  

この文を準備するときには、それぞれ「?」の値を指定するとします。 ここでは、一つだけを持っていますが、上で後でそれらの4を定義します。

PreparedStatement prest = con.prepareStatement(sql); 
    prest.setString(1, "MockID"); 
    prest.setString(2, "Subject"); 
    prest.setString(3, "Year"); 
    prest.setString(4, "Date"); 

そして、あなたの接続、ステートメントとメモリリークを避けるために、設定可能な結果を​​閉じることを忘れないでください。

+0

私は擬似ID、件名、年、日付をTextAreaの結果として表示したいと思います。なぜ私はMockID =を持っていたのですか?なぜなら、ユーザーが入力する特定のMockIDに対して情報を表示する必要があるからです。 – Pita

関連する問題