0

以下のコードを実行しようとしていますが、実行するたびに機能しません。誰かが私が間違っていることを強調してもらえますか?

コードが行うべきことは次のとおりです。

rと呼ばれるデータベースとsaと呼ばれる別のデータベースにテーブルを作成する必要があります。テーブルrには、外部キーと呼ばれる列が含まれています。私のJavaフロントエンドでは、jpanelにJtableがあり、別のjpanelに更新ボタンがあります。ユーザーが jtable 内の行を選択し、[更新] をクリックしたとき。jtable r で選択された行が外部キーとして sa id を持っている場合、ツールはテキスト ボックスに r からのデータと sa からのデータを表示します。

コード

               if(updateClicked == true){
                btnSubmit.setVisible(false);        
                btnUpdate.setVisible(true);
                btnNew.setEnabled(false);
                Statement st;
                PreparedStatement ps;

                ResultSet rs;   
                try {
                    String rid = table.getValue(0);
                    JOptionPane.showMessageDialog(null, rid);
                    String rq ="SELECT * FROM  `r` WHERE  'r_id`=' "+rid+"'";
                    ps = Login.con.prepareStatement(rq);
                    rs = ps.executeQuery();
                    String saID = rs.getString(2);

                    String q = "SELECT sa.Argument FROM sa, r WHERE r.sid ="+sID  ; 
                    st = Login.con.createStatement();
                    rs = st.executeQuery(q);

                    String argu = rs.getString(1);
                    System.out.println(argu);

                    if (argu.isEmpty()==false){
                        btnAddSA.doClick();
                        txtaArg.setText(argu);

                    }

                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                }

コンソール出力

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 'where 句' の列 'R0004' が不明です

4

1 に答える 1

1

まず、テーブルに適切な名前を付けます。「r」と「sa」は何の意味もありません。

SQL の何が問題なのかはわかりませんが、PreparedStatement を使用することをお勧めします。SQL のコーディングが容易になるため、区切り文字のタイプの間違いを心配する必要がありません。

基本的な例は次のとおりです。

String sql = "INSERT INTO Page (Name, Title) VALUES (?, ?)";

PreparedStatement stmt = connection.prepareStatement(sql);

stmt.setString( 1, "Name1" );
stmt.setString( 2, "Title1" );
stmt.executeUpdate();

詳細については、フォーラムまたは Web を検索できます。

于 2013-03-30T00:15:15.827 に答える