查询Java

时间:2016-07-27 21:34:00

标签: java mysql jdbc

我使用MySQL时遇到了这个问题。

PreparedStatement paisyprovincia_BBDD = bd.prepareStatement("SELECT id=? FROM tabla=? WHERE ? = ?");

paisyprovincia_BBDD.setString(1, "id");
paisyprovincia_BBDD.setString(2, "pais");
paisyprovincia_BBDD.setString(3, "paisnombre");
paisyprovincia_BBDD.setString(4,country.getSelectionModel().getSelectedItem().toString());

返回此错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在''pais'附近使用正确的语法WHERE'paisnombre'='澳大利亚''在第1行

问题在哪里?谢谢你的回答

2 个答案:

答案 0 :(得分:3)

你只需要

PreparedStatement paisyprovincia_BBDD = bd.prepareStatement("SELECT id FROM pais WHERE paisnombre = ?");    
paisyprovincia_BBDD.setString(1,country.getSelectionModel().getSelectedItem().toString());

如果要将变量用于列的名称,可以在“Java级别”而不是“SQL级别”执行此操作。这里的要点是JDBC驱动程序将(可能)预编译您提供的SQL并重用已编译的本机数据库查询;如果列名称将更改,则无法执行此操作。所以你可以这样做:

private List<String> getValuesFromDB(String columnName) {

    String sql = String.format("SELECT %s FROM pais WHERE paisnombre = ?", columnName);

    PreparedStatement paisyprovincia_BBDD = bd.prepareStatement(sql);    
    paisyprovincia_BBDD.setString(1,country.getSelectionModel().getSelectedItem().toString());

    // execute etc...
}

答案 1 :(得分:1)

将此作为您的SQL语句使用:

bd.prepareStatement("SELECT id FROM pais WHERE paisnombre = ?");
paisyprovincia_BBDD.setString(1, country.getSelectionModel().getSelectedItem().toString());