我可以像在SQL预处理语句中一样拥有String java的占位符吗?
例如,考虑到我有string St = "akkk ? la,ala ? " ,
现在我想设定值?因为我在sql准备语句中设置它 st.setStingValue(1, “阿克沙伊”); //我们有这样的事吗? St.setStringValue(2, “anjaaa”);
答案 0 :(得分:35)
您可以使用String.format
String st = "akkk %s la,ala %s ";
String result = String.format(st, "First Val", "Second Val");
或者,您可以使用数字位置
String st = "akkk %1$s la,ala %2$s ";
String result = String.format(st, "First Val", "Second Val");
答案 1 :(得分:6)
您可以查看此Class MessageFormat
答案 2 :(得分:1)
replaceFirst()是个坏主意 - 如果第二个arg包含被解释为正则表达式处理指令的序列,则第一个参数应该是正则表达式。作为组引用(如'$'),您将在简单的数据库操作中获得异常 - 取决于传递给查询的数据。
答案 3 :(得分:0)
这是我的变体。
public class SimplePrepareStatement {
String vars[];
String query;
public SimplePrepareStatement(String query) {
int countVars = StringUtils.countMatches(query, "?");
vars = new String[countVars];
this.query = query.replaceAll("\\?", "%s");
}
public void setDouble(int i, Double arg0) {
vars[i-1] = "'"+arg0+"'";
}
public void setString(int i, String arg0) {
vars[i-1] = "'"+arg0+"'";
}
public void setObject(int i, String arg0) {
vars[i-1] = arg0;
}
public String getSQL() {
return String.format(query, vars);
}
}
注意!这不适用于SQL,可能的SQL注入,只是类似的行为。
@Test
public void simplePrepareStatementTest() {
SimplePrepareStatement st = new SimplePrepareStatement("abc ? abc ?");
st.setString(1, "a");
st.setString(2, "b");
assertEquals("abc 'a' abc 'b'", st.getSQL());
st.setObject(1, "obj");
assertEquals("abc obj abc 'b'", st.getSQL());
}
答案 4 :(得分:-1)
你可以使用String的replaceFirst来达到同样的效果 在这里阅读:http://www.roseindia.net/java/string-examples/string-replacefirst.shtml