簡體   English   中英

查詢字符串中的Java SQL引號

[英]Java SQL quotes in query strings

我有以下代碼來執行sql查詢:

query = String.format("select * from users where user_name = '%s';", results.getString(1));
results2 = mStmt.executeQuery(query);

數據集中的一個用戶名的值為“ O'brien”。 由於“ O'brien”中的單個括號,這使我的查詢不滿意。查詢將變為:

select * from users where user_name = 'O'brien'

有什么策略可以克服這個問題而不修改數據?

編輯 :准備好的語句確實解決了單引號問題,但這只是問題的一部分。 我擁有的字符串值之一包含單詞“ UNDER”。 這是一個SQL關鍵字。 例如,我有一個名為insertAll的prepareStatement與查詢:

insert into names (id, val1, val2, val3, val4, tTime, val5) values (?, ?, ?, ?, ?, ?, ?)

感謝您的所有幫助!

使用prepareStatement設置參數。 您的代碼是本書中的SQL注入可利用代碼。 http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

為什么不使用PreparedStatement來代替,而避免SQL查詢中轉義引號的繁瑣且容易出錯的問題?

可能看起來像這樣(對不起,我沒有真正運行過,但是您應該知道):

query = "select * from users where user_name = ?";
PreparedStatement p = new PreparedStatement(con, query);
p.setString(1, results.getString(1));
results2 = p.executeQuery();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM