相关疑难解决方法(0)

参数化SQL IN子句

如何参数化包含IN具有可变数量参数的子句的查询,比如这个?

SELECT * FROM Tags 
WHERE Name IN ('ruby','rails','scruffy','rubyonrails')
ORDER BY Count DESC
Run Code Online (Sandbox Code Playgroud)

在此查询中,参数的数量可以是1到5之间的任何值.

我不希望为此(或XML)使用专用存储过程,但如果有一些特定于SQL Server 2008的优雅方式,我对此持开放态度.

sql sql-server parameters

1020
推荐指数
29
解决办法
33万
查看次数

带有IN子句中参数列表的PreparedStatement

如何在执行查询时在JDBC中的preparedStatement中设置in子句的值.

例:

connection.prepareStatement("Select * from test where field in (?)");
Run Code Online (Sandbox Code Playgroud)

如果此子句可以包含多个值,我该怎么做.有时我事先知道参数列表,有时我事先不知道.如何处理这种情况?

java jdbc prepared-statement in-clause

84
推荐指数
6
解决办法
23万
查看次数

使用JDBC参数化IN子句的最佳方法是什么?

假设我有一个表单查询

SELECT * FROM MYTABLE WHERE MYCOL in (?)
Run Code Online (Sandbox Code Playgroud)

我想参数化参数.

有没有一种直接的方法在Java中使用JDBC,以一种可以在不修改SQL本身的情况下在多个数据库上工作的方式?

我发现的最接近的问题与C#有关,我想知道Java/JDBC是否有不同之处.

java sql jdbc in-clause

37
推荐指数
4
解决办法
6万
查看次数

如何使用arraylist作为预准备语句参数

我已经看过了,并且无法找到我正在接受的以下挑战的答案.这似乎很简单但我无法解决它.

我有一个ArrayList类型为Long- > 的记录ID ArrayList<Long>.我想使用此记录ID列表来从另​​一个表中选择行.到现在为止还挺好.现在迎接挑战......

a)我正在使用预准备语句,使用ArrayListas输入从表中选择数据.

selectPS = dbConnection.prepareStatement("select columnA from tableA where id in ?");
Run Code Online (Sandbox Code Playgroud)

关于上述问题 - 如何定义参数?以上对于ArrayList类型参数似乎不正确.

b)在为预准备语句设置参数值时,我也遇到了问题.没有设置ArrayList类型值的方法,我看不到其他可行的选项.

---> selectPS.set?????(1, arraylistParameter);
     ResultSet rs = selectPS.executeQuery(); 
Run Code Online (Sandbox Code Playgroud)

我们非常感谢您给我的任何帮助或指导.

谢谢.

java arraylist prepared-statement

30
推荐指数
2
解决办法
9万
查看次数

如何在准备好的语句中设置参数列表?

我有一个名单,例如:

List<String> names = ...
names.add('charles');
...
Run Code Online (Sandbox Code Playgroud)

并声明:

PreparedStatement stmt = 
  conn.prepareStatement('select * from person where name in ( ? )');
Run Code Online (Sandbox Code Playgroud)

如何做到以下几点:

stmt.setParameterList(1,names);
Run Code Online (Sandbox Code Playgroud)

有解决方法吗?谁能解释为什么这种方法丢失了?

使用:java,postgresql,jdbc3

java postgresql jdbc prepared-statement

28
推荐指数
2
解决办法
9万
查看次数

每个数据库提供程序类型的最大允许参数数是多少?

有2,100个参数的限制可以传递给Sql Server查询,即通过ADO.Net,但.Net开发人员使用的其他常用数据库的记录限制是什么 - 特别是我对以下内容感兴趣:

  • Oracle 10g/11g
  • MySQL的
  • PostgreSQL的
  • 源码

有人知道吗?

mysql sql-server sqlite oracle postgresql

18
推荐指数
4
解决办法
1万
查看次数

Slick中的inSet和inSetBind有什么区别

函数ScalaDoc尚未填写.

我知道这些方法用于模仿SQL的IN关键字(例如,SELECT * FROM table WHERE id IN VALUES(1, 42, 101)可以完成table.filter(_.id inSet Seq(1, 42, 101))).我不知道这个"绑定"版本是什么或如何选择我应该使用的.

scala slick

17
推荐指数
1
解决办法
7152
查看次数

如何在mysqli预处理语句中使用IN子句

我正在使用预处理语句将一些旧代码移动到新的msqli接口,我在使用包含IN子句的SQL语句时遇到问题.我通常会这样做:

$ids = '123,535,345,567,878'
$sql = "SELECT * FROM table WHERE id IN ($ids)";
$res = mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)

将其转换为mysqli和预处理语句我尝试了许多解决方案:

$ids = '123,535,345,567,878'
$ids = implode($ids,',');
$result = $msqli->prepare("SELECT foo,blar FROM table WHERE id IN (?));
$result->bind_param("i", $ids);
$result->execute();
Run Code Online (Sandbox Code Playgroud)

上面的操作失败并计算了数组中的元素数量并改变了SQL字符串中的问号数量,并且对数组中的每个元素调用bind_parm也失败了.仅使用逗号分隔的字符串也会失败.

我在谷歌上找不到好的文档,你怎么解决这个问题?

php mysqli sql-in

13
推荐指数
2
解决办法
1万
查看次数

PHP - 如何在预准备语句中将数组替换为主机参数

我能够绑定类型的值int,str,boolnull,但我无法绑定数组类型.
我已经试过这两种功能,即bindValuebindParam,但都没有奏效.我怎么能做到这一点?

// a helper function to map Sqlite data type
function getArgType($arg) {
    switch (gettype($arg)) {
        case 'double':  return SQLITE3_FLOAT;
        case 'integer': return SQLITE3_INTEGER;
        case 'boolean': return SQLITE3_INTEGER;
        case 'NULL':    return SQLITE3_NULL;
        case 'string':  return SQLITE3_TEXT;
        default:
            throw new \InvalidArgumentException('Argument is of invalid type '.gettype($arg));
    }
}

$sql = "SELECT * FROM table_name WHERE id IN (?)";
$params = [[10, 9, 6]]; // array of array
$dbpath …
Run Code Online (Sandbox Code Playgroud)

php sql sqlite

7
推荐指数
1
解决办法
734
查看次数

在IN子句中包含数千个参数的PreparedStatement

我确实从这个问题PreparedStatement IN子句替代品中读到了解决方案吗?.但就我而言,我在一个In子句中有大约5000个参数,它会导致java.sql.SQLException:Prepared或callable语句有超过2000个参数标记.

我正在使用SQL之类的

String sql = "select * from project in " + projectIds.toString() 
Run Code Online (Sandbox Code Playgroud)

projectIds是一个StringBuilder,就像"(1,2,3,4 ....)"但代码安全报告说它可能会导致sql注入.所以我必须使用?占位符以避免它.

我试着用

String sql = "select * from project where charindex(','+convert(varchar(max),id)+',', ?)>0";
statement.setString(1,projectIds.toString);//projectIds like ",1,2,3,4,"..
Run Code Online (Sandbox Code Playgroud)

但最终会出现错误的语法错误.

有什么办法吗?

java sql sql-server sql-server-2005 jdbc

6
推荐指数
1
解决办法
5044
查看次数