2011-10-07 47 views
1
String username="abc"; 
String pwd="abc"; 

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

我想在此字符串用的用戶名和pwd specifed..Is存在,使我們可以找到'?'任何函數的值替換字符'?'其中有兩次更換角色,以用戶名替換和pwd?在一個字符串

+2

是這個送東西到數據庫?如果是這樣,你*不應該*自己執行替換。請提供更多的背景信息 - 您嘗試採取的方法完全有可能是一個非常糟糕的主意。 –

+1

這是一個SQL查詢嗎?可能是你應該考慮使用'PreparedStatement' – Cratylus

回答

4

當然,看看String.replaceFirst例如:

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

但是要記住,你可能要正確逃生usernamepwd

考慮,例如,如果我提供的東西像

or 1=1 

的密碼會發生什麼。

有關更多信息,看看不同的答案:


如果可能的話,使用PreparedStatements

+0

我不想使用preparestmt becoz我不高壓控制數據庫..有一個疑問,如果將有更多的參數,如地址, emailId然後將這個工作?...這是一個動態的方式來取代這個?..非常感謝給我迅速答覆 –

+0

當然,它會工作。試試看。 (但正如我所說的,一定要逃避特殊字符這種或那種方式:-) – aioobe

+0

偉大..如果你可以告訴更多的.. ..在同一個例子中轉義特殊字符會給我一個更多的想法.. –

1

你可以這樣做:

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(); 
0

您CA使用string.format對於這種情況 即

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

使用%s代替?