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

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

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

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

JDBC

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

Java

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

SQL

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

Q&A

解決済

2回答

1711閲覧

JAVAFX SELECT文のWHERE句に変数を当てはめるには

退会済みユーザー

退会済みユーザー

総合スコア0

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

JDBC

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

Java

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

SQL

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

0グッド

0クリップ

投稿2020/08/17 04:43

編集2020/08/17 05:28

前提・実現したいこと

タイトルの通りですがSELECT文のWHERE句に変数を当てはめるにはどうすれば良いでしょうか。
以下がsql文を行おうとしているメソッドになります。
変数sに比較したいコードが格納されています。

発生している問題・エラーメッセージ

・rsを解決できない ・メソッド setString(int, String) は型 Statement で未定義です ・型 Statement のメソッド executeQuery(String) は引数 () に適用できません

該当のソースコード 1

java

1 txtCode.setText(s); 2 3 String sql = "select * from データ where コード = ?"; 4 5 String url = "jdbc:sqlserver://~~~~~~~~; 6 // SQL Serverのユーザ名とパスワード 7 String username = "~~"; 8 String password = "~~~~"; 9 10 try { 11 // JDBCドライバをロード 12 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 13 // SQL Serverに接続 14 Connection con = DriverManager.getConnection(url, username, password); 15 16 // SQL Serverに問い合わせ 17 Statement stmt = con.prepareStatement(sql) ; 18 stmt.setString(1, s); //ここの意味が分かりません 19 rs = stmt.executeQuery(); 20 21 while (s.next()) { 22 lblName.setText("名前"); 23 } 24 25 // 後処理 26 s.close(); 27 stmt.close(); 28 con.close(); 29

該当のソースコード 2 追記

java

1 2 txtCode.setText(s); 3 4 5 String url = "jdbc:sqlserver://~~~~~"; 6 // SQL Serverのユーザ名とパスワード 7 String username = "~~"; 8 String password = "~~"; 9 10 try { 11 // JDBCドライバをロード 12 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 13 // SQL Serverに接続 14 Connection con = DriverManager.getConnection(url, username, password); 15 16 // SQL Serverに問い合わせ 17 18 Statement stmt = con.createStatement(); 19 ResultSet rs = stmt.executeQuery("select 名前 from データ WHERE コード = '" + s +"'"); 20 21 while (rs.next()) { 22 lblName.setText(rs.getString( "名前")); 23 } 24 25 // 後処理 26 rs.close(); 27 stmt.close(); 28 con.close();

試したこと

・バインド変数?
・ResultSet rs = stmt.executeQuery("select 名前 from データ WHERE コード = '" + s +"'");

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

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

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

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

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

guest

回答2

0

ベストアンサー

この方の質問を参考に解決しました
https://teratail.com/questions/142357

投稿2020/08/18 01:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

そもそもcon.prepareStatement(sql)の返却値がnullになっているのでは?

"select * from データ where コード = ?"このSQLを?部分は固定値で実際に実行してみて想定の結果は得られているのでしょうか。

投稿2020/08/17 04:56

m.ts10806

総合スコア80875

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

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

退会済みユーザー

退会済みユーザー

2020/08/17 05:03 編集

ご回答ありがとうございます。 ?の部分はネットで調べて出てきたので申し訳ないのですが意味が分からず使用しています・・・ ResultSet rs = stmt.executeQuery("select 名前 from データ WHERE コード = 01”); このコードだと結果は得られています。 しかしコードの部分を変数やgetText()に変えると上手くいきません。
dodox86

2020/08/17 05:16

> ?の部分はネットで調べて出てきたので申し訳ないのですが意味が分からず使用 いや、そんな。意味が分からずコピペしても動くようにならないです。
退会済みユーザー

退会済みユーザー

2020/08/17 05:24

似たようなサンプルコードを参考に実行しました!^^
m.ts10806

2020/08/17 05:32

まずは用語と用法を知るところからはじめてください。 「プリペアドステートメント」がメインのキーワードです。
退会済みユーザー

退会済みユーザー

2020/08/17 06:01

ちなみに、そのやり方以外にはないのでしょうか?
m.ts10806

2020/08/17 06:04

ないわけではないです。jdbcもあくまでデータベース接続のアプローチ方法の1つであるだけです。 ただ、私の回答のメインの指摘部分についてはどうですか? >そもそもcon.prepareStatement(sql)の返却値がnullになっているのでは? コードがつまみすぎて分かりませんが、NullPointerExeptionもcatchするように組んでみてください。あとは地道にデバッグするしかないと思います。 デバッグできないと、どんな手法でDB接続を試みても同じです。 「これがダメなら別の手段」というのは試行錯誤の常套手段ですが、まだ「ダメだ」と判断する材料がない状態で諦めるのは悪手です。
退会済みユーザー

退会済みユーザー

2020/08/17 06:24

返却値がnullにすらなっていないと思います・・・ 調べて?の部分の使い方はなんとなくわかりましたが、指定するパラメータが変数になるということでいいのですか?
dodox86

2020/08/17 06:27

実行時エラーではなく、コンパイルエラーなのではありませんか?エラーメッセージが端折っているようで確信持てませんが。
退会済みユーザー

退会済みユーザー

2020/08/17 06:39 編集

そうですね、コンパイルエラーです。 追記した2のほうは実行はできますが動いてはいないようですがこれでは変数の使い方は間違っているのでしょうか?
m.ts10806

2020/08/17 07:52

コンパイルエラーでしたらエラーメッセージがコンソールに出力されているでしょうし、nullかどうかはデバッグで確認できます。 エラーメッセージもコピペで提示されないとこちらも正しい状況は把握できません。 >https://teratail.com/help/question-tips#questionTips3-4-2 >表示されたエラーメッセージをそのままコピー&ペーストしましょう。自分でタイプしなおしたり、自分で解釈・要約しようとしてはいけません。 >大事な部分が抜け落ちたり情報が違うものになってしまう可能性があるからです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問