java替换特殊字符?在包含列表中特定元素的字符串中
我有一个字符串,它是一个insert语句,在这里我需要替换特殊字符?从列表中删除特定元素。 查询字符串为
insert into OPRS_VEHICLE(VEHICLE_ID, DEPOT_ID, SERVICE_TYPE_ID, REGISTRATION_KEY,
REGISTRATION_NO, IS_ACTIVE,CREATED_BY, CREATED_DATE,
MODIFIED_BY, MODIFIED_DATE) values(?,?,?,?,?,?,?,?,?,?)
现在我需要更换每一个吗?具有包含值的列表中特定元素的字符
我试过这个
int index = query.indexOf("?");
for (int j = 0; j < list.size(); j++) {
formattedQuery = query.replace(query.substring(index, index+1),
list.get(j).toString());
}
我需要换新的吗?与列表中的相应值匹配
编辑
try{
conn.setAutoCommit(false);
if(query != null){
ps = conn.prepareStatement(query);
for (int i = 0; i < myCollection.size(); i++) {
List list = (List) myCollection.get(i);
int count = 1;
for (int j = 0; j < list.size(); j++) {
if(list.get(j) instanceof Timestamp) {
ps.setTimestamp(count, (Timestamp) list.get(j));
} else if(list.get(j) instanceof java.lang.Character) {
ps.setString(count, String.valueOf(list.get(j)));
}
else {
ps.setObject(count, list.get(j));
}
count++;
}
try {
ps.execute();
} catch (Exception e) {
}
如果prepared语句的执行失败,那么我需要调用一个方法,该方法获取整个集合列表,一次插入一条语句并提交。如何做到这一点?(或者)我的想法是,因为我知道数组的大小,我可以将数组分成一半大小,然后准备语句并插入它?哪一个更好更安全?有可能这样做吗
提前谢谢
# 1 楼答案
如果要继续使用字符串,请尝试:
# 2 楼答案
这样,您将永远无法获得格式正确的查询。因为您正在替换基
query
字符串并将其分配给新的formattedQuery
。这个formattedQuery
将保留所有?
位持有者,但保留循环长度的最后一位。这不会产生你期望的结果实际上,应该使用PreparedStatement在查询中设置值
见下面的例子
示例:
更新帖子的回复:
可以执行相同的代码,只需稍作更改即可提交列表中的有效记录
我已经部分修改了你的代码,并添加了一些注释以供理解,如下所示
它应该能解决你的问题:
# 3 楼答案
您可以使用Java Formatter类,但是这通常使用%作为值的占位符,而不是?当它与printf格式字符串一起工作时
那你就可以
但是,是的,试着使用预先准备好的声明
另外,spring类SimpleJdbcTemplate有一个
update(String sql, Object... args)
方法,它将完全满足您的需求例如
jdbc.update(sql, value1, value2)
# 4 楼答案
您拥有的查询字符串实际上是一个示例,说明了在JDBC中如何表示具有动态值的SQL语句。请参阅^{} documentation 中的以下示例,了解通常如何用适当的值替换查询字符串中的
?
字符:你也可以看看Oracle的JDBC基础教程