String username="abc";
String pwd="abc";
String query="Select username,pwd where username = ? and pwd = ?";
我想在此字符串用的用戶名和pwd specifed..Is存在,使我們可以找到'?'
任何函數的值替換字符'?'
其中有兩次更換角色,以用戶名替換和pwd?在一個字符串
String username="abc";
String pwd="abc";
String query="Select username,pwd where username = ? and pwd = ?";
我想在此字符串用的用戶名和pwd specifed..Is存在,使我們可以找到'?'
任何函數的值替換字符'?'
其中有兩次更換角色,以用戶名替換和pwd?在一個字符串
當然,看看String.replaceFirst
例如:
String query = "Select username,pwd where username = ? and pwd = ?"
.replaceFirst("\\?", username)
.replaceFirst("\\?", pwd)
但是要記住,你可能要正確逃生username
和pwd
。
考慮,例如,如果我提供的東西像
or 1=1
的密碼會發生什麼。
有關更多信息,看看不同的答案:
如果可能的話,使用PreparedStatements
!
我不想使用preparestmt becoz我不高壓控制數據庫..有一個疑問,如果將有更多的參數,如地址, emailId然後將這個工作?...這是一個動態的方式來取代這個?..非常感謝給我迅速答覆 –
當然,它會工作。試試看。 (但正如我所說的,一定要逃避特殊字符這種或那種方式:-) – aioobe
偉大..如果你可以告訴更多的.. ..在同一個例子中轉義特殊字符會給我一個更多的想法.. –
OT關於字符串替換,但是如果您計劃使用SQL和JDBC,請看PreparedStatement
,它會爲您執行此操作並防止SQL注入。 http://download.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html
你可以這樣做:
String username="abc";
String pwd="abc";
String query="Select username,pwd where username = ? and pwd = ?";
query = query.replaceFirst("\\?", username);
query = query.replaceFirst("\\?", pwd);
,但如果你這樣做是爲實際數據庫查詢,你會想用準備好的發言: 如。
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();
您CA使用string.format
對於這種情況 即
query = String.format(query,username,pwd);
使用%s
代替?
是這個送東西到數據庫?如果是這樣,你*不應該*自己執行替換。請提供更多的背景信息 - 您嘗試採取的方法完全有可能是一個非常糟糕的主意。 –
這是一個SQL查詢嗎?可能是你應該考慮使用'PreparedStatement' – Cratylus