“com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unknown 'where子句'中的列'Smith'。“
我有一个名为“aspirante”的数据库,它有一个名为“datos”的表(我已填充它)。在这里,我向您展示我是如何创建表格的:
CREATE TABLE `datos` (
`id_asp` int(11) NOT NULL AUTO_INCREMENT,
`ficha` mediumint(4) NOT NULL,
`apellido1` varchar(30) NOT NULL,
`apellido2` varchar(30) NOT NULL,
`nombre` varchar(50) NOT NULL,
`genero` char(1) NOT NULL,
`telefono1` varchar(20) NOT NULL,
`telefono2` varchar(20) NOT NULL,
`carrera` varchar(50) NOT NULL,
`promedio_sec` varchar(5) NOT NULL,
PRIMARY KEY (`id_asp`)
)
方法如下所示。
void BuscarAspiranteEditar(String id) {
String sSQL = "";
String ap1 = "", ap2 = "", nom = "", gen = "", tel1 = "", tel2 = "", car = "", prom = "";
ConexionMySQL mysql = new ConexionMySQL();
Connection cn = mysql.Conectar();
sSQL = "SELECT id_asp, ficha, apellido1, apellido2, nombre, genero, telefono1, telefono2, promedio_sec FROM datos " +
"WHERE id_asp = "+id;
try {
Statement st = cn.createStatement();
ResultSet rs = st.executeQuery(sSQL);
while (rs.next()) {
ap1 = rs.getString("apellido1");
ap2 = rs.getString("apellido2");
nom = rs.getString("nombre");
gen = rs.getString("genero");
tel1 = rs.getString("telefono1");
tel2 = rs.getString("telefono2");
car = rs.getString("carrera");
prom = rs.getString("promedio_sec");
id_actualizar = id;
}
txtPrimerApellido.setText(ap1);
txtSegundoApellido.setText(ap2);
txtNombre.setText(nom);
txtPrimerTelefono.setText(tel1);
txtSegundoTelefono.setText(tel2);
txtCarrera.setText(car);
txtPromedio.setText(prom);
}
catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex);
}
}
我不是Java,所以我希望你能帮助我们,我很感激。提前谢谢!
答案 0 :(得分:3)
传递参数id
的方法在哪里?如果您的id
是字符串,则必须在'id'
Where id_asp='"+ id +"'"
括起来
答案 1 :(得分:2)
所以看起来你的问题是你传递的where子句不正确的id。您传递的是姓氏“Smith”而不是asp id。
作为关于使用SQL编程的注释,为了安全起见,你真的应该使用mysql“?”编写查询。这允许mysql在需要时输入适当的引号,并检查sql注入。
sSQL = "SELECT id_asp, ficha, apellido1, apellido2, nombre, genero, telefono1, telefono2, promedio_sec FROM datos WHERE id_asp = ?";
PreparedStatement ps = connection.prepareStatement(sSQL);
ps.setObject(1, my_id);
ResultSet rs = ps.executeQuery();
它更安全一点,你可以直接传入变量而不需要知道需要用引号等包装的内容。