728x90
package db;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//---------------------------------------------------------------------------
// Scott Schema에 있는 Emp테이블의 정보를 가져오는 클래스
//---------------------------------------------------------------------------
public class ScottSelectEmp {
//---------------------------------------------------------------------------
// public static void main(String[] args)
//---------------------------------------------------------------------------
public static void main(String[] args) {
Connection conn = null; // DB에 연결된 상태(세션)를 담을 객체
PreparedStatement pstmt = null; // SQL문을 나타내는 객체
ResultSet rs = null; // 쿼리문을 실행한 결과를 담을 객체
// 쓰고난 후에는 닫아줘야한다. 닫을때는 반대로 닫는다.
try {
// SQL 문장을 만들고 만약에 문자와 질의어(SELECT)라면
// 그 결과를 담을 ResultSet 객체를 준비한 후에 실행한다.
// 사원테이블(emp)에서 모든 정보를 사원번호 순으로 추출하자!
String sql = "SELECT * FROM emp ORDER BY empno ";
// 드라이버를 로딩하고, DB에 접속한다.
conn = DBConnection.getConnection();
// 커넥션을 맺은 곳에 질문할 준비를 한다.
pstmt = conn.prepareStatement(sql);
// 준비한 질문을 실행시키고, 결과값을 ResultSet에 넣는다.
rs = pstmt.executeQuery();
// 찾아온 데이터를 화면에 보여주자.
System.out.println("EMPNO\tENAME\tJOB\tMGR\tHIREDATE\tSAL\tCOMM\tDEPTNO");
System.out.println("=========================================================================");
while(rs.next()) {
int empno = rs.getInt("empno");
String ename = rs.getString(2);
String job = rs.getString("job");
int mgr = rs.getInt("mgr");
Date hiredate = rs.getDate(5); // hiredate => java.sql.Date
int sal = rs.getInt(6);
int comm = rs.getInt(7);
int deptno = rs.getInt(8);
String result = empno+"\t"+ename+"\t"+job+"\t"+mgr+"\t"+hiredate+"\t"+sal+"\t"+comm+"\t"+deptno;
System.out.println(result);
}
} catch (SQLException sple) {
System.out.println("SELECT 문에서 예외가 발생하였습니다.");
} finally {
// DB 연결을 종료하기 전에 열려진 자원을 닫는다.
try {
if(rs != null) { rs.close(); }
if(pstmt != null) { pstmt.close(); }
if(conn != null) { conn.close(); }
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
} // End - public static void main(String[] args)
} // End - public class ScottSelectEmp
package db;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
//---------------------------------------------------------------------------
// 테이블의 구조를 알아내는 클래스
//---------------------------------------------------------------------------
public class TableDesc {
//---------------------------------------------------------------------------
// public static void main(String[] args)
//---------------------------------------------------------------------------
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader (System.in));
Connection conn = null; // DB에 연결된 상태(세션)를 담을 객체
Statement stmt = null; // SQL문을 나타내는 객체
ResultSet rs = null; // 쿼리문을 실행한 결과를 담을 객체
ResultSetMetaData rsmd = null;
/* ResultSetMetaData
*
* meta-data ?
* 데이터의 데이터라고 할 수 있다.
* 즉, 우리가 사용하는 데이터베이스 내의 데이터를 구성하는 주변 정보들을 말한다.
* 예를들어 컬럼명, 컬럼타입, 컬럼 카운트 등등을 메타 데이터라고 할 수 있다.
*
* ResultSet 자체가 쿼리문의 결과를 가져오는것이고,
* ResultSetMetaData 역시 쿼리문의 결과를 가져온 ResultSet에 대한 메타 데이터를 가져오는 것이다.
*
* ResultSetMetaData는 아래와 같은 메서드들을 가지고 있다.
* int getColumnCount() : 컬럼의 갯수를 리턴
* String getColumnLabel(int index) : index의 컬럼명(Select enames AS EN 같은 경우는 EN을 의미한다.)
* String getColumnName(int index) : index의 컬럼명(Select enames AS EN 같은 경우는 enames을 의미한다.)
* int getColumnType(int index) : index의 컬럼타입의 정수형(ex, VARCHAR는 12이다.)
* String getColumnTypeName(int index) : index의 컬럼타입을 직접적인 문자로 리턴한다.
* int getColumnDisplaySize(int index) : index의 컬럼에 지정된 데이터의 길이를 리턴한다.
*/
try {
conn = DBConnection.getConnection(); // DB 접속
String fromTable;
String sql;
System.out.print("보시고자하는 테이블의 이름을 입력하십시오");
fromTable = br.readLine();
sql = "SELECT * FROM " + fromTable;
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount(); // 컬럼의 갯수
System.out.println("컬럼명\t타입\t타입명\t폭");
System.out.println("=========================================================");
// 데이터베이스의 인덱스는 1부터 시작한다.
for(int i = 1; i <= cols; i++) {
System.out.print(rsmd.getColumnName(i) + "\t");
System.out.print(rsmd.getColumnType(i) + "\t");
System.out.print(rsmd.getColumnTypeName(i) + "\t");
System.out.print(rsmd.getPrecision(i) + "\t");
System.out.println();
}
} catch (SQLException sple) {
System.out.println("SELECT 문에서 예외가 발생하였습니다.");
} catch (Exception ie) {
ie.printStackTrace();
} finally {
// DB 연결을 종료하기 전에 열려진 자원을 닫는다.
try {
if(rs != null) { rs.close(); }
if(stmt != null) { stmt.close(); }
if(conn != null) { conn.close(); }
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
} // End - public static void main(String[] args)
} // End - public class TableDesc
package db;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class RowsDisplay {
public static void main(String[] args) {
Connection conn = null; // DB에 연결된 상태(세션)를 담을 객체
Statement stmt = null; // SQL문을 나타내는 객체
ResultSet rs = null; // 쿼리문을 실행한 결과를 담을 객체
String sql = "";
try {
conn = DBConnection.getConnection(); // DB접속
/* 기본은 순방향만 검색 가능
* 순방향과 역방향 모두 검색 가능
* TYPE_SCROLL_SENSITIVE : 변경 내용이 바로 반영
* TYPE_SCROLL_INSENSITIVE : 변경 내용이 바로 반영이 안됨
* CONCUR_READ_ONLY : 읽기 전용
* CONCUR_UPDATE : 읽기, 수정 가능
*/
sql = "SELECT * FROM emp ORDER BY empno";
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
char ch; // 키보드 입력한 값을 저장할 변수
while(true) {
do {
System.out.print("1.처음 2.이전 3.다음 4.마지막 5.종료");
// read()는 한 문자만을 입력받으므로, 버퍼로 인해서 예상치 못한 경우가 발생할 수 있다.
ch = (char)System.in.read();
// System.in.skip(2) : 연속해서 두번 또는 그 이상의 문자를 입력받는 경우에는
// 반드시 skip() 메서드를 사용해서 버퍼에 쌓인 개행 문자를 버리도록 한다.
} while(ch < '1' || ch > '5');
switch(ch) {
case '1':
if(rs.first())
System.out.println("처음 : " + rs.getString(1) + ":" + rs.getString(2));
break;
case '2':
if(rs.previous())
System.out.println("이전 : " + rs.getString(1) + ":" + rs.getString(2));
break;
case '3':
if(rs.next())
System.out.println("다음 : " + rs.getString(1) + ":" + rs.getString(2));
break;
case '4':
if(rs.last())
System.out.println("마지막 : " + rs.getString(1) + ":" + rs.getString(2));
break;
case '5':
rs.close();
System.exit(0);
break;
}
}
} catch (SQLException sple) {
System.out.println("SELECT 문에서 예외가 발생하였습니다.");
} catch (Exception ie) {
ie.printStackTrace();
} finally {
// DB 연결을 종료하기 전에 열려진 자원을 닫는다.
try {
if(rs != null) { rs.close(); }
if(stmt != null) { stmt.close(); }
if(conn != null) { conn.close(); }
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
}
}
package db;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Scanner;
//---------------------------------------------------------------------------
// Scott schema 테이블 관리 클래스
//---------------------------------------------------------------------------
public class ScottMgr {
static Scanner keyboard = new Scanner(System.in);
static Connection conn = null; // DB에 연결된 상태(세션)를 담을 객체
static PreparedStatement pstmt = null; // SQL문을 나타내는 객체
static ResultSet rs = null; // 쿼리문을 실행한 것에 대한 반환 값을 담을 객체
static ResultSetMetaData rsmd = null; // 테이블의 메타데이터를 가리키는 객체
static String sql = ""; // 쿼리문장을 저장할 변수
static String[] FromTable = {"EMP", "DEPT", "SALGRADE"};
//---------------------------------------------------------------------------
// 메뉴 1 (테이블 선택)
//---------------------------------------------------------------------------
public static void showMenu1() {
System.out.println("작업하고자 하는 테이블을 선택하십시오.");
System.out.println("0. 프로그램 종료");
System.out.println("1. EMP TABLE");
System.out.println("2. DEPT TABLE");
System.out.println("3. SALGRADE TABLE");
System.out.print("선택 : ");
} // End - public static void showMenu1()
//---------------------------------------------------------------------------
// 메뉴 2 (작업 선택 : 조회, 입력, 수정, 삭제)
//---------------------------------------------------------------------------
public static void showMenu2() {
System.out.println("하시고자 하는 작업을 선택하십시오.");
System.out.println("0. 조인");
System.out.println("1. 조회");
System.out.println("2. 입력");
System.out.println("3. 수정");
System.out.println("4. 삭제");
System.out.print("선택 : ");
}
//---------------------------------------------------------------------------
// public static void main(String[] args)
//---------------------------------------------------------------------------
public static void main(String[] args) {
int choice1 = 0; // 선택한 테이블 번호를 저장할 변수
while(true) {
showMenu1(); // 테이블을 선택할 수 있게 메뉴를 보여준다.
choice1 = keyboard.nextInt();
keyboard.nextLine();
switch(choice1) {
/*case 1: subMenu(1);
break;
case 2: subMenu(2);
break;
case 3: subMenu(3);
break;
*/
case 1: case 2: case 3:
subMenu(choice1);
break;
case 0: System.out.println("프로그램을 종료합니다.");
return;
default: System.out.println("번호를 정확하게 입력하십시오.");
break;
}
}
} // End - public static void main(String[] args)
//---------------------------------------------------------------------------
// public static void main(String[] args)
//---------------------------------------------------------------------------
public static void subMenu(int choice1) {
int choice2; // 조회, 입력, 수정, 삭제를 선택할 값을 저장 할 변수
while(true) {
showMenu2();
choice2 = keyboard.nextInt();
keyboard.nextLine();
switch(choice2) {
case 0: System.out.println("메인메뉴로 돌어갑니다.");
return;
case 1: selectTable(choice1); // 조회
break;
case 2: insertTable(choice1); // 입력
break;
default: System.out.println("작업할 번호를 정확하게 입력하십시오.");
break;
}
}
}
//---------------------------------------------------------------------------
// SELECT : 선택한 테이블의 모든 정보를 보여주자.
//---------------------------------------------------------------------------
public static void selectTable(int selectTb) {
System.out.println("선택한 테이블 : " + FromTable[selectTb-1]);
try {
sql = "";
sql = "SELECT * FROM " + FromTable[selectTb-1];
conn = DBConnection.getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
rsmd = rs.getMetaData();
System.out.println("===================================================================");
System.out.println(FromTable[selectTb-1]);
System.out.println("===================================================================");
int cols = rsmd.getColumnCount(); // 선택한 테이블의 컬럼 갯수를 알아낸다.
for(int i = 1; i <= cols; i++) {
System.out.print(rsmd.getColumnName(i) + "\t"); // 컬럼명을 보여준다.
}
System.out.println();
System.out.println("===================================================================");
// 데이터를 화면에 출력한다.
while(rs.next()) {
for(int i = 1; i <= cols; i++) {
System.out.print(rs.getString(i) + "\t");
}
System.out.println(); // 1건의 데이터를 화면에 출력하고 나면 줄바꿈을 한다.
}
} catch (SQLException sple) {
System.out.println("SELECT 문에서 예외가 발생하였습니다.");
} finally {
// DB 연결을 종료하기 전에 열려진 자원을 닫는다.
} try {
if(rs != null) { rs.close(); }
if(pstmt != null) { pstmt.close(); }
if(conn != null) { conn.close(); }
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
//---------------------------------------------------------------------------
// INSERT : 데이터를 테이블에 등록하는 메서드
//---------------------------------------------------------------------------
public static void insertTable(int selectTb) {
System.out.println("선택한 테이블 : " + FromTable[selectTb-1]);
try {
if(selectTb == 1) {
System.out.print("EMPNO : ");
int empno = keyboard.nextInt(); keyboard.nextLine();
System.out.print("ENAME : ");
String ename = keyboard.nextLine();
System.out.print("JOB : ");
String job = keyboard.nextLine();
System.out.print("MGR : ");
int mgr = keyboard.nextInt(); keyboard.nextLine();
System.out.print("SAL : ");
int sal = keyboard.nextInt(); keyboard.nextLine();
System.out.print("COMM : ");
int comm = keyboard.nextInt(); keyboard.nextLine();
System.out.print("DEPTNO : ");
int deptno = keyboard.nextInt(); keyboard.nextLine();
sql = "";
sql = "INSERT INTO " + FromTable[selectTb-1] + " VALUES(?,?,?,?,NOW(),?,?,?)";
// 드라이버를 로딩하고 DB에 접속한다.
conn = DBConnection.getConnection();
// 커넥션을 맺은 곳에 질문할 준비를 한다.
pstmt = conn.prepareStatement(sql);
pstmt.setInt (1, empno);
pstmt.setString (2, ename);
pstmt.setString (3, job);
pstmt.setInt (4, mgr);
pstmt.setInt (5, sal);
pstmt.setInt (6, comm);
pstmt.setInt (7, deptno);
} else if(selectTb == 2) {
} else if(selectTb == 3) {
}
// 입력, 수정, 조회 쿼리문의 실행을 공동으로 사용한다.
int rtnCount = pstmt.executeUpdate(); // 입력, 수정, 삭제는 결과 값으로 실행된 건수를 반환한다.
if(rtnCount > 0) {
System.out.println(rtnCount + "건이 실행되었습니다.");
} else {
System.out.println("입력,수정,삭제 작업 실패.....");
}
} catch (SQLException sple) {
System.out.println("SELECT 문에서 예외가 발생하였습니다.");
} finally {
// DB 연결을 종료하기 전에 열려진 자원을 닫는다.
} try {
if(rs != null) { rs.close(); }
if(pstmt != null) { pstmt.close(); }
if(conn != null) { conn.close(); }
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
} // End - public class ScottMgr
package db;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
//---------------------------------------------------------------------------
// 사용자가 입력한 SELECT Query를 실행하는 클래스
//---------------------------------------------------------------------------
public class SelectDisplay {
//---------------------------------------------------------------------------
// public static void main(String[] args)
//---------------------------------------------------------------------------
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ResultSetMetaData rsmd = null;
Scanner query = new Scanner(System.in);
try {
String sql = "";
int cols = 0;
System.out.println("SELECT 쿼리문을 작성하십시오.");
System.out.println("끝에 세미콜론(;)을 붙이지 마십시오.");
System.out.print("SQL > ");
sql = query.nextLine(); // 쿼리문을 입력한다.
conn = DBConnection.getConnection(); // DB에 접속한다.
stmt = conn.createStatement(); // 접속한 곳에 쿼리문을 사용할 준비를 한다.
rs = stmt.executeQuery(sql); // 쿼리를 실행한다.
rsmd = rs.getMetaData(); // 메타데이터를 가져온다.
cols = rsmd.getColumnCount(); // 컴럼의 갯수를 알아낸다.
System.out.print("\n\t");
for(int i = 1; i <= cols; i++) {
System.out.print(rsmd.getColumnName(i) + "\t");
}
System.out.println();
System.out.println("=============================================================================================");
System.out.println();
while(rs.next()) {
System.out.println("\t");
for(int i = 1; i <= cols; i++) {
System.out.print(rs.getString(i) + "\t");
}
System.out.println();
}
} catch (SQLException sqle) {
System.out.println("쿼리문을 실행하는 중에 예외가 발생하였습니다.");
sqle.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(rs != null) { rs.close(); }
if(stmt != null) { stmt.close(); }
if(conn != null) { conn.close(); }
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
} // End - public static void main(String[] args)
} // End - public class SelectDisplay
package db;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.sql.*;
//---------------------------------------------------------------------------
// Scott Schema에 있는 Table을 선택하여 데이터 보기
//---------------------------------------------------------------------------
public class ScottTbSwing extends JFrame {
Container contentPane; // 작업영역
JRadioButton[] radioTb = new JRadioButton[3]; // 테이블 선택
static String[] tbNames = {"EMP", "DEPT", "SALGRADE"}; // 테이블 목록
static JTextArea tbView = new JTextArea(24, 100); // 쿼리를 실행한 결과를 보여줄 영역
static JLabel viewLabel;
static JTextField sqlEdit; // 쿼리를 직접 작성하는 영역
//---------------------------------------------------------------------------
// 생성자
//---------------------------------------------------------------------------
ScottTbSwing() { // 생성자는 리턴값이 없
setTitle("Scott Schema Table 조회");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = getContentPane(); // 작업영역을 알아낸다.
tbView.setBackground(Color.YELLOW);
tbView.setFont(new Font("Serif", Font.PLAIN, 22));
// 작업영역에 tbView Panel을 부착한다.
contentPane.add(new TbViewPanel(), BorderLayout.CENTER);
setSize(1700, 800);
setLocation(100, 100);
setVisible(true);
} // End - 생성자
//---------------------------------------------------------------------------
// class TbViewPanel : 내부 클래스
//---------------------------------------------------------------------------
class TbViewPanel extends JPanel {
JButton btnSQL;
JPanel radioPanel = new JPanel(); // 테이블을 선택하는 라디오버튼들, 쿼리문 입력, 쿼리 실행 버튼
JPanel viewPanel = new JPanel(); // Select한 결과를 보여주는 View
//---------------------------------------------------------------------------
// 생성자
//---------------------------------------------------------------------------
TbViewPanel() {
ButtonGroup tableGrp = new ButtonGroup(); // 버튼 그룹 객체 생성
for(int i = 0; i < radioTb.length; i++) {
radioTb[i] = new JRadioButton(tbNames[i]); // 라디오 버튼 생성
if(i == 0) radioTb[0].setSelected(true); // 첫번째 라디오 버튼을 선택된 상태로 설정한다.
tableGrp.add(radioTb[i]); // 버튼 그룹에 생성한 라디오 버튼을 장착한다.
radioPanel.add(radioTb[i]); // 판넬에 버튼을 장착한다.
}
sqlEdit = new JTextField(60);
sqlEdit.setBackground(Color.GREEN);
sqlEdit.setFont(new Font("Arial", Font.BOLD+Font.ITALIC, 18));
radioPanel.add(sqlEdit);
btnSQL = new JButton("SQL");
// btnSQL 버튼에 ActionListener를 등록한다.
btnSQL.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(radioTb[0].isSelected()) { // Emp Table
selectTable(0);
} else if(radioTb[1].isSelected()) { // Dept Table
selectTable(1);
} else if(radioTb[2].isSelected()) { // Salgrade Table
selectTable(2);
}
}
});
radioPanel.add(btnSQL);
radioPanel.add(tbView);
add(new JScrollPane(tbView));
contentPane.add(radioPanel, BorderLayout.NORTH);
} // End - 생성자
} // End - class TbViewPanel extends JPanel
public static void selectTable(int selectTb) {
Connection conn = null; // DB가 연결된 상태(세션)를 담을 객체
PreparedStatement pstmt = null; // SQL 문을 담을 객체
ResultSet rs = null; // Query문을 실행한 결괏값을 담을 객체
ResultSetMetaData rsmd = null; // MetaData를 담을 객체
try {
String sql = "";
if(!sqlEdit.getText().equals("")) sql = sqlEdit.getText();
else sql = "SELECT * FROM " + tbNames[selectTb];
conn = DBConnection.getConnection(); // DB와 연결
pstmt = conn.prepareStatement(sql); // 연결된 곳에 쿼리를 준비한다.
rs = pstmt.executeQuery(); // 질의한 쿼리의 결과를 담는다.
rsmd = rs.getMetaData(); // rs에서 메타데이터를 가져온다.
int cols = rsmd.getColumnCount(); // Select된 컬럼의 갯수를 알아낸다.
int spLength = 0; // 컬럼 전체의 길이
// 컬럼명을 출력한다.
for(int i = 1; i <= cols; i++) {
tbView.append(" " + rsmd.getColumnName(i) + "\t");
// System.out.println(rsmd.getColumnDisplaySize(i));
// rsmd.getColumnDisplaySize(i) : 컬럼의 길이
spLength = spLength + rsmd.getColumnDisplaySize(i);
}
tbView.append("\n");
spLength = spLength + 8 * (rsmd.getColumnCount() - 1);
for(int i = 0; i < spLength; i++) {
tbView.append("=");
}
tbView.append("\n");
// 쿼리의 실행결과로 반환된 데이터를 출력한다.
while(rs.next()) { // row
for(int i = 1; i <= cols; i++) { // column
tbView.append(" " + rs.getString(i) + "\t");
}
tbView.append("\n");
}
for(int i = 0; i < spLength*1.7; i++) {
tbView.append("-");
}
tbView.append("\n");
} catch (SQLException sqle) {
System.out.println("쿼리문을 실행하는 중에 예외가 발생하였습니다.");
sqle.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(rs != null) { rs.close(); }
if(pstmt != null) { pstmt.close(); }
if(conn != null) { conn.close(); }
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
}
//---------------------------------------------------------------------------
// public static void main(String[] args)
//---------------------------------------------------------------------------
public static void main(String[] args) {
new ScottTbSwing();
} // End - public static void main(String[] args)
} // End - public class ScottTbSwing
'Programming > MySQL' 카테고리의 다른 글
[MySQL] 타입 변환 BINARY, CAST(), CONVERT() (0) | 2022.09.08 |
---|---|
[MySQL] 패턴 매칭 LIKE, REGEXP (0) | 2022.09.08 |
[MySQL] 흐름 제어 CASE, IF(), IFNULL(), NULLIF() (0) | 2022.09.08 |
[MySQL] 비트 연산자 (bitwise operator) (0) | 2022.09.08 |
[MySQL] 논리 연산자 (logical operator) (0) | 2022.09.08 |