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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

1651閲覧

DB接続専用のファイルを作り、それを参照できるのか

Dash_003

総合スコア27

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2019/08/20 02:08

解決したい疑問

Javaでデータベースに接続するためのコードを毎回書いているのですが、

・データベースに接続する用のファイル
・データベースから情報を抽出して実際に動作させるファイル

を別々にすることはできるのでしょうか?

素人なもので、「クラスの呼び出し」とか「インスタンス化」を使えばいけるんじゃないか?!と思ってしまうのですが、実際に書いてみてもエラーになってしまうので質問させていただきました。

1回呼び出して抽出表示するだけなら全部書いても煩わしさはないんですが、ファイルの数が多くなったり、選択機能を付けてユーザーが選んだ結果に応じてさらに条件を絞ったデータを抽出する、みたいな場合長くなりすぎるのが困ってしまうかな?と感じます。
それとも同一ファイル内にクラスをたくさん作るやり方の方が良いのでしょうか?

コードはこちらです。

【DB接続用のファイル】(実行部分まで含めてます)

package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Dbtest { public static void main(String[] args) throws Exception { // PostgreSQLへの接続情報 Connection con; Statement st; ResultSet rs; String url = "jdbc:postgresql://localhost:5432/Test"; String user = "postgres"; String password = "(実際には記入してます)"; // JDBC driver setting Class.forName("org.postgresql.Driver"); // PostgreSQLへの接続 con = DriverManager.getConnection(url, user, password); st = con.createStatement(); // SELECT文の実行 rs = st.executeQuery("select shohin_mei,shohin_price,id from test"); // 結果画面の表示 System.out.println("id\tshohin_mei\tshohin_price"); while (rs.next()) { System.out.print(rs.getInt("id")+ "\t"); System.out.print(rs.getString("shohin_mei")+ "\t"); System.out.println(rs.getInt("shohin_price")); } // PostgreSQLとの接続を切断 rs.close(); st.close(); con.close(); } }

【接続部分を省いて抽出だけをするファイル】

package test; public class SimpleCode { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Dbtest db = new Dbtest(); // SELECT文の実行 rs = st.executeQuery("select shohin_mei,shohin_price,id from test"); // 結果画面の表示 System.out.println("id\tshohin_mei\tshohin_price"); while (rs.next()) { System.out.print(rs.getInt("id")+ "\t"); System.out.print(rs.getString("shohin_mei")+ "\t"); System.out.println(rs.getInt("shohin_price")); } }

出現するエラー

・stを解決できません
・rsを変数に解決できません

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

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

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

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

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

tetutetu

2019/08/20 02:31

まず、そもそものJavaの使い方にいろいろと問題があります。 ひとまずそのエラーが出る原因としては、SimpleCodeクラスではstもrsも定義していないためです。
guest

回答1

0

ベストアンサー

例えばDbtest内で下記のようなメソッドを作ります。(下記は適当に作りました適宜変更してください。)

java

1 2  public static Connection getConnection() throws ClassNotFoundException, SQLException { 3 Class.forName("org.postgresql.Driver"); 4 con = DriverManager.getConnection(url, user, password); 5 return con; 6 } 7 8 public static void close(Connection connection) { 9 try { 10 if (connection != null) { 11 connection.close(); 12 } 13 } catch (SQLException e) { 14 e.printStackTrace(); 15 } 16 } 17 18 public static void close(Statement statement) { 19 if (statement != null) { 20 try { 21 statement.close(); 22 } catch (SQLException e) { 23 e.printStackTrace(); 24 } 25 } 26 } 27 28 public static void close(ResultSet resultSet) { 29 if (resultSet != null) { 30 try { 31 resultSet.close(); 32 } catch (SQLException e) { 33 e.printStackTrace(); 34 } 35 } 36 }

あとはSimpleCode内で下記コードの様に呼び出します。

java

1try { 2 Connection connection = Dbtest.getConnection(); 3 Statement statement = connection.statement(""); 4 ResultSet resultSet = statement.executeQuery(); 5 6 7 } catch (SQLException e) { 8 e.printStackTrace(); 9 } finally { 10 Dbtest.close(resultSet); 11 Dbtest.close(statement); 12 Dbtest.close(connection); 13 }

投稿2019/08/20 03:04

編集2019/08/20 06:02
asakuta

総合スコア100

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

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

Dash_003

2019/08/20 05:08

書いていただいたコードと自分のコードを見比べて、何が不足しているのか、どこが違うのか確認してみます。ありがとうございます。
asakuta

2019/08/20 05:19

試してみて分からない部分は聞いてください。 前回書いた例外処理部分も併せて学習してみてください。
tetutetu

2019/08/20 05:56

横からすみません。 例外処理を学ぶのであれば 「Exceptionで一括りにする」のは止めたほうがいいと思います。 try-catchにせよthrowsにせよ処理自体は通りますが、全く学習になりません。
tetutetu

2019/08/20 05:59

DBと連携した開発を行っていると、頻繁にエラーが発生すると思われますので DBを扱うコードを改良するよりも先に、一度しっかりと例外処理を学ばれることをお勧めします。 例外処理 https://www.javadrive.jp/start/exception/
asakuta

2019/08/20 06:06

後で編集しようと思い忘れていました。 ご指摘ありがとうございます。
tetutetu

2019/08/20 06:20 編集

あ、一応質問者様に向けてのつもりでした。 質問時点でのコードだと、closeする際にnull判定を行っていないため 最低でもClassNotFoundException、SQLExceptionとNullPointerExceptionが出るので。
Dash_003

2019/08/20 06:41

ありがとうございます、合わせて調べてみます。
asakuta

2019/08/20 06:59

たしかにExceptionで投げてますね。(私も例外のdoc読んでたら書き忘れた) tetutetuさんの言う通り、まずは例外について優先的に学んではいかがですか?。DBだけでなくJava言語全体で使える知識のため覚えておいて損はないです。また、プログラムの保守性に直結します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問