mysql sql语句 gt lt_如何传递ArrayList<>作为MySQL中SQL查询的IN子句

bd96500e110b49cbb3cd949968f18be7.png

I am using mySQL JDBC driver in my java program. I want to pass a ArrayList in the IN clause in my SQL query.

i did use a prepared statement like this, but this throws an

"java.sql.SQLFeatureNotSupportedException"exception

since mysql doesn't support this.

ArrayList list = new ArrayList();

PreparedStatement pstmt =

conn.prepareStatement("select * from employee where id in (?)");

Array array = conn.createArrayOf("VARCHAR", list.toArray());

pstmt.setArray(1, array);

ResultSet rs = pstmt.executeQuery();

Is there any other way to do this ? Maybe with Statement stmt.

解决方案

Build the SQL statement with the correct number of markers, and set all the values.

Beware: Databases have a limit to the number of parameters allowed, though it's very high for MySQL (65535).

char[] markers = new char[list.size() * 2 - 1];

for (int i = 0; i < markers.length; i++)

markers[i] = (i & 1 == 0 ? '?' : ',');

String sql = "select * from employee where id in (" + markers + ")";

try (PreparedStatement stmt = conn.prepareStatement(sql)) {

int idx = 1;

for (String value : list)

stmt.setString(idx++, value);

try (ResultSet rs = stmt.executeQuery()) {

while (rs.next()) {

// code here

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值