我们在java中是否有一些占位符用于字符串,因为我们在SQL预处理语句中有(?)

时间:2011-02-08 06:39:27

标签: java replace

我可以像在SQL预处理语句中一样拥有String java的占位符吗?

例如,考虑到我有string St = "akkk ? la,ala ? " ,

现在我想设定值?因为我在sql准备语句中设置它  st.setStingValue(1, “阿克沙伊”); //我们有这样的事吗?  St.setStringValue(2, “anjaaa”);

5 个答案:

答案 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