2017-08-28 85 views
0

我的Jtable已连接到我创建的数据库,因此它可以在我的GUI中显示所有数据。但我试图从我的JTable的数据获取到JTextField。就像当你点击表格的行时,表格中的数据将进入TextField。但是,当我点击表它显示了这样的错误:无法将数据从JTable数据库提取到JTextField

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); 
     } 
    } 
}); 

回答

0

您在列名要高度重视使用空格和点。如果你必须使用空白和斑点,你必须逃离列带倒推的名称:

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

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

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

也更改为准备语句以防止SQL注入

+0

天啊。谢谢!这工作。由于我的挫折,我没有看到这个错误。再次感谢answe。 :) –

+0

@JeffRolanGoyalYñota不客气 – Jens

+0

我不能upvote,因为我的声誉是0. Im new here。 :( –

0

试试这个在您的

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

您使用MACHINE NO.列包含一个空格,最后与工作点状名称你必须把名称在两个之间:

`MACHINE NO.` 

所以你的q uery应该是这样的:

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

但是,这仍然不是安全的agains语法错误或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();