【问题标题】:JDBC PreparedStatement strange behaviour [duplicate]JDBC PreparedStatement 奇怪的行为[重复]
【发布时间】:2015-10-21 11:56:57
【问题描述】:

我有以下简单的代码来连接并使用准备好的语句查询数据库(仅用于学习目的)。

import java.sql.*;

public class Prepared {

  public static void main(String[] args) throws SQLException,Exception {
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/customerdb","myuser","luca01123581321");
    String query="SELECT id,? FROM person WHERE id>=?";
    PreparedStatement prep=conn.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
    prep.setString(1,"name");
    prep.setInt(2,2);
    prep.executeQuery();
    ResultSet res=prep.getResultSet();
    ResultSetMetaData rsmd=res.getMetaData();
    System.out.println("number of columns: "+rsmd.getColumnCount());
    while (res.next()) {
      int id=res.getInt(1);
      String name=res.getString(2);
      System.out.println(name);
    }
  }

}

当我执行查询并尝试打印我得到的结果时:

number of columns:2
name
name
name
name

换句话说,我想检索 SQL 类型 VARCHAR 的第二列(即“名称”)中的值。但我没有得到所有记录的“名称”……这是怎么回事?

【问题讨论】:

    标签: java mysql sql jdbc


    【解决方案1】:

    您不能参数化结果列的名称。假设您的 id 为 2,那么您实际上是在执行此语句:

    SELECT id,'name' FROM person WHERE id>=2
    

    这可行:

    String column = "name";
    ...
    String query="SELECT id," + column+ " FROM person WHERE id>=?";
    ...
    prep.setInt(1,2);  // only one parameter
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-28
      • 2015-07-26
      • 2020-04-26
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多