핫돌의 잡 지식 놓는 곳

언젠가 사용할지도 모르는 JSP PreparedStatement

핫돌 2024. 6. 26. 22:37
728x90
반응형

ava.sql.PreparedStatement

자바에서 SQL 쿼리를 실행할 때 사용하는 클래스.

PreparedStatement는 자바 페키지에 있는 SQL 페키지 소속이고, PreparedStatement는 준비된 실행문이라는 의미를 가지고 있다.

test01에 있는 SQL을 DB에 보내고 싶을 때 connection을 통해  PreparedStatement라는 객체를 통해 SQL 문장을 준비한다고 생각하면 쉽다. 

PreparedStatement의 setString(), setInt(), setDouble()
>쿼리문이 유동적인 경우‘?’로 대체할 수 있음
EX)이름이랑 이메일 입력받아서 입력받은 데이터를 그대로 SQL로 보내는 실습을 했는데, 이름이 핫돌 엑셀 등 직접 SQL 쿼리로 작성을 하면 어떠한 변수로 사용을 했어야 했는데.
 
  System.out.print("이름:");
    name = sc.next();
    System.out.print("이메일:");
    email = sc.next();
_________________________이름 이메일을 받아서 
ps = con.prepareStatement("INSERT INTO account VALUES('"+name+"',acc_seq.NEXTVAL,'"+email+"',1000,SYSDATE)");
_______________________name를  email을 유동적으로 받을 수 있다. 



>‘?’에 대체할 데이터가 문자열이라면 setString()을, 정수라면 setInt(),실수는 setDouble()등을 사용
>예.
ps = con.prepateStatement("SELECT*FROM student WHERE st_name = ? st_NO = ?");
//+name+ 대신에 SELECT*FROM 모든 데이터를 조회하세요 student 테이블에서  st_name = ? 그리고  st_NO = ?가 ? 인  윗  문장대신 지금처럼 물음표로 대체 할 수 있다.
ps.setString(1,"홍길동");//1번 물음표 자리에 “홍길동”을 String 형태로 삽입하라(외따옴표 추가됨)
ps.setlnt(2,3);//2번 물음표 자리에 3을 int 형태로 삽입하라.
데이터를 채우는 방법은 ps.setString(1,"홍길동");와 ps.setlnt(2,3); 가 있고 스트렝이냐 숫자냐 선택 하는 것

일단, class를 만들고 test04내용을 모두 복사합니다.

test04내용을 조금 지워 지금과 같은 문장을 씁니다.

package com.goodjobedu.basic;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.util.Scanner;

 

public class test05 {

public static void main(String[] args) {

String id = "myJsp";

String password = "jsppassword";

String ur1 = "jdbc:oracle:thin:@localhost:1521:xe"; //Test01을만들었는데예전에만든DB

 

Connection con = null;

PreparedStatement ps = null;

 

 

try {

//커넥션준비

Class.forName("oracle.jdbc.driver.OracleDriver");

con = DriverManager.getConnection(ur1, id, password);

 

}catch(Exception e) {

e.printStackTrace();

}finally{

try {

if(ps != null){ps.close();}

if(con != null) {con.close();}

}catch(Exception e) {

e.printStackTrace();

}

}

 

}

}

 

//id, password,URL(데이터베이스 위치), con(커넥션),ps(쿼리문을 날려줄 객체),

그리고 클레스로드와 커넥션 연결 그리고 마지막으로 모든 것을 닫는 반드시 실행하는 finallytry catch가 있다.

package com.goodjobedu.basic;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.util.Scanner;

 

public class test05 {

public static void main(String[] args) {

String id = "myJsp";

String password = "jsppassword";

String ur1 = "jdbc:oracle:thin:@localhost:1521:xe"; //Test01을만들었는데예전에만든DB

 

Connection con = null;

PreparedStatement ps = null;

 

 

try {

//커넥션준비

Class.forName("oracle.jdbc.driver.OracleDriver");

con = DriverManager.getConnection(ur1, id, password);

 

//student 테이블에, 입력받은학생이름, 연락처를레코드로추가해보자.

Scanner sc = new Scanner(System.in);

String name;

String tel;

System.out.print("학생이름:");

name = sc.next();

System.out.println("학생연락처:");

tel = sc.next();

 

String sql = "INSERT INTO student VALUES(st_seq.NEXTVAL,?,?,0,0,0,0,SYSDATE)";

 

 

}catch(Exception e) {

e.printStackTrace();

}finally{

try {

if(ps != null){ps.close();}

if(con != null) {con.close();}

}catch(Exception e) {

e.printStackTrace();

}

}

 

}

}

//나머지 문장에

Scanner sc = new Scanner(System.in);

String name;

String tel;

System.out.print("학생이름:");

name = sc.next();

System.out.println("학생연락처:");

tel = sc.next();

 

String sql = "INSERT INTO student VALUES(st_seq.NEXTVAL,?,?,0,0,0,0,SYSDATE)";

try안에 채워줍니다. 첫 번째 물음표는 이름 두 번째 물음표는 전화번호를 입력할 예정입니다.

 

String sql = "INSERT INTO student VALUES(st_seq.NEXTVAL,?,?,0,0,0,0,SYSDATE)";

윗 문장 아래 밑에 문장5줄을 추가하여 지정된 곳에 해당 객체가 들어갈 수 있도록 합니다.

ps = con.prepareStatement(sql);

ps.setString(1,name);

ps.setString(2,tel);

ps.execute();

System.out.println("학생추가완료!");

 

실행 완료된 모습.

SQL에서 st_name에 이름이 추가된 것을 확인하는 명령문 및 화면
conn myJsp/ jsppassword;
SELECT st_name FROM student;
모든 student에 jj 가 추가된 화면 및 명령어 
SELECT*FROM student;

int kr, en, ma

double avg

System.out.print(":");

kr = sc.nextInt();

System.out.print(":");

en = sc.nextInt();

System.out.print(":");

ma = sc.nextInt();

 

avg = (kr + en + ma) / 3.0;

 

ps.setInt(3,kr);

ps.setInt(4,en);

ps.setInt(5,ma);

ps.setDouble(6,avg);

ps.execute();

System.out.println("학생추가완료!");

 

해당 문구 추가 하여 국어 영어 수학 그리고 평균을 구한다.

String sql = "INSERT INTO student VALUES(st_seq.NEXTVAL, ?, ?, ?,?,?,?,SYSDATE)"

문구도 ?로 바꾸어 해당 값이 들어갈 수 있도록 한다.

SQL에서 결과 값 확인 하기
명령어:SELECT * FROM student;

이클립스에서 SQL로 전달하기전에 입력하는 것은 상단에 화살표를 누르고 하단에 글이 나오면 입력할수 있도록 되어있다.

 

PreparedStatementexrcute(), executeUpdate(), executeQuery()

1.boolean execute()

-쿼리를 실행한 뒤, 리턴되는 결과가 ResultSet 객체면 true, int형 정수거나 결과값이 없으면 false

//일단, 무시하고 넘어가도 된다 실행만 하고 싶을 때 사용하는 메소드라고 생각해도 된다.

2.int executeUpdate()

-쿼리를 실행한 뒤, 적용된 행의 개수를 return

//DELETE FROM student WHERE st_name='pika'

//한명이 지워지면 1 row deleted라는 결과문이 나온다.

//INSERT INTO student VALUES(.....);

//1 row created라는 결과문이 만들어진다.

//해당 경우 몇행이 지워졌냐? 몇행이 추가됬냐 하는 개수가 리턴이 되고 알려준다.

 

3.ResultSet executeQuery()

-쿼리를 실행한 뒤, 조회된 결과를 ResultSet에 담아 테이블 형태로 return

test05에서 안에 내용을 가져온 뒤 중간과정을 없애준다.

package com.goodjobedu.basic;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.util.Scanner

 

public class test06 {

public static void main(String[] args) {

String id = "myJsp"

String password = "jsppassword"

String ur1 = "jdbc:oracle:thin:@localhost:1521:xe" //Test01을만들었는데예전에만든DB

 

Connection con = null

PreparedStatement ps = null

 

 

try {

//커넥션준비

Class.forName("oracle.jdbc.driver.OracleDriver");

con = DriverManager.getConnection(ur1, id, password);

 

 

} catch(Exception e) {

e.printStackTrace();

} finally {

try {

if(ps != null){ps.close();}

if(con != null) {con.close();}

}catch(Exception e) {

e.printStackTrace();

}

}

 

}

}

//해당 문구를 작성하여 추가 실행한다.

 

String sql = "UPDATE student SET st_kr= 80"

ps = con.prepareStatement(sql);

int result = ps.executeUpdate();

System.out.println(result + "행에적용되었습니다.");

SELECT st_name, st_kr FROM STUDENT;

6명의 학생이 80점으로 변경되었고 , 6행이 떳다는 모습이 보임.

//int result = ps.executeUpdate(); 몇행이 추가가 되었는지 궁금할 때 사용하는 것.

//SQL에서 6명의 학생이 80점으로 점수가 바뀐 것을 보는 명령어: SELECT st_name, st_kr FROM STUDENT;

st_name 이름이랑 st_kr국어점수 알려줘 라고 SQL에서 말하는 명령어라는 뜻임.

 

 

 

 

 

************* 컴퓨터 공학부가 모두 잘 되는 날이 왔으면 좋겠습니다. *************
*************틀린 부분이 있다면 말씀해주신다면. 정정 하도록 노력겠습니다. *************

728x90
반응형