在JTextfield中显示来自两个不同mysql表的数据

时间:2019-06-11 18:05:38

标签: java sql netbeans

为大家(初学者)加油!

我目前正在使用Java应用程序来跟踪仓库中的库存。完成之前,所有操作都在localhost上。我在MySQL数据库中创建了两个表:一个表显示商品代码,位置和数量(VOORRAADSYSTEEM);另一个表显示商品代码,位置和数量。另一个表显示文章代码和描述(STAMDATA)。

在我的GUI中,我有一个JTable可以从VOORRAADSYSTEEM加载数据,并且在mouseclickevent(getSelectedRow)上显示相应JTextFields中的数据(到目前为止很好)。没有显示的唯一字段是描述字段(应从STAMDATA表中读取)。

我尝试为程序的这一特定部分创建方法。该方法使用对第一个表的内部联接对第二个表运行查询。这是下面的代码。

 private void LoadDescription() {
        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ABEL?zeroDateTimeBehavior=convertToNull", "root", "");
            String sql = "SELECT DESCRIPTION FROM VOORRAADSYSTEEM JOIN STAMDATA ON ARTICLECODE = ARTICLENUMBER WHERE ARTICLECODE="+jComboBox1.getSelectedItem();
            pst = conn.prepareStatement(sql);
            rs = pst.executeQuery();
            pst.setString(2, sql);
            descriptionTxt.setText(rs.getString(sql));
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }

此刻,我不确定如何解决此问题。我还将尝试使用外键。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

有更好的方法来处理您想做的事情。例如,通过将表联接到公共列(ARTICLENUMBER和ARTICLECODE)上并显示它,您可以通过一个查询获得所需的所有信息。

现在看起来/听起来像您可能正在尝试通过两个查询来获取所有信息。

但是,您的负载描述方法存在一些错误:

private void LoadDescription() {
    try {
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ABEL?zeroDateTimeBehavior=convertToNull", "root", "");
        String sql = "SELECT DESCRIPTION FROM VOORRAADSYSTEEM JOIN STAMDATA ON ARTICLECODE = ARTICLENUMBER WHERE ARTICLECODE="+jComboBox1.getSelectedItem();
        ResultSet results = conn.createStatment().executeQuery(sql);

        if(results.next()) //make sure something was returned to avoid null pointer exception
            descriptionTxt.setText(rs.getString("DESCRIPTION"));
        else
            JOptionPane.showMessageDialog(null, "no results returned");
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }
}

这应该对您更好一点。