3.Example(2)ECLIPSEでのJDBCの使用方法
1.データベースへの接続
-Class.forName()メソッドを使用してドライブを登録します.
->oracle.jdbc.driver.OracleDriver ->ojdbc.JArの内容
-ojdbc.jarファイルをライブラリとしてプロジェクトに追加する必要があります!
-Class.forName()メソッドの場合は、ClassNotFoundExceptionを処理する必要があります.
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null; 이곳에 선언된 변수 3개의 경우 추후 설명되오니, 우선 작성한다.
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
}
2.Connectionオブジェクトの作成
DB接続情報を持つオブジェクト
-DriverManagerクラスのgetConnection()スタティックメソッドを使用する
-パラメータ1:DB接続アドレス、情報->フォーマット->jdbc:oracle:thin:@ipアドレス:ポート番号:sid
-パラメータ2:DB接続ユーザーアカウント名/大文字小文字区別なし
-パラメータ3:ユーザーアカウントのパスワード/大文字と小文字を区別
-3つのパラメータはStringで代入されます!
-サーバDB->jdbc:oracle:thin:@rclass:iptimeを使用する場合.org:1521:xe
-例で使用したDB接続ユーザーアカウント名とパスワードはstudent/stu学生です.
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//반환값을 Connection 변수에 담는다
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student", "student");
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
3.Connectionオブジェクトを使用してsql文を実行するオブジェクトを作成する
Statementインタフェース
-ConnectionのcreateStatement()メソッドを使用して作成
-statementはconnectに接続されているデータベースのSQL構文を実行し、結果を取得します.
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//반환값을 Connection 변수에 담는다
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student", "student");
stmt = conn.createStatement();
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
4.データベースで実行するSQL構文の作成
Stringを使用して作成!
-クエリーを作成するときは、すべての内容が同じ内容であることを確認します.ただし、最後のセミコロンは省略!
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//반환값을 Connection 변수에 담는다
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student", "student");
stmt = conn.createStatement();
String sql="SELECT * FROM MEMBER";
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
5.StatementオブジェクトのexecuteQuery()メソッドを使用して作成されたsql構文の実行
-executeQuery(sql構文に代入);
-executeQuery()メソッドはResultSetを返します.->データベース実行プロセス(データ)は保存されているので、ResultSet変数として受け入れる必要があります.
-select文実行executeQuery()->ResultSet
-DML(挿入、更新、削除)executeUpdate()の実行->intの戻り
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//반환값을 Connection 변수에 담는다
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student", "student");
stmt = conn.createStatement();
String sql="SELECT * FROM MEMBER";
//반환값을 resultSet에 담는다
rs = stmt.executeQuery(sql);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
6.ResultSetとして受信したデータをチェックし、クラスに保存する
-ResultSetを使用したgetOO(ローカル名|インデックス番号)メソッド
-データ型による作成方法
-文字列(varchar 2、nvarchar 2、nchar):getString()
-数値(number):getInt()またはgetDouble()
-日付(Date):getDate()-java.sql.Date;戻る
-resultSetのデータを行単位で受信
-resultSetのnext()メソッドでは、rowに順次アクセスできます.-next()キャリータイプを返します
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//반환값을 Connection 변수에 담는다
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student", "student");
stmt = conn.createStatement();
String sql="SELECT * FROM MEMBER";
//반환값을 resultSet에 담는다
rs = stmt.executeQuery(sql);
while(rs.next()) {
System.out.print(rs.getString("member_id"));
System.out.print(rs.getString("member_pwd"));
System.out.print(rs.getString("member_name"));
System.out.print(rs.getString("gender"));
System.out.print(rs.getInt("age"));
System.out.print(rs.getString("email"));
System.out.print(rs.getString("phone"));
System.out.print(rs.getString("address"));
System.out.print(rs.getString("hobby"));
System.out.print(rs.getDate("enroll_date"));
System.out.println();
SELECT문으로 가져온 데이터는 통상 VO클래스를 만들어서 저장 후 객체로 활용
수의 객체가 생성된 경우(resultSet에 다수 row가 있는 경우)에는 ArrayList를 이용함
이 부분에 있어서는, 추후 예제부분에서 정리하도록 하겠습니다.
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
上のwhile文の構文で、次のデータを出力できます.しかし、通常、単純にデータを出力するのではなく、データベースからインポートされたデータを他のクラスに移動するので、実際の例で説明します.
7.作成したオブジェクトを閉じる
-connection、statement、result(select文が実行されている場合)
-オブジェクトを返すときは、作成順序とは逆の順序で操作します.
public class Ex {
public static void main(String[] args) {
------------------------------
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
-------------------------------
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//반환값을 Connection 변수에 담는다
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"student", "student");
stmt = conn.createStatement();
String sql="SELECT * FROM MEMBER";
//반환값을 resultSet에 담는다
rs = stmt.executeQuery(sql);
while(rs.next()) {
System.out.print(rs.getString("member_id"));
System.out.print(rs.getString("member_pwd"));
System.out.print(rs.getString("member_name"));
System.out.print(rs.getString("gender"));
System.out.print(rs.getInt("age"));
System.out.print(rs.getString("email"));
System.out.print(rs.getString("phone"));
System.out.print(rs.getString("address"));
System.out.print(rs.getString("hobby"));
System.out.print(rs.getDate("enroll_date"));
System.out.println();
SELECT문으로 가져온 데이터는 통상 VO클래스를 만들어서 저장 후 객체로 활용
수의 객체가 생성된 경우(resultSet에 다수 row가 있는 경우)에는 ArrayList를 이용함
이 부분에 있어서는, 추후 예제부분에서 정리하도록 하겠습니다.
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}finally {
//DB연결 객체는 try문 밖에서 선언을 해줘야한다.
try {
if(rs!=null && !rs.isClosed())rs.close();
if(stmt!=null && !stmt.isClosed())stmt.close();
if(conn!=null && !conn.isClosed())conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
この部分では、いくつかの事項を確認する必要があります.最初にconn、stmt、rs変数はfinally内部のtry文で使用するために最初のtry文が開始される前に宣言されます.try文の内部で変数が宣言されている場合、変数は使用できません.さらにfinally構文処理を使用する必要があるのは、最初のtry文の最後の部分で、
閉じたオブジェクトの処理中にエラーが発生し、catch文に移動した場合、正常に処理できないため、最後の無条件実行finally構文として処理します.
Reference
この問題について(3.Example(2)ECLIPSEでのJDBCの使用方法), 我々は、より多くの情報をここで見つけました https://velog.io/@yim5849/JDBC-3.-Example2ECLIPSE에서-JDBC-활용하는-방법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol