[Java] JDBC(Java DataBase Connectivity)
9142 ワード
JDBC処理手順
≪ドライバのロード|Load Driver|emdw≫:ライブラリで使用するメモリを取得する操作.(ライブラリにDBとJAVAを関連付けるクラスがあります.)
Class.forName("oracle.jdbc.driver.OracleDriver");
≪データベース・システムの接続|Connection Database System|oem_src≫:接続が完了すると、接続オブジェクトが作成されます.
DriverManager.getConnection()メソッドを使用します.
DriverManager.getConnection(「jdbc:oracle:thin:@oracleサーバIPアドレス:ポート番号:SID値」,user,password)
クエリー:クエリーを処理します.SQL文をDBサーバに送信し、結果を取得します.
(StatementオブジェクトまたはPreparedStatementオブジェクトを使用します.)
結果処理:クエリー結果を受信し、必要な操作を実行します.
1)SQL文がSELECT文である場合:SELECTの結果はResultSetオブジェクトに格納され、返されます.
2)SQL文がINSERT、UPDATE、DELETE文である場合:整数値は半である.(この整数値は、正常に実行されたレコードの数を表します.)
ユーザーが使用しているリソースを返却します.
close()メソッドを使用します.
例1
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
// JDBC(Java DataBase Connectivity) 라이브러리를 이용한 DB자료 처리하기
/*
- JDBC 처리 순서
1. 드라이버 로딩 : 라이브러리를 사용할 수 있게 메모리로 읽어들이는 작업.
(라이브러리에는 DB와 JAVA를 연동해주는 클래스가 있다.)
Class.forName("oracle.jdbc.driver.OracleDriver");
2. DB시스템에 접속하기 : 접속이 완료되면 Connection객체가 생성된다.
DriverManager.getConnection()메서드를 이용한다.
DriverManager.getConnection("jdbc:oracle:thin:@오라클서버IP주소:포트번호:SID값",user,password)
3. 질의 : 쿼리를 처리한다. SQL문장을 DB서버로 보내서 결과를 얻어온다.
(Statement객체 또는 PreparedStatemnet객체를 이용하여 작업한다.)
4. 결과 처리 : 질의 결과를 받아서 원하는 작업을 수행한다.
1) SQL문이 SELECT문일 경우: SELECT한 결과가 ResultSet객체에 저장되어 반환된다.
2) SQL문이 INSERT, UPDATE, DELETE문일 경우: 정수값이 반횐된다.
(이 정수값은 실행에 성공한 레코드 수를 의미한다.)
5. 사용자가 사용한 자원을 반납한다.
close() 메서드를 이용한다.
*/
public class JdbcTest01 {
public static void main(String[] args) {
// DB작업에 필요한 객체변수 선언
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//1. 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
//2. DB연결: Connection객체 생성
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","JHY990208","java");
//3. 질의
//3-1) 실행할 SQL문 작성
String sql = "select * from lprod";
//3-2) Statement객체 또는 PreparedStatement객체를 생성한다. (Connection객체를 이용하여 생성한다.)
stmt = conn.createStatement();
//3-3) SQL문을 DB서버로 보내서 실행한 결과를 얻어온다. 지금은 실행한 SQL문이 SELECT문이라 결과가 ResultSet객체에 저장되어 반환된다.
rs = stmt.executeQuery(sql);
//4. 결과 처리
// rs.next(): ResultSet객체의 데이터를 가리키는 포인터를 다음위치로 이동하고 그 곳에 데이터가 있으면 true를 반환한다.
// 데이터하나가 레코드
while(rs.next()){
// 포인터가 가리키는 곳의 자료 가져오기
// 형식1) rs.get가져올데이터의자료형("컬럼명")
// 형식2) rs.get가져올데이터의자료형(컬럼번호) : 컬럼번호는 1부터 시작한다. 0부터아님
// 형식3) rs.get가져올데이터의자료형("컬럼의 alias명")
System.out.println("lprod_id: "+rs.getInt("lprod_id"));
System.out.println("lprod_gu: "+rs.getString(2));
System.out.println("lprod_nm: "+rs.getString("lprod_nm"));
System.out.println();
}
} catch (SQLException e) {
// TODO: handle exception
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
// 5. 자원 반납 : 만들어진 순의 역순으로
if(rs!=null) try {
rs.close();
} catch (SQLException e) {
// TODO: handle exception
}
if(stmt!=null) try {
stmt.close();
} catch (SQLException e) {
// TODO: handle exception
}
if(conn!=null) try {
conn.close();
} catch (SQLException e) {
// TODO: handle exception
}
}
}
}
例2)ユーザからlprod id値を入力し、lprod idが入力値より大きいデータを出力する。
int num = sc.nextInt();
String sql = "select * from lprod where lprod_id > "+num;
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class JdbcTest02 {
//문제) 사용자로부터 lprod_id값을 입력받아 입력한 값보다
lprod_id가 큰 자료를 출력하시오.
public static void main(String[] args) {
// DB작업에 필요한 객체변수 선언
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
Scanner sc = new Scanner(System.in);
try {
//1. 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
//2. DB연결: Connection객체 생성
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","JHY990208","java");
//3. 질의
//3-1) 실행할 SQL문 작성
System.out.println("입력하세요");
int num = sc.nextInt();
String sql = "select * from lprod where lprod_id > "+num;
//3-2) Statement객체 또는 PreparedStatement객체를 생성한다. (Connection객체를 이용하여 생성한다.)
stmt = conn.createStatement();
//3-3) SQL문을 DB서버로 보내서 실행한 결과를 얻어온다.
지금은 실행한 SQL문이 SELECT문이라 결과가 ResultSet객체에 저장되어 반환된다.
rs = stmt.executeQuery(sql);
//4. 결과 처리
// rs.next(): ResultSet객체의 데이터를 가리키는 포인터를 다음위치로 이동하고 그 곳에 데이터가 있으면 true를 반환한다.
// 데이터하나가 레코드
while(rs.next()){
// 포인터가 가리키는 곳의 자료 가져오기
// 형식1) rs.get가져올데이터의자료형("컬럼명")
// 형식2) rs.get가져올데이터의자료형(컬럼번호) : 컬럼번호는 1부터 시작한다. 0부터아님
// 형식3) rs.get가져올데이터의자료형("컬럼의 alias명")
System.out.println("lprod_id: "+rs.getInt("lprod_id"));
System.out.println("lprod_gu: "+rs.getString(2));
System.out.println("lprod_nm: "+rs.getString("lprod_nm"));
System.out.println();
}
} catch (SQLException e) {
// TODO: handle exception
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
// 5. 자원 반납 : 만들어진 순의 역순으로
if(rs!=null) try {
rs.close();
} catch (SQLException e) {
// TODO: handle exception
}
if(stmt!=null) try {
stmt.close();
} catch (SQLException e) {
// TODO: handle exception
}
if(conn!=null) try {
conn.close();
} catch (SQLException e) {
// TODO: handle exception
}
}
}
}
例3)2つのlprod id値を入力し、2つの値のうち小さい値から大きい値の間のデータを出力する
String sql = "select * from lprod where lprod_id BETWEEN "+num1+"AND "+num2;
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
// 문제) lprod_id값을 2개 입력 받아서 두 값중 작은 값부터 큰값사이의 자료를 출력하시오
public class JdbcTest03 {
public static void main(String[] args) {
// DB작업에 필요한 객체변수 선언
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
Scanner sc = new Scanner(System.in);
try {
//1. 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
//2. DB연결: Connection객체 생성
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","JHY990208","java");
//3. 질의
//3-1) 실행할 SQL문 작성
System.out.println("lprod_id1값을 입력하세요");
int num1 = sc.nextInt();
System.out.println("lprod_id2값을 입력하세요");
int num2 = sc.nextInt();
int max = Math.max(num1, num2);
int min = Math.min(num1, num2);
/*String sql = "select * from lprod where lprod_id BETWEEN "+num1+" AND "+num2;*/
String sql = "select * from lprod where lprod_id >= " +min+ " AND lprod_id<= "+max;
//3-2) Statement객체 또는 PreparedStatement객체를 생성한다. (Connection객체를 이용하여 생성한다.)
stmt = conn.createStatement();
//3-3) SQL문을 DB서버로 보내서 실행한 결과를 얻어온다. 지금은 실행한 SQL문이 SELECT문이라 결과가 ResultSet객체에 저장되어 반환된다.
rs = stmt.executeQuery(sql);
//4. 결과 처리
// rs.next(): ResultSet객체의 데이터를 가리키는 포인터를 다음위치로 이동하고 그 곳에 데이터가 있으면 true를 반환한다.
// 데이터하나가 레코드
while(rs.next()){
// 포인터가 가리키는 곳의 자료 가져오기
// 형식1) rs.get가져올데이터의자료형("컬럼명")
// 형식2) rs.get가져올데이터의자료형(컬럼번호) : 컬럼번호는 1부터 시작한다. 0부터아님
// 형식3) rs.get가져올데이터의자료형("컬럼의 alias명")
System.out.println("lprod_id: "+rs.getInt("lprod_id"));
System.out.println("lprod_gu: "+rs.getString(2));
System.out.println("lprod_nm: "+rs.getString("lprod_nm"));
System.out.println();
}
} catch (SQLException e) {
// TODO: handle exception
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
// 5. 자원 반납 : 만들어진 순의 역순으로
if(rs!=null) try {
rs.close();
} catch (SQLException e) {
// TODO: handle exception
}
if(stmt!=null) try {
stmt.close();
} catch (SQLException e) {
// TODO: handle exception
}
if(conn!=null) try {
conn.close();
} catch (SQLException e) {
// TODO: handle exception
}
}
}
}
Reference
この問題について([Java] JDBC(Java DataBase Connectivity)), 我々は、より多くの情報をここで見つけました https://velog.io/@vgo_dongv/Java-JDBCJava-DataBase-Connectivityテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol