Заменить символ в строке - PullRequest
1 голос
/ 07 октября 2011
String username="abc";
String pwd="abc";

String query="Select username,pwd where username = ? and pwd = ?";

Я хочу заменить символ '?' в этой строке другими значениями с указанием имени пользователя и pwd. Есть ли какая-либо функция, с помощью которой мы можем найти '?', которая существует два раза, и заменить ее именем пользователя иPWD

Ответы [ 5 ]

4 голосов
/ 07 октября 2011

Конечно, посмотрите на String.replaceFirst, например:

String query = "Select username,pwd where username = ? and pwd = ?"
                       .replaceFirst("\\?", username)
                       .replaceFirst("\\?", pwd)

Имейте в виду, что вы, вероятно, хотите правильно бежать username и pwd.

Рассмотрим, например, что произойдет, если я предоставлю что-то вроде

 or 1=1

в качестве пароля.

Для получения дополнительной информации об этом посмотрите различные ответы на следующие вопросы:


Если возможно, используйте PreparedStatements!

1 голос
/ 07 октября 2011

Вы можете сделать:

String username="abc"; 
String pwd="abc";

String query="Select username,pwd where username = ? and pwd = ?";
query = query.replaceFirst("\\?", username);
query = query.replaceFirst("\\?", pwd);

но если вы делаете это для фактического db-запроса, вы захотите использовать подготовленные операторы: например.

String username="abc"; 
String pwd="abc";

String query="Select username,pwd where username = ? and pwd = ?";
PreparedStatement pStmt = con.prepareStatement(query);
pStmt.setParameter(1, username);
pStmt.setParameter(2, pwd);

ResultSet rs = pStmt.executeQuery();
1 голос
/ 07 октября 2011

Вы должны посмотреть на String replaceFirst(String regex, String replacement).

0 голосов
/ 07 октября 2011

вы можете использовать string.format для этого сценария, т.е.

query = String.format(query,username,pwd);

использовать %s вместо ?

0 голосов
/ 07 октября 2011

OT относительно замены строки, но если вы планируете использовать SQL с JDBC, посмотрите на PreparedStatement, который делает это для вас и предотвращает внедрение SQL. http://download.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...