У нас есть некоторые заполнители в 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");
Ответ 2
вы можете посмотреть Class MessageFormat
Ответ 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());
}
Ответ 5
вы можете использовать replaceFirst строки для достижения такого же эффекта.
читайте об этом здесь: http://www.roseindia.net/java/string-examples/string-replacefirst.shtml