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(쿼리문을 날려줄 객체),
그리고 클레스로드와 커넥션 연결 그리고 마지막으로 모든 것을 닫는 반드시 실행하는 finally안 try 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로 전달하기전에 입력하는 것은 상단에 화살표를 누르고 하단에 글이 나오면 입력할수 있도록 되어있다.
PreparedStatement의 exrcute(), 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에서 말하는 명령어라는 뜻임.
************* 컴퓨터 공학부가 모두 잘 되는 날이 왔으면 좋겠습니다. *************
*************틀린 부분이 있다면 말씀해주신다면. 정정 하도록 노력겠습니다. *************
'핫돌의 잡 지식 놓는 곳' 카테고리의 다른 글
언젠가 사용할지도 모르는 JSP 학생관리프로그램 (0) | 2024.06.26 |
---|---|
언젠가 사용할지도 모르는 JSP ResultSet (0) | 2024.06.26 |
언젠가 사용할지도 모르는 JSP 이클립스 설정하기. (0) | 2024.06.26 |
언젠가 사용할지도 모르는 JSP JDK,이클립스 다운받기. (0) | 2024.06.26 |
언젠가 사용할지도 모르는 JSP 테이블 만들기. (0) | 2024.06.26 |