質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

0回答

768閲覧

PreparedStatement の使い方

退会済みユーザー

退会済みユーザー

総合スコア0

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2020/06/03 08:33

編集2022/01/12 10:55

入力した文字をエスケープさせ、検索でただの文字列として使用できるようにし,
また、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 ''

エスケープ処理

2:条件検索
where句のみ

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/06/03 12:50

where job  = ? の job の後ろに全角スペースがあったので、削除したら動きましたよ。PostgreSQL ですが。
退会済みユーザー

退会済みユーザー

2020/06/04 04:13

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問