无法将JTable数据库中的数据提取到JTextField

时间:2017-08-28 07:00:03

标签: java mysql jdbc

我的Jtable已连接到我创建的数据库,以便它可以在我的GUI中显示所有数据。但我试图从我的JTable获取数据到JTextField。就像当您单击表中的行时,表中的数据库中的数据将转到TextField。但是当我点击表格时,它会显示如下错误:

  

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你有一个   SQL语法错误;查看与您的手册相对应的手册   MariaDB服务器版本,用于在'NO。='1附近使用正确的语法   RASCHEL“在第1行

我一直在寻找答案,但我找不到答案。请帮帮我,自周五以来我一直坚持这个错误。

table = new JTable();
scrollPane.setViewportView(table);
table.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent arg0) {
        int row = table.getSelectedRow();
        String table_click = (table.getModel().getValueAt(row, 0).toString());
        try {
            String query = "SELECT * FROM `raschel` where MACHINE NO.='" + table_click + "'";
            Connection con;
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
            PreparedStatement ps = con.prepareStatement(query);
            ResultSet rs = ps.executeQuery();

            if (rs.next()) {
                String machine = rs.getString("MACHINE NO.");
                String type = rs.getString("TYPE");
                String product = rs.getString("PRODUCT");
                txtMachine.setText(machine);
                txtType.setText(type);
                txtProd.setText(product);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }
});

3 个答案:

答案 0 :(得分:3)

您正在使用的列MACHINE NO.最后包含一个空格和一个点,以便使用相同的名称,您必须将名称放在两个之间:

`MACHINE NO.`

所以你的查询应该是这样的:

String query = "SELECT * FROM `raschel` where `MACHINE NO.`='" + table_click + "'";

但是这仍然不安全再次出现语法错误或SQL注入,所以你可以使用:

String query = "SELECT * FROM `raschel` where `MACHINE NO.` = ?";
Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root","");
PreparedStatement ps = con.prepareStatement(query);
ps.setString(1, table_click);//<<-----------set the parameter like this
ResultSet rs = ps.executeQuery();

答案 1 :(得分:0)

在列名中使用空格和点。如果必须使用空白和点,则必须使用反引号转义列名:

String query = "SELECT * FROM `raschel` where `MACHINE NO.`='"+table_click+"'";

但我强烈建议不要在列名或表名中使用空格和圆点(或其他特殊字符)。

String query = "SELECT * FROM `raschel` where MACHINENO='"+table_click+"'";

还要更改为准备好的语句以防止SQL注入

答案 2 :(得分:0)

在您的

上试试
String query = "SELECT * FROM `raschel` where `MACHINE NO.`='"+table_click+"'";