首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将动态字符串实现为(准备好的) sql语句?

如何将动态字符串实现为(准备好的) sql语句?
EN

Database Administration用户
提问于 2014-08-26 17:15:28
回答 2查看 2.5K关注 0票数 0

我有一些空间数据集,这些数据集可以在开源元数据目录软件GeoNetwork和PostGIS数据库中获得。问题是创建数据库的学生对相同的数据集使用不同的ID。因此,GeoNetwork中的ID与PostGIS数据库中的ID不同。他们只有相同的名字。

如果有人将新数据集上载到GeoNetwork中,也会将相同的数据集上载到PostGis数据库中。我希望将ID列添加到数据库中,以便给字段提供与GeoNetwork中的ID相同的ID。我认为我只能通过使用文件名来做到这一点,因为在这两种情况下它们是相同的。

我想用以下代码修改eclipse中的表:

代码语言:javascript
复制
  Connection con = null;
            PreparedStatement ps = null;
            final String sqlps = "ALTER TABLE ? ADD COLUMN ?";

            String filen = filename.substring(0, filename.indexOf('.'));
            try {
                con = DriverManager.getConnection("jdbc:postgresql_postGIS://localhost:5433/geonetwork?user=postgres&password=dominik1");
                try {
                    ps = con.prepareStatement(sqlps);
                    ps.setString(1, filen);
                    ps.setString(2, "GN_ID");

                    ps.execute();

但我发现了一个错误:

Exception:org.postgresql.util.PSQLException:错误:语法错误在$1位置: 13

看来Postgres在准备好的语句中与?有问题。有人知道这个问题的解决办法吗?

我也尝试使用一个普通语句,但这给了我一个findbug错误,我试图将一个非常量字符串传递给sql语句上的execute方法。所以我真的不知道怎么解决这个问题。

EN

回答 2

Database Administration用户

发布于 2014-08-27 01:52:40

坏消息是:准备好的陈述不是那样工作的。参数只能是数据,不能是代码或标识符。

好消息是:根本不需要ALTER TABLE语句的参数。

代码语言:javascript
复制
final String sqlps = "ALTER TABLE filen ADD COLUMN gn_id integer";

...
    ps = con.prepareStatement(sqlps);
    ps.execute();
  • 您的列需要数据类型。我因怀疑而加入了integer。之后可能会添加一个NOT NULL约束。
  • 友好的建议:如果你能避免,不要在Postgres中使用大写的列名。使用合法的、小写的、未引用的名称。让你的生活更轻松。
票数 2
EN

Database Administration用户

发布于 2014-08-26 17:46:10

不能将?参数用于标识符。这在数据库品牌中很常见。

使用格式(),如下所示:

text sql = format('ALTER TABLE %I ADD COLUMN %I', table_name, column_name);

%I的意思是标识符。它将在替换%I值时使用标识符规则。

为了增加安全性,您可以使用白名单字符和标识符名,如果它们不传递白名单,则抛出异常。

PostgreSQL将静默地截断超过64个字符的标识符名,因此请记住这一点。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/74990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档