java - 选择查询中的 JDBCPreparedStatement 和参数 (?)

标签 java oracle parameters prepared-statement

我与 Oracle 数据库的连接如下:

String selectSQL = "SELECT ?,supplier_name FROM supplier WHERE supplier_id = ?";
        PreparedStatement preparedStatement = con.prepareStatement(selectSQL);
        preparedStatement.setString(1, "supplier_id");
        preparedStatement.setInt(2, 1);
        ResultSet rs2 = preparedStatement.executeQuery();

        while (rs2.next()) {
            String userid = rs2.getString(1);
            String username = rs2.getString(2);
            System.out.println(userid);
            System.out.println(username);
        }
        con.close();
    };

问题是第二个参数按照我想要的方式传递,这意味着

supplier_id = 1

但是我对第一个参数有疑问。每次只传递字符串,所以我的查询看起来像

select "supplier_id", supplier_name FROM supplier WHERE supplier_id = ?

而不是

select supplier_id, supplier_name FROM supplier WHERE supplier_id = ?

因此,我没有从表中获取对应供应商 ID 的值,而是获取字符串“supplier_id”。 我究竟做错了什么?我应该改变什么来获取值而不是字符串?

最佳答案

无法以这种方式创建动态查询,您必须使用普通的字符串操作。参数只能用于值,如字符串、数字等,不能用于名称。

在你的情况下,可以做类似的事情

String sqlTemplate = "SELECT <id_column>,supplier_name FROM supplier WHERE supplier_id = ?";
String selectSQL = sqlTemplate.replace("<id_column>", "supplier_id");

关于java - 选择查询中的 JDBCPreparedStatement 和参数 (?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46016011/

相关文章:

java - EclipseLink 对实体 "setter"方法的多次调用

java - 如何在 Java 中维护唯一列表?

amazon-web-services - 如何在 Cloudformation Yaml 文件上获取最新版本的 SSM 参数

parameters - 在Lua中使用arg作为参数名称有副作用吗?

java - 如何在android中创建三角形

java - 用 Java 捕获扬声器输出

php - 原子选择和更新

php - Oracle OCI8 扩展未在 php 7.4 中加载

sql - ORA-00904 "Invalid identifier” 用于 group by 子句中的标识符

symfony - 从命令类访问参数