java - JDBC PreparedStatement 奇怪的行为

标签 java mysql sql jdbc

<分区>

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

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 的第二列(即“名称”)中的值。但是我没有获取所有记录的“名称”值……怎么样?

最佳答案

您不能参数化结果列的名称。假设你的 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

关于java - JDBC PreparedStatement 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33258680/

相关文章:

java - 优化多个 Java 数组添加

mysql - 为 :- i used query ? 数据来自多个表编写正确的 SQL 查询

mysql - 同一张表上的多个联接

php - 根据从用户收到的输入更新数据库字段

mysql - 如何在SSRS中的特定行集中对sql查询结果表进行分区

java - 正斜杠还是反斜杠?

java - 如何在折线图中设置左右 y 轴的填充

java - Spring MVC @ResponseBody 返回一个列表

php - 使用 db 进行页面翻译

php - 我们可以通过php向sphinx添加where子句中的条件吗?