У нас есть некоторые заполнители в java для строки, так как мы имеем (?) В SQL-запросе

Могу ли я иметь заполнитель для строки java, как в подготовленных операторах sql?

Например, Conside, что у меня есть string St = "akkk ? la,ala ? " ,

теперь я хочу установить значения? как я установил его в sql подготовленный оператор  st.setStingValue(1, "Акшай" );//У нас есть что-то вроде этого?  St.setStringValue(2, "anjaaa" );

Ответы

Ответ 1

Вы можете использовать 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");

Ответ 3

replaceFirst() - плохая идея в этом случае - ожидается, что первый аргумент будет регулярным выражением, если второй arg содержит последовательности, которые интерпретируются как директивы обработки регулярных выражений, например. в качестве ссылок на группы (например, $$) вы получите исключение в тривиальной операции БД - в зависимости от данных, переданных в запрос.

Ответ 4

Вот мои варианты.

 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, возможно для SQLinjections, просто похожее поведение.

   @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());
}