【问题标题】:Cant fetch the data from JTable database to JTextField无法从 JTable 数据库中获取数据到 JTextField
【发布时间】:2018-02-05 09:22:14
【问题描述】:

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

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你有一个 SQL 语法错误;检查与您对应的手册 MariaDB 服务器版本,用于在 'NO.='1 附近使用正确的语法 拉舍尔”在第 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);
        }
    }
});

【问题讨论】:

    标签: java mysql jdbc


    【解决方案1】:

    您正在使用的列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();
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      还要改成prepared statements来防止SQL注入

      【讨论】:

      • 天哪。谢谢!这行得通。由于我的沮丧,我没有看到那个错误。再次感谢您的回答。 :)
      • 我不能投票,因为我的声誉是 0。我是新来的。 :(
      【解决方案3】:

      在你的身上试试这个

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

      【讨论】:

        猜你喜欢
        • 2012-10-04
        • 2012-09-26
        • 1970-01-01
        • 2016-12-08
        • 1970-01-01
        • 1970-01-01
        • 2014-09-17
        • 2017-09-21
        相关资源
        最近更新 更多