在单击按钮时选择行时从多个表中获取数据

时间:2013-03-30 00:10:39

标签: java swing jdbc jtable

我尝试运行下面的代码,但每次运行它时都无效。任何人都可以强调我做错了吗?

代码应该做的是:

我必须将数据库中的表称为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'

1 个答案:

答案 0 :(得分: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();

您可以在论坛或网站上搜索更多信息。