[英]How to add a string variable to a SQL query on a jdbc firebird connection
[英]How to add String variable to SQL query - Java, SpringBoot
我有一个看起来像这样的 SQL 查询:
public void getUser(String userId, String dbName) {
String q = "CREATE TEMPORARY TABLE \"TEST_DATABASE\".\"PUBLIC\".\"USER_TABLE_TEMP\" AS SELECT \"USERID\", \"FIRSTNAME\", \"LASTNAME\" from \"TEST_DATABASE\".\"PUBLIC\".\"USER\"";
jdbcTemplatePerBrand.values().forEach(tab -> tab.query(q, s -> {}));
}
我试图将自定义dbName
传递给查询,我尝试过这样的事情:
public void getUser(String userId, String dbName) {
String q = "CREATE TEMPORARY TABLE \"?\".\"PUBLIC\".\"USER_TABLE_TEMP\" AS SELECT \"USERID\", \"FIRSTNAME\", \"LASTNAME\" from \"?\".\"PUBLIC\".\"USER\"";
jdbcTemplatePerBrand.values().forEach(tab -> tab.query(q, s -> {}, dbName));
}
我收到以下错误:
Database '"?"' does not exist or not authorized.
尝试以下方法。
String q = "CREATE TEMPORARY TABLE "+ dbName +".\"PUBLIC\".\"USER_TABLE_TEMP\" AS SELECT \"USERID\", \"FIRSTNAME\", \"LASTNAME\" from \"?\".\"PUBLIC\".\"USER\"";
我的问题的解决方案是将变量作为+dbName+
到我的查询中。
困扰我的是" "
,我不知道如何处理。
我正在使用 Snowflake,我的数据库名称写在" "
。
所以解决方案是我这样做:
public void getUser(String userId, String dbName) {
String q = "CREATE TEMPORARY TABLE \""+dbName+"\".\"PUBLIC\".\"USER_TABLE_TEMP\" AS SELECT \"USERID\",
\"FIRSTNAME\", \"LASTNAME\" from \"TEST_DATABASE\".\"PUBLIC\".\"USER\"";
jdbcTemplatePerBrand.values().forEach(tab -> tab.query(q, s -> {}));
}
所以我从中学到的是,如果您想向查询添加变量,请使用+variableName+
但要始终注意您的数据库名称在您使用的数据库中的写入方式。
另外,另一个注意
例如,我正在用 Java 代码编写对 Snowflake 的查询。
对于我想放在语句中的变量,例如:
CREATE TABLE +tableName+
我确实使用+tableName+
方法
但是当我想将它添加到我的WHERE
语句中时,我使用的是?
标志。
String qu = "CREATE TEMPORARY TABLE \""+dbName+"\".\"PUBLIC\".\"USER_TABLE_TEMP\" AS SELECT \"ID\", \"FIRST_NAME\", \"LAST_NAME\" from \""+dbName+"\".\"PUBLIC\".\"USER_TABLE\"\n" +
" where \"ID\" = ?\n" +
" union all\n" +
" select \"ID\",\"ACCOUNT_NAME\", \"ACCOUNT_NUMBER\" from \""+dbName+"\".\"PUBLIC\".\"ACCOUNT_DATA\"\n" +
" where \"ID\" = ?";*/
因此,找出适合您的数据库的方法并使用它:)
这是雪花/Java 示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.