入力した文字をエスケープさせ、検索でただの文字列として使用できるようにし,
また、Keyword もエスケープさせてただの文字列として検索できるようにしたいです。
AND
PreparedStatement を使用すればエスケープ処理を自動でしてくれるみたいなのですが、私がかいたコードでも問題ないかどうかどうか、また他の書き方がれば、javadocの記述のうえ
ご教示頂いただければ幸いです、
<前提>
1:コンソールから入力した条件で検索を行い、結果をコンソールに一覧表示
2:入力した文字をエスケープさせて検索で文字列として使用
2-1:入力したKeyword もエスケープさせて文字列として検索すること
3:共通処理があれば任意のメソッドを作成して処理をすること。
<実現>
PreparedStatement を使用して、入力した文字を自動エスケープさせ,て検索で文字列として使用できるようにしたい。
また、Keyword もエスケープさせて文字列として検索できるようにしたい。
該当のソースコード
Java
1package db; 2 3import java.io.BufferedReader; 4import java.io.InputStreamReader; 5import java.sql.Connection; 6import java.sql.DriverManager; 7import java.sql.PreparedStatement; 8import java.sql.ResultSet; 9 10public class PreparedStmtOraTest { 11 12 static BufferedReader _br = new BufferedReader(new InputStreamReader(System.in)); 13 public static void main(String[] args) { 14 try { 15 new PreparedStmtOraTest().execute(); 16 }catch(Exception e) { 17 e.printStackTrace(); 18 } 19 } 20 21 public void execute() throws Exception { 22 Connection conn = null; 23 PreparedStatement pstmt = null; 24 ResultSet rs = null; 25 String hostname = "****"; 26 String username = "****"; 27 String pw = "****"; 28 String sid = "XE"; 29 String url = "jdbc:oracle:thin:@"; 30 31 //(ドライバのロード) 32 Class.forName("oracle.jdbc.driver.OracleDriver"); 33 34 //DBに接続(URL,USER_ID,PASSWORD) 35 conn = DriverManager.getConnection(url + hostname + ":1521:" + sid, username, pw); 36 37 //input 38 System.out.println("Please input SQL command "); 39 String inp; 40 while ((inp = _br.readLine()) != null) { 41 42 if (!(inp.isEmpty()))break;{ 43 } 44 } 45 46 //SQLを発行 47 pstmt = conn.prepareStatement("Select EMPID, ENAME, JOB from EMPLOYEES where job = ? " ); 48 pstmt.setString(1, inp); 49 rs = pstmt.executeQuery(); 50 51 //結果を取得 52 while(rs.next()) { 53 System.out.println("EMPID "+rs.getInt("EMPID")+" ENAME "+rs.getString("ENAME")+" JOB "+rs.getString("JOB")); 54 } 55 56 //後始末 57 rs.close(); 58 pstmt.close(); 59 conn.close(); 60 } 61 } 62 63
補足情報(FW/ツールのバージョンなど)
Oracle_version_18.3
Java_version_1.8
Eclipse_version_4.14.0
期待結果:
1:以下の文字をコンソールで入力
WHERE job LIKE '%事務_チームB%' ESCAPE ''
あなたの回答
tips
プレビュー