如何参数化包含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的优雅方式,我对此持开放态度.
如何在执行查询时在JDBC中的preparedStatement中设置in子句的值.
例:
connection.prepareStatement("Select * from test where field in (?)");
Run Code Online (Sandbox Code Playgroud)
如果此子句可以包含多个值,我该怎么做.有时我事先知道参数列表,有时我事先不知道.如何处理这种情况?
假设我有一个表单查询
SELECT * FROM MYTABLE WHERE MYCOL in (?)
Run Code Online (Sandbox Code Playgroud)
我想参数化参数.
有没有一种直接的方法在Java中使用JDBC,以一种可以在不修改SQL本身的情况下在多个数据库上工作的方式?
我已经看过了,并且无法找到我正在接受的以下挑战的答案.这似乎很简单但我无法解决它.
我有一个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)
我们非常感谢您给我的任何帮助或指导.
谢谢.
我有一个名单,例如:
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
有2,100个参数的限制可以传递给Sql Server查询,即通过ADO.Net,但.Net开发人员使用的其他常用数据库的记录限制是什么 - 特别是我对以下内容感兴趣:
有人知道吗?
我知道这些方法用于模仿SQL的IN关键字(例如,SELECT * FROM table WHERE id IN VALUES(1, 42, 101)可以完成table.filter(_.id inSet Seq(1, 42, 101))).我不知道这个"绑定"版本是什么或如何选择我应该使用的.
我正在使用预处理语句将一些旧代码移动到新的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也失败了.仅使用逗号分隔的字符串也会失败.
我在谷歌上找不到好的文档,你怎么解决这个问题?
我能够绑定类型的值int,str,bool和null,但我无法绑定数组类型.
我已经试过这两种功能,即bindValue和bindParam,但都没有奏效.我怎么能做到这一点?
// 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) 我确实从这个问题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)
但最终会出现错误的语法错误.
有什么办法吗?