我的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);
}
}
});
答案 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+"'";