java - JDBI中如何动态绑定(bind)一个表名

标签 java mysql sql database jdbi

我试过用

SELECT COUNT(*) FROM :TableName;

在 JDBI 中我使用了

.bind("Tablename", "MyTable")

结果总是在单引号内:

SELECT COUNT(*) FROM 'MyTable';

有没有合适的方法来参数化像 TableName 这样的东西?

最佳答案

bind 不适用于标识符,而是值。 Table 是一个数据库对象,它的名字是引用它的标识符。

因此您必须显式构造 sql 查询字符串以动态包含表名。

示例:

String tableName = "employee";
String sql = "SELECT COUNT(*) FROM " + tableName;

然后,如果您想根据字段值或表达式过滤计数或任何其他结果,您可以绑定(bind)它。

示例:

sql = sql + " WHERE deptno = :deptNoToBind";
int deptNo = 20;
// ... use db handle to bind
handle.createQuery( sql )
      .bind( "deptNoToBind", deptNo );

您可以看到列或表达式的值是绑定(bind)的,但不是标识符。

您正在寻找的功能是@Define - 这是它的用法示例:

import org.skife.jdbi.v2.sqlobject.customizers.Define;
...
@SqlUpdate("create table if not exists <table> (" +
        "startTime TimeStamp not null," +
        "stopTime TimeStamp not null," +
        "uuid varchar(255)" +
        ")")
public void createTable(@Define("table") String table);

关于java - JDBI中如何动态绑定(bind)一个表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23622183/

相关文章:

java - 从 PDF 中解析对象,具有字节流的对象由于某种原因被忽略?

java - java Math 包中 0.555 的舍入模式不起作用

java - 在编译时禁用 Java 日志记录

sql - 在 MySQL 表中显示单个排名

mysql - 搜索方括号内的文本和语音标记 SQL

java - 数据库行上的锁的范围(简单)

MYSQL 在同一个表上使用 Group By Clauses 进行子查询...

java - 认证失败异常

mysql - MySQL 中的 UNION ALL 和 LIMIT

php - 为什么 Laravel 中不保存表单数据?