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

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

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

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

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

1755閲覧

エスケープ文字の使い方 ORACLE

退会済みユーザー

退会済みユーザー

総合スコア0

Oracle

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

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/05/29 11:55

編集2020/06/03 01:27

知識を不足で大変申し訳ないのですが、エスケープ文字を使用して検索して、その結果をコンソールに出力する方法がわかりません、お知恵をお貸し頂けないでしょうか。

前提・実現したいこと

<前提>
Oracle DBに以下の内容でデータを入れた結果:
EMMPLOYEES表

<実現>
上記の表を元に、
エスケープ文字を入力し検索した結果をコンソールに表示したい。
エスケープ文字を使えれば検索結果は何でもよい。

該当のソースコード

Java

1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4import java.sql.Connection; 5import java.sql.DriverManager; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.sql.Statement; 9 10 11public class DataBaseConnectTest { 12 static BufferedReader _br = new BufferedReader(new InputStreamReader(System.in)); 13/** 14 * main 15 * access to Oracle DB then execute SQL 文 16 * @param args 17 * @throws IOException 18 * @throws SQLException 19 */ 20 public static void main(String[] args) throws IOException, SQLException { 21 Connection con = null; 22 Statement st = null; 23 String hostname = "0.0.0.0"; 24 String username = "***"; 25 String pw = "*******; 26 String sid = "XE"; 27 String url = "jdbc:oracle:thin:@"; 28 final String SQL = "Select EMPID, ENAME, JOB from EMPLOYEES "; 29 30 try { 31 Class.forName("oracle.jdbc.driver.OracleDriver"); 32 con = DriverManager.getConnection(url + hostname + ":1521:" + sid, username, pw); 33 34 st = con.createStatement(); 35 String str; 36 while ((str = _br.readLine()) != null) { 37 if (!(str.isEmpty()))break;{ 38 } 39 } 40 ResultSet rs = st.executeQuery(SQL+str); 41 while(rs.next()) { 42 System.out.println(rs.getInt("EMPID")); 43 44 } 45 // EMPID = 1001"); 46 47 // while (rs.next()) { 48 // System.out.println("EMPID "+rs.getInt("EMPID")+" ENAME 49 // "+rs.getString("ENAME")+" JOB "+rs.getString("JOB")); 50 51 } catch (SQLException e) { 52 53 e.printStackTrace(); 54 } catch (ClassNotFoundException e) { 55 System.out.println("can't connect to it"); 56 } 57 st.close(); 58 con.close(); 59 } 60} 61

試したこと

ResultSet rs = st.executeQuery("Select EMPID, ENAME, JOB from EMPLOYEES LIke \事務チーム_A\"");

補足情報(FW/ツールのバージョンなど)

Oracle_version_18c(18.3)
Java_version_1.8
Eclipse_version_→4.14.0

###追記
何故これだと結果が返ってこないのかがわかりません。

SELECT EMPID, ENAME, JOB FROM EMPLOYEES WHERE JOB LIKE '%_務¥____A' ESCAPE '\' ORDER BY EMPID;

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

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

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

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

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

momon-ga

2020/05/30 02:39

SQL中でエスケープ文字を設定したいという質問ですか?
退会済みユーザー

退会済みユーザー

2020/06/01 00:38 編集

返信遅れてすみません。 そうですね。検索機能にエスケープ文字の追加をしたいです。
maisumakun

2020/06/01 01:57

エスケープ対象は「LIKEで使う特殊文字」ということで間違いないですか?
退会済みユーザー

退会済みユーザー

2020/06/01 02:13

はい。
guest

回答3

0

何故これだと結果が返ってこないのかがわかりません。

LIKE内では¥(U+00A5、円記号)で書いていますが、ESCAPEの中身は\(U+005C、バックスラッシュ)です。

投稿2020/06/01 02:16

maisumakun

総合スコア145183

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

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

maisumakun

2020/06/01 02:20

「!」や「#」など、もっとわかりやすい文字を使ったほうがいいかもしれません。
退会済みユーザー

退会済みユーザー

2020/06/01 04:06

なるほど。 ありがとうございました。
guest

0

ベストアンサー

エスケープ文字を入力して検索するというのが、どうもよくわかりませんが。

SQL中でエスケープ文字を設定したいのか?

そうです。

に、ついてのみ回答します。
OracleでSQL文中でエスケープ文字を設定する場合は、

ESCAPE句を利用します。

ESCAPE句の例 次の例は、名前の中に文字列A_Bを持つ従業員を検索します。

SELECT last_name

FROM employees WHERE last_name LIKE '%A\_B%' ESCAPE '\' ORDER BY last_name;

投稿2020/06/01 00:39

momon-ga

総合スコア4820

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

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

退会済みユーザー

退会済みユーザー

2020/06/01 01:53 編集

ESCAPE 句を使用して検索するということは理解しました。 事務_チームAのような場合、どのように指定すれば良いのですか?
momon-ga

2020/06/01 02:49

サンプルとほとんど変わりませんが。 WHERE job LIKE '%事務\_チームA%' ESCAPE '\' のようにエスケープするアンダースコアの前にESCAPEで指定した文字を入れればよいです。
退会済みユーザー

退会済みユーザー

2020/06/01 04:06

ご教示頂きましてありがとうございました。 解決出来ました。
guest

0

これに限らず、SQLに直接値を突っ込まずプリペアドステートメントを利用します。

投稿2020/05/29 12:01

m.ts10806

総合スコア80850

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

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

退会済みユーザー

退会済みユーザー

2020/06/01 00:17

ご教示ありがとうございます。 今はコンソールからの入力でエスケープ文字を利用して検索する方法が知りたいです。
m.ts10806

2020/06/01 00:44

プリペアドステートメントを使えばそのエスケープ文字列意識することなくプログラムに組み込めるという話ですが、試してみられたのでしょうか
maisumakun

2020/06/01 02:21

残念ながら、そちらの問題ではなかったようです(追記参照)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問