일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- CS
- Custom Hook
- useLayoutEffect
- Compound Component
- Microtask Queue
- type assertion
- 암묵적 타입 변환
- useCallback
- 주니어개발자
- react
- Recoil
- Render Queue
- Sparkplug
- zustand
- task queue
- linux 배포판
- 좋은 PR
- Headless 컴포넌트
- jotai
- docker
- 프로세스
- TypeScript
- 명시적 타입 변환
- prettier-plugin-tailwindcss
- AJIT
- Redux Toolkit
- 클라이언트 상태 관리 라이브러리
- 타입 단언
- helm-chart
- JavaScript
Archives
- Today
- Total
구리
TIL_210406_Statement, PreparedStatement 본문
PreparedStatement Class
Statement 클래스와 다르게 객체 생성시 쿼리문을 함께 삽입하며 쿼리문 내부에 변수가 대입될 때는
Statement가 아닌 PreparedStatement Class를 사용한다
Statement, PreparedStatement 클래스 사용법 차이
<Statement>
Connection con = DriverManager.getConnection("url", "사용자 id", "사용자 pwd");
Statement stmt = con.createStatement();
String query = "select * from localoil";
ResultSet total = stmt.executeQuery(query);
<PreparedStatement>
String query = "원하는 쿼리문";
PreparedStatement pstmt = con.prepareStatement(query);
ResultSet rs = pstmt.executeQuery();
int executeUpdate()
업데이트된 문장수를 반환하며 자바에서 오라클 삽입/수정/삭제 쿼리 요청한 후 해당 메서드 호출하면
오라클은 해당 쿼리 실행후 자동 commit ( 데이터 추가, 수정, 삭제시 사용)
ResultSet executeQuery()
select 쿼리문 실행시 결과를 반환한다 (데이터 검색시 사용)
※ 두가지 메서드는 모든 '쿼리문'을 문자열로 전달받기에 eclipse 내에서는 문법 오류가 발생하지 않지만
자바 실행시 오류 발생할 수도 있다
Statement 예제
"delete from gas_station"; 을 자바에서 오라클로 실행요청할경우
String queryDelete = "delete from gas_station";
int n = stmt.executeUpdate(queryDalete); (명령어가 delete이므로 삭제된 문장수 반환)
if(n>0) {
print("삭제성공!"); }
else {
print("삭제실패!");
}
PreparedStatement 예제
String k ="Y";
String query = "select * from gas_station where=?";
(쿼리문 내부 자바 변수가 와야할 자리에 ? 처리)
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setString(1,k); // setString(몇번째 물음표, 원하는 변수) : ?자리에 변수 대입하여 쿼리 실행
ResultSet rs = pstmt.executeQuery();
======================================================================
String s1 = "서울주유소";
String s2 = "서울 강남구";
String s3 = "s-oil";
String s4 = "02-555-1234";
String s5 = "N";
int n1 = 1764;
int n2 = 1500;
String qurey = "insert into gas_station vaules (?, ?, ?, ?, ?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1,s1);
pstmt.setString(2,s2);
pstmt.setString(3,s3);
pstmt.setString(4,s4);
pstmt.setString(5,s5);
pstmt.setInt(6,n1);
pstmt.setInt(7,n2);
int n = pstmt.executeUpdate();
if(n>0){
print("삽입성공!");
}else{
print("삽입실패");
}
SQL 관련 예제
1. best_sandwiches_list_chicago_price_address.xls 읽어서
오라클에 저장 (Rank, Cafe, Menu, Price, Address)
2. 이미지 파일명을 저장 (30, 34 => default.jpg)
오라클에 저장 (이미지.jpg)
오라클 : rank, cafe, menu, price, addr, img <== 필드명
3. 저장된 데이터를 html 로 출력 (10행 5열)
직접 짠 코딩과 설계도
package com.bjy.db;
public class CafeClass {
private int rank = 0;
private String cafe = "";
private String menu = "";
private float price = 0;
private String address = "";
private String img = "";
public CafeClass() {
}
public CafeClass(String rank,String cafe,String menu,String price,String address) {
this.rank = Integer.parseInt(rank);
this.cafe = this.change(cafe);
this.menu = this.change(menu);
this.price = Float.parseFloat(price);
this.address = this.change(address);
}
private String change(String s) {
String n = s.replace("'", "");
return n.replace("&", "and");
}
public int getRank() {
return rank;
}
public String getCafe() {
return cafe;
}
public String getMenu() {
return menu;
}
public float getPrice() {
return price;
}
public String getAddress() {
return address;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
}
package com.bjy.db;
import java.util.ArrayList;
public class DataClass {
public static ArrayList<CafeClass> cafes = new ArrayList<CafeClass>();
public DataClass() {
}
}
package com.bjy.files;
import java.io.File;
import java.io.IOException;
import com.bjy.db.CafeClass;
import com.bjy.db.DataClass;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class ExcelReaderClass {
public ExcelReaderClass() {
}
public static void readExcel(String uri_excel) {
DataClass.cafes.clear();
Workbook wb = null;
Sheet s = null;
File f = new File(uri_excel);
try {
wb = Workbook.getWorkbook(f);
s = wb.getSheet(0);
Cell[] cells = new Cell[5];
int i = 1;
while(true) {
try {
cells[0] = s.getCell(0, i);
cells[1] = s.getCell(1, i);
cells[2] = s.getCell(2, i);
cells[3] = s.getCell(3, i);
cells[4] = s.getCell(4, i);
DataClass.cafes.add(new CafeClass(cells[0].getContents(), cells[1].getContents(), cells[2].getContents(), cells[3].getContents(), cells[4].getContents()));
i++;
}catch(Exception e) {
System.out.println("엑셀 파일 읽기 완료 ");
break;
}
}
} catch (Exception e) {
System.out.println("엑셀 읽기 실패 : " + e.getMessage());
}
}
}
package com.bjy.files;
import java.io.File;
import com.bjy.db.DataClass;
public class ImagesReaderClass {
public ImagesReaderClass() {
}
public static void readImages(String uri_image) {
File f = new File(uri_image);
String[] file_name = f.list();
for(int i=0;i<file_name.length;i++) {
DataClass.cafes.get(i).setImg(file_name[i]);
}
}
}
package com.bjy.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
public class JdbcClass {
private Connection conn = null;
private Statement stmt = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
private final String ORACLE_URI = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
private final String ORACLE_DRIVER = "oracle.jdbc.driver.OracleDriver";
private final String ORACLE_USER = "bjy";
private final String ORACLE_PWD = "qorwjddus96";
public JdbcClass() {
}
public void oracleConnect() {
try {
Class.forName(this.ORACLE_DRIVER);
conn = DriverManager.getConnection(this.ORACLE_URI, this.ORACLE_USER, this.ORACLE_PWD);
System.out.println("오라클 접속 성공 !");
} catch (ClassNotFoundException e) {
System.out.println("오라클 드라이버 로딩 실패 : " + e.getMessage());
} catch (SQLException e) {
System.out.println("오라클 접속 실패 : " + e.getMessage());
}
}
public void insertDB() {
String query = "insert into sandwiches_chicago(rank, cafe, menu, price, address, img) values (?,?,?,?,?,?)";
ArrayList<CafeClass> cafes = DataClass.cafes;
try {
pstmt = this.conn.prepareStatement(query);
for(int i=0;i<cafes.size();i++) {
pstmt.setInt(1, cafes.get(i).getRank());
pstmt.setString(2, cafes.get(i).getCafe());
pstmt.setString(3, cafes.get(i).getMenu());
pstmt.setFloat(4, cafes.get(i).getPrice());
pstmt.setString(5, cafes.get(i).getAddress());
pstmt.setString(6, cafes.get(i).getImg());
int resultNo = this.pstmt.executeUpdate();
System.out.println("데이터 삽입 성공! " + i);
}
}catch(SQLException e) {
System.out.println("insertDB ERR : " + e.getMessage());
}
}
public void countDB() {
String query = "select count(*) from sandwiches_chicago";
try {
this.stmt = this.conn.createStatement();
this.rs = this.stmt.executeQuery(query);
rs.next();
System.out.println("sandwiches_chicago 테이블 레코드 행 갯수 : " + rs.getString(1));
} catch (SQLException e) {
System.out.println("countDB() ERR : " + e.getMessage());
}
}
public ResultSet selectDB() {
String query = "select * from sandwiches_chicago";
ResultSet rs = null;
try {
this.stmt = this.conn.createStatement();
this.rs = this.stmt.executeQuery(query);
rs = this.rs;
return rs;
}catch(SQLException e) {
System.out.println("selectDB() ERR : " + e.getMessage());
}
return rs;
}
}
package com.bjy.out;
import java.io.FileWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
public class PrintClass {
public PrintClass() {
}
public static String makeTags(ResultSet rs) {
String tags = "";
int row = 5;
int column = 10;
tags = tags + "<!doctype>";
tags = tags + "<html>";
tags = tags + "<head><title>sandwiches_in_Chicago</title></head>";
tags = tags + "<body>";
tags += "<table border=1>";
for(int i=0;i<row;i++) {
tags += "<tr>";
for(int j=0;j<column;j++) {
try {
rs.next();
tags += "<td>";
tags += "<table border=1>"; // <table>이라고 하면 줄없이 테이블 생성 <table border=1>로 하면 각 열마다 줄 생성
tags += "<tr><th>" + rs.getInt(1) +". " + rs.getString(2) + "</th></tr>"; // th는 제목
tags += "<tr><td>" + rs.getString(3) + "</td></tr>";
tags += "<tr><td><img src='./images/" + rs.getString(6) + "' width='100' height='100' /></td></tr>";
tags += "<tr><td>$" + rs.getFloat(4) + "</td></tr>";
tags += "<tr><td>" + rs.getString(5) + "</td></tr>";
tags += "</table>";
tags += "</td>";
} catch (SQLException e) {
System.out.println("HTML TAGS ERR : " + e.getMessage());
}
}
tags += "</tr>";
}
tags += "</table>";
tags = tags + "</body>"; // body 닫기
tags = tags + "</html>";
return tags;
}
public static void makeHTML(String tags, String uri_HTML) {
FileWriter fw = null;
try {
fw = new FileWriter(uri_HTML);
fw.write(tags);
}catch(Exception e) {
System.out.println("makeHTML() ERR : " + e.getMessage());
}
}
}
package com.bjy;
import java.sql.ResultSet;
import com.bjy.db.JdbcClass;
import com.bjy.files.ExcelReaderClass;
import com.bjy.files.ImagesReaderClass;
import com.bjy.out.PrintClass;
public class MainClass {
public static void main(String[] args) {
/** 엑셀 문서 읽어서 DataClass.cafes에 저장 **/
String uri_excel = "c:/filetest/best_sandwiches_list_chicago_price_address.xls";
ExcelReaderClass.readExcel(uri_excel);
/** Images폴더의 파일명들 읽어서 DataClass.cafes의 멤버변수 img 변경 **/
String uri_image = "c:/filetest/images";
ImagesReaderClass.readImages(uri_image);
/** 사용자 계정으로 오라클에 접속하는 메서드 실행 **/
JdbcClass jdbc = new JdbcClass();
jdbc.oracleConnect();
/** DataClass.cafes의 멤버변수들을 db에 저장 후 db에 데이터 잘 저장되었는지 레코드 행 개수 확인 **/
// 계속 실행하면 db에 데이터 계속 저장되기에 1번만 실행하고 확인 후 주석 처리
// jdbc.insertDB();
jdbc.countDB();
/** db 정보들 ResultSet 객체로 저장후 반환하여 html 태그 생성 **/
ResultSet rs = jdbc.selectDB();
String tags = PrintClass.makeTags(rs);
/** 태그와 html uri 이용해 html 파일 생성**/
String uri_HTML = "c:/filetest/sandwiches_practice.html";
PrintClass.makeHTML(tags, uri_HTML);
}
}
package com.bjy;
import java.sql.ResultSet;
import com.bjy.db.JdbcClass;
import com.bjy.files.ExcelReaderClass;
import com.bjy.files.ImagesReaderClass;
import com.bjy.out.PrintClass;
public class MainClass {
public static void main(String[] args) {
/** 엑셀 문서 읽어서 DataClass.cafes에 저장 **/
String uri_excel = "c:/filetest/best_sandwiches_list_chicago_price_address.xls";
ExcelReaderClass.readExcel(uri_excel);
/** Images폴더의 파일명들 읽어서 DataClass.cafes의 멤버변수 img 변경 **/
String uri_image = "c:/filetest/images";
ImagesReaderClass.readImages(uri_image);
/** 사용자 계정으로 오라클에 접속하는 메서드 실행 **/
JdbcClass jdbc = new JdbcClass();
jdbc.oracleConnect();
/** DataClass.cafes의 멤버변수들을 db에 저장 후 db에 데이터 잘 저장되었는지 레코드 행 개수 확인 **/
// 계속 실행하면 db에 데이터 계속 저장되기에 1번만 실행하고 확인 후 주석 처리
// jdbc.insertDB();
jdbc.countDB();
/** db 정보들 ResultSet 객체로 저장후 반환하여 html 태그 생성 **/
ResultSet rs = jdbc.selectDB();
String tags = PrintClass.makeTags(rs);
/** 태그와 html uri 이용해 html 파일 생성**/
String uri_HTML = "c:/filetest/sandwiches_practice.html";
PrintClass.makeHTML(tags, uri_HTML);
}
}
'DataBase' 카테고리의 다른 글
TIL_210413_SQL활용(숫자 함수, 날짜 함수, 문자처리 함수, 형변환 함수...) (0) | 2021.04.13 |
---|---|
TIL_210412_SQL활용(집합연산, 집계함수, 중첩질의, VIEW, SEQUENCE) (0) | 2021.04.12 |
TIL_210408_레코드 검색, 재명명, LIKE 연산자 (0) | 2021.04.11 |
TIL_210408_데이터&데이터베이스, 관계형 데이터베이스, 릴레이션,키 (0) | 2021.04.08 |
TIL_210405_SQL로 Oracle Database 다루기, 자바&Oracle 연결 (0) | 2021.04.05 |