【问题标题】:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'Smith' in 'where clause'com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:“where 子句”中的未知列“Smith”
【发布时间】:2013-05-02 01:22:54
【问题描述】:

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

"com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 未知 “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,所以我希望你们能帮助我,我将不胜感激。提前致谢!

【问题讨论】:

  • ID的值是多少?
  • 您似乎正在将一个字符串值传递给应该是整数值的 ID 字段。
  • 查找SQL注入。在 SQL 查询中直接使用用户的输入是非常非常糟糕的做法。

标签: java mysql syntax


【解决方案1】:

传递参数id 的方法在哪里?如果你的 id 是一个字符串,你必须用引号将它括起来 'id' 在像 Where id_asp='"+ id +"'"

【讨论】:

  • +1 我认为您是对的:我认为用户输入了“smith”而不是数字。这是我能想到的唯一解释。
【解决方案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();

这样更安全一些,你可以直接传入变量而不用知道需要用引号等包裹什么。

【讨论】:

    猜你喜欢
    • 2015-11-11
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2011-12-15
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    相关资源
    最近更新 更多