当前位置: 首页 > 知识库问答 >
问题:

准备语句中的IBM DB2标量函数参数

林俊英
2023-03-14

我有一个db2表t1,其中一个列是通过使用一个标量函数填充的,该函数接受两个字符串参数。

function(string foo, string bar)

在准备sql代码时,如下所示:

UPDATE t1 SET col1 = function(?, 'foobar') WHERE t1.id = ?

当我现在向准备好的语句添加一个参数时,我得到一个错误,即第一个参数的类型不正确。

for (Entry entry : entries) {
    preparedStatement.setString(1, entry.getDesc());
    preparedStatement.setInt(2, entry.getId());
}

我已经尝试用单引号包装第一个参数,但没有效果。还有谁有过这个问题并且已经找到了解决办法吗?主要的问题是,我现在确定db2引擎如何为标量函数准备第一个字符串参数,以便首先抛出错误。

共有1个答案

邓建柏
2023-03-14

尝试函数(cast(?as varchar(xxx)),'foobar'),其中xxx为函数的第1个字符串参数的相应长度。在这种情况下,函数的1-st参数必须是varchar数据类型。如果它的1-st参数是另一种数据类型,则使用相应的强制转换和set
您需要这样做,因为可能有多个函数具有相同的名称和参数数,但具有不同的数据类型。并且Db2必须知道在查询编译(prepare)期间确切地使用哪个函数。

 类似资料:
  • Im使用具有2000多个参数标记的构建大型数据库调用。 我收到这个错误 我试着搜索API文档和google,但找不到如何配置它。 有没有人知道是否有可能达到这个限度?我知道这将是一个缓慢的数据库调用,但这是好的现在。 从长远来看,这是否会给我带来任何问题?批量运行是否会更好?

  • 问题内容: 我使用具有2000多个参数标记的大型数据库调用进行构建。 我收到这个错误 我尝试搜索API文档和Google,但是找不到如何配置它。 有谁知道是否有可能提高这个限制?我知道这将是一个缓慢的数据库调用,但是现在还可以。 从长远来看,这还会给我造成任何问题吗,我最好分批运行吗? 问题答案: 接缝处好像停留在2000年。这是驱动程序来源的一部分。 这是一个博客,其中包含有关如何解决该问题的示

  • 我一直在阅读有关SQL注入的文章,并决定修改我的代码以防止SQL注入。 例如,我有一个输入,我将值插入到我的数据库中。最初,我对注射的警惕是这样的: 在我读过的文章中,有人建议应该使用预准备语句。我更改了我的代码并使用了它: 虽然这可以防止SQL注入,但它不会对XSS做任何事情。所以我决定修改(并使用它来防止脚本注入。 现在,我的问题是如何使用预先准备好的语句。我将插入三个项目;艺术家、专辑和歌曲

  • 我在prepare语句和bind_param中有正确的数字(7),所以我不知道为什么会发生这种情况。

  • 问题内容: 我一直在阅读有关SQL注入的文章,并决定修改我的代码以防止SQL注入。 例如,我有一个输入,将值插入到数据库中。最初,我的预防注射措施是: 在我读过的文章中,有人建议应该使用准备好的语句。我已经更改了代码并使用了它: 尽管这可以防止SQL注入,但是它对XSS并没有任何作用。因此,我决定修改(removed )并使用它来防止脚本注入。 现在,我的问题是关于使用准备好的语句。我将插入三个项