com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'where子句'中的未知列'Smith'

时间:2013-05-02 01:22:54

标签: java mysql syntax

希望你能帮助我。我收到了错误

  

“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,所以我希望你能帮助我们,我很感激。提前谢谢!

2 个答案:

答案 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();

它更安全一点,你可以直接传入变量而不需要知道需要用引号等包装的内容。