27일차 2023-04-13
2023. 4. 13. 20:15ㆍjava
JDBC
jdbc25.prepared패키지
InsertSQLMore.java
package jdbc25.prepared;
import java.sql.SQLException;
import jdbc25.service.IConnectImpl;
public class InsertSQLMore extends IConnectImpl {
public InsertSQLMore(String url,String user,String password) {
connect(url,user,password);
}//////////////
@Override
public void execute() throws Exception {
//1]쿼리문 미리 준비
String sql="INSERT INTO member VALUES(?,?,?,SYSDATE)";
try {
//2]쿼리실행을 위한 Statement계열 객체 생성
psmt=conn.prepareStatement(sql);
while(true) {
try {
//3]쿼리 실행-인파라미터 설정
psmt.setString(1, getValue("아이디"));
psmt.setString(2, getValue("비밀번호"));
psmt.setString(3, getValue("이름"));
System.out.println(psmt.executeUpdate()+"행이 입력되었어요");
}
catch(SQLException e) {
System.out.println("입력시 오류:"+e.getMessage());
}
}
}
catch(SQLException e) {
System.out.println("PreparedStatement객체 생성 실패:"+e.getMessage());
}
}/////////////execute
public static void main(String[] args) throws Exception {
new InsertSQLMore(ORACLE_URL, "kosmo", "kosmo1234").execute();
}///////////////main
}//////////////////class
InsertSQLMore.java
package jdbc25.prepared;
import java.sql.SQLException;
import jdbc25.service.IConnectImpl;
public class InsertSQLMore extends IConnectImpl {
public InsertSQLMore(String url,String user,String password) {
connect(url,user,password);
}//////////////
@Override
public void execute() throws Exception {
//1]쿼리문 미리 준비
String sql="INSERT INTO member VALUES(?,?,?,SYSDATE)";
try {
//2]쿼리실행을 위한 Statement계열 객체 생성
psmt=conn.prepareStatement(sql);
while(true) {
try {
//3]쿼리 실행-인파라미터 설정
psmt.setString(1, getValue("아이디"));
psmt.setString(2, getValue("비밀번호"));
psmt.setString(3, getValue("이름"));
System.out.println(psmt.executeUpdate()+"행이 입력되었어요");
}
catch(SQLException e) {
System.out.println("입력시 오류:"+e.getMessage());
}
}
}
catch(SQLException e) {
System.out.println("PreparedStatement객체 생성 실패:"+e.getMessage());
}
}/////////////execute
public static void main(String[] args) throws Exception {
new InsertSQLMore(ORACLE_URL, "kosmo", "kosmo1234").execute();
}///////////////main
}//////////////////class
InsertSQLAutoGeneratedKeys.java
package jdbc25.prepared;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import jdbc25.service.IConnectImpl;
public class InsertSQLAutoGeneratedKeys extends IConnectImpl {
public InsertSQLAutoGeneratedKeys(String url,String user,String password) {
connect(url,user,password);
}//////////////
@Override
public void execute() throws Exception {
//1]쿼리문 미리 준비
String sql="INSERT INTO bbs VALUES(SEQ_BBS.NEXTVAL,?,?,SYSDATE)";
try {
//2]쿼리실행을 위한 Statement계열 객체 생성
psmt=conn.prepareStatement(sql, new int[] {1});
try {
//3]쿼리 실행-인파라미터 설정
psmt.setString(1, getValue("제목"));
psmt.setString(2, getValue("아이디"));
System.out.println(psmt.executeUpdate()+"행이 입력되었어요");
//입력된 행의 키(PK)값 가져오기
rs= psmt.getGeneratedKeys();
rs.next();
System.out.println("입력된 행의 키값:"+rs.getInt(1));
}
catch(SQLException e) {
System.out.println("입력시 오류:"+e.getMessage());
}
}
catch(SQLException e) {
System.out.println("PreparedStatement객체 생성 실패:"+e.getMessage());
}
finally {
//4]자원 반납
close();
}
}/////////////execute
public static void main(String[] args) throws Exception {
new InsertSQLAutoGeneratedKeys(ORACLE_URL, "kosmo", "kosmo1234").execute();
}///////////////main
}//////////////////class
UpdateSQL.java
package jdbc25.prepared;
import java.sql.SQLException;
import jdbc25.service.IConnectImpl;
public class UpdateSQL extends IConnectImpl {
@Override
public void execute() throws Exception {
//0]데이타베이스 연결
connect(ORACLE_URL, "kosmo", "kosmo1234");
try {
//1]PreparedStatement객체 생성
psmt = conn.prepareStatement("UPDATE member SET name =?,password=? WHERE username=?");
//2]인파라미터 설정
psmt.setString(3, getValue("수정할 아이디"));
psmt.setString(1, getValue("이름"));
psmt.setString(2, getValue("비밀번호"));
//3]쿼리 실행
try {
System.out.println(psmt.executeUpdate()+"행이 수정됨");
}
catch(SQLException e) {
System.out.println("수정시 오류:"+e.getMessage());
}
}
finally {
//4]자원반납
close();
}
}//////////////
public static void main(String[] args) throws Exception {
new UpdateSQL().execute();
}////////////main
}//////////////class
UpdateSQLMore.java
package jdbc25.prepared;
import java.sql.SQLException;
import jdbc25.service.IConnectImpl;
public class UpdateSQLMore extends IConnectImpl {
@Override
public void execute() throws Exception {
//0]데이타베이스 연결
connect(ORACLE_URL, "kosmo", "kosmo1234");
//1]PreparedStatement객체 생성
psmt = conn.prepareStatement("UPDATE member SET name =?,password=? WHERE username=?");
while(true) {
//2]인파라미터 설정
psmt.setString(3, getValue("수정할 아이디"));
psmt.setString(1, getValue("이름"));
psmt.setString(2, getValue("비밀번호"));
//3]쿼리 실행
try {
System.out.println(psmt.executeUpdate()+"행이 수정됨");
}
catch(SQLException e) {
System.out.print("수정시 오류:"+e.getMessage());
}
}
}//////////////
public static void main(String[] args) throws Exception {
new UpdateSQLMore().execute();
}////////////main
}//////////////class
DeleteSQL.java
package jdbc25.prepared;
import java.sql.SQLException;
import jdbc25.service.IConnectImpl;
public class DeleteSQL extends IConnectImpl {
@Override
public void execute() throws Exception {
connect(ORACLE_URL,"kosmo","kosmo1234");
try {
psmt=conn.prepareStatement("DELETE member WHERE username=?");
psmt.setString(1, getValue("삭제할 아이디"));
try {
System.out.println(psmt.executeUpdate()+"행이 삭제됨");
}
catch(SQLException e) {
System.out.println("삭제시 오류"+e.getMessage());
}
}
finally {
close();
}
}/////////////execute
public static void main(String[] args) throws Exception {
new DeleteSQL().execute();
}///////////////main
}//////////////////class
DeleteSQLMore.java
package jdbc25.prepared;
import java.sql.SQLException;
import jdbc25.service.IConnectImpl;
public class DeleteSQLMore extends IConnectImpl {
@Override
public void execute() throws Exception {
//0]데이타베이스 연결
connect(ORACLE_URL, "kosmo", "kosmo1234");
//1]PreparedStatement객체 생성
psmt = conn.prepareStatement("DELETE member WHERE username=?");
while(true) {
//2]인파라미터 설정
psmt.setString(1, getValue("삭제할 아이디"));
try {
//3]쿼리 실행
System.out.println(psmt.executeUpdate()+"행이 삭제됨");
}
catch(SQLException e) {
System.out.println("삭제시 오류:"+e.getMessage());
}
}
}/////////////////execute
public static void main(String[] args) throws Exception {
new DeleteSQLMore().execute();
}//////////main
}/////////////class
SelectSQL.java
package jdbc25.prepared;
import jdbc25.service.IConnectImpl;
public class SelectSQL extends IConnectImpl {
public SelectSQL() {
connect(ORACLE_URL, "scott", "scott");//혹은 super(ORACLE_URL, "scott", "scott");
}///////////////
@Override
public void execute() throws Exception {
//1]미리 쿼리문 준비
//1-1]특정 문자로 시작하는 레코드 검색
//String sql="SELECT ename,TRIM(TO_CHAR(sal,'L99,999')) sal,job,TO_CHAR(hiredate,'YYYY.MM.DD') FROM emp WHERE UPPER(ename) LIKE ? || '%' ORDER BY hiredate DESC";
//1-2]특정 문자로 끝나는 레코드 검색
//String sql="SELECT ename,TRIM(TO_CHAR(sal,'L99,999')) sal,job,TO_CHAR(hiredate,'YYYY.MM.DD') FROM emp WHERE UPPER(ename) LIKE '%' || ? ORDER BY hiredate DESC";
//1-3]특정 문자가 포함된 레코드 검색
String sql="SELECT ename,TRIM(TO_CHAR(sal,'L99,999')) sal,job,TO_CHAR(hiredate,'YYYY.MM.DD') FROM emp WHERE UPPER(ename) LIKE '%'|| ? || '%' ORDER BY hiredate DESC";
//2]PreparedStatement객체 생성
psmt = conn.prepareStatement(sql);
//3]인파라미터 설정-인파라미터 있는 경우
psmt.setString(1, getValue("찾을 문자열").toUpperCase());
try {
//4]쿼리실행
rs=psmt.executeQuery();
while(rs.next()) {
System.out.println(String.format("%-8s%-8s%-10s%s",
rs.getString(1),
rs.getString(2),
rs.getString(3),
rs.getString(4)
));
}
}
finally {
close();
}
}//////////////////
public static void main(String[] args) throws Exception {
new SelectSQL().execute();
}//////////main
}/////////////class
jdbc25.service패키지의 IcConnectlmpl.java 중 코드 내용 삽입
@Override
public String getQueryString() {
System.out.print("SQL>");
return sc.nextLine();
}//////////////////////
}
jdbc25.callable패키지
FunctionCall.java
package jdbc25.callable;
import java.sql.Types;
import jdbc25.service.IConnectImpl;
public class FunctionCall extends IConnectImpl{
public FunctionCall() {
connect(ORACLE_URL, "scott", "scott");
}
@Override
public void execute() throws Exception {
/*
1]오라클에 정의된 함수를 실행하기 위한 CallableStatement객체 생성
-Connection객체의 prepareCall()메소드로 생성
-형식
prepareCall("{? = call 함수명(?,?...)}");
-첫번째 물음표는 반환값을 의미
반환값은 파라미터 설정시 java.sql.Types클래스의 int형 상수로 설정한다.
설정시 registerOutParameter()메소드 사용
매개변수 설정시는 기존 PreparedStatement객체와 동일
*/
csmt=conn.prepareCall("{?=call to_asterisk(?)}");
csmt.setString(2, getValue("문자열"));
csmt.registerOutParameter(1, Types.VARCHAR);
System.out.println(csmt.execute());
System.out.println("함수의 반환값:"+csmt.getString(1));
close();
}
public static void main(String[] args) throws Exception {
new FunctionCall().execute();
}
}
InsertProc.java
package jdbc25.callable;
import java.sql.Types;
import jdbc25.service.IConnectImpl;
public class InsertProc extends IConnectImpl{
public InsertProc() {
connect(ORACLE_URL, "kosmo", "kosmo1234");
}
public void execute() throws Exception{
csmt=conn.prepareCall("{call sp_insmember(?,?,?,?)}");
csmt.setString(1, getValue("아이디"));
csmt.setString(2, getValue("비밀번호"));
csmt.setString(3, getValue("이름"));
csmt.registerOutParameter(4, Types.NVARCHAR);
System.out.println(csmt.execute());
System.out.println("프로시저의 아웃 파라미터 값:"+csmt.getString(4));
close();
}
public static void main(String[] args) throws Exception {
new InsertProc().execute();
}
}
DeleteProc.java
package jdbc25.callable;
import java.sql.Types;
import jdbc25.service.IConnectImpl;
public class DeleteProc extends IConnectImpl {
public DeleteProc() {
connect(ORACLE_URL, "kosmo", "kosmo1234");
}
public void execute() throws Exception{
csmt=conn.prepareCall("{call sp_delmember(?,?,?,?)}");
csmt.setString(1, getValue("아이디"));
csmt.setString(2, getValue("비밀번호"));
csmt.setString(3, getValue("이름"));
csmt.registerOutParameter(4, Types.NVARCHAR);
System.out.println(csmt.execute());
int result=csmt.getInt(2);
switch(result) {
case -1: System.out.println("삭제 불가:자식이 참조해.."); break;
case 0: System.out.println("삭제 불가:아이디가 존재하지 않아.."); break;
//default:System.out.println(username+"가(이) 삭제 되었어");
}
close();
}
public static void main(String[] args) throws Exception {
new DeleteProc().execute();
}
}
UpdateProc.java
package jdbc25.callable;
import java.sql.Types;
import jdbc25.service.IConnectImpl;
public class UpdateProc extends IConnectImpl {
public UpdateProc() {
connect(ORACLE_URL, "kosmo", "kosmo1234");
}
public void execute() throws Exception{
csmt=conn.prepareCall("{call sp_insmember(?,?,?,?)}");
csmt.setString(1, getValue("아이디"));
csmt.setString(2, getValue("비밀번호"));
csmt.setString(3, getValue("이름"));
csmt.registerOutParameter(4, Types.NVARCHAR);
System.out.println(csmt.execute());
System.out.println("프로시저의 아웃 파라미터 값:"+csmt.getString(4));
close();
}
public static void main(String[] args) throws Exception {
new UpdateProc().execute();
}
}
IsMemberProc.java
package jdbc25.callable;
import java.sql.Types;
import jdbc25.service.IConnectImpl;
public class IsMemberProc extends IConnectImpl {
public IsMemberProc() {
connect(ORACLE_URL, "kosmo", "kosmo1234");
}
public void execute() throws Exception{
csmt=conn.prepareCall("{call sp_delmember(?,?,?,?)}");
csmt.setString(1, getValue("아이디"));
csmt.setString(2, getValue("비밀번호"));
csmt.setString(3, getValue("이름"));
csmt.registerOutParameter(4, Types.NVARCHAR);
System.out.println(csmt.execute());
int result=csmt.getInt(2);
switch(result) {
case -1: System.out.println("삭제 불가:자식이 참조해.."); break;
case 0: System.out.println("삭제 불가:아이디가 존재하지 않아.."); break;
//default:System.out.println(username+"가(이) 삭제 되었어");
}
close();
}
public static void main(String[] args) throws Exception {
new IsMemberProc().execute();
}
}
jdbc25.etc패키지
ExecuteSQL.java
package jdbc25.etc;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;
import java.util.Vector;
import jdbc25.service.IConnectImpl;
public class ExecuteSQL extends IConnectImpl {
public ExecuteSQL() {
connect(ORACLE_URL, "kosmo", "kosmo1234");
}///////////////ExecuteSQL
@Override
public void execute() throws Exception {
while(true) {
//1]쿼리문 준비
String sql=getQueryString();
if("EXIT".equalsIgnoreCase(sql)) {
System.out.println("Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production");
close();
System.exit(0);
}
//2]Statement계열 객체 생성-쿼리 실행용
psmt = conn.prepareStatement(sql);
//3]쿼리 실행-boolean execute():쿼리문이 미정 임으로
/*
execute()는 쿼리문이 SELECT이면 true,그외 SQL문일때는 false반환.
execute()메소드로 쿼리 실행후 쿼리문이 SELECT인 경우
ResultSet에 담긴 결과를 가져오려면 Statement계열 객체의
getResultSet()메소드 호출
쿼리문이 INSERT/DELETE/UPDATE일때
영향받은 행의 수를 반환 받을때는
getUpdateCount()메소드 호출
*/
try {
boolean flag = psmt.execute();
if(flag) {//쿼리문이 SELECT
rs=psmt.getResultSet();
ResultSetMetaData rsmd= rs.getMetaData();
int columnCount=rsmd.getColumnCount();
List<Integer> dashCount = new Vector<>();
for(int i=1;i<=columnCount;i++) {
int columnType=rsmd.getColumnType(i);
int columnSize=rsmd.getPrecision(i);
switch(columnType) {
case Types.NCHAR:
case Types.NVARCHAR:
dashCount.add(columnSize*2);break;
case Types.NUMERIC:
case Types.TIMESTAMP:
dashCount.add(10);break;
default:dashCount.add(columnSize);
}///switch
//컬럼명 출력]
String columnName = rsmd.getColumnName(i).length() > dashCount.get(i-1) ?
rsmd.getColumnName(i).substring(0,dashCount.get(i-1)) :
rsmd.getColumnName(i);
System.out.print(String.format("%-"+(dashCount.get(i-1)+1)+"s", columnName));
}////////////for
System.out.println();//줄바꿈
//(-)DASH출력]
for(Integer count:dashCount) {
for(int i=0;i<count;i++) System.out.print("-");
System.out.print(" ");
}///////////
System.out.println();//줄바꿈
//데이터 출력]
while(rs.next()) {
//각 컬럼값 뽑아오기]
for(int i=1;i<=columnCount;i++) {
int columnType=rsmd.getColumnType(i);
String columnValue;
if(columnType==Types.TIMESTAMP)
columnValue = rs.getDate(i).toString();
else
columnValue = rs.getString(i);
System.out.print(String.format("%-"+(dashCount.get(i-1)+1)+"s", columnValue==null?"":columnValue));
}
System.out.println();//줄바꿈
}/////////////////
}
else {//기타 쿼리문(Insert/Delete/Update/Create/Alter등)
int affected=psmt.getUpdateCount();
if(sql.trim().toUpperCase().startsWith("UPDATE"))
System.out.println(affected+"행이 수정되었어요");
else if(sql.trim().toUpperCase().startsWith("DELETE"))
System.out.println(affected+"행이 삭제되었어요");
else if(sql.trim().toUpperCase().startsWith("INSERT"))
System.out.println(affected+"행이 입력되었어요");
}
}
catch(SQLException e) {
System.out.println(e.getMessage());
}
}/////////////////
}//////////////execute
public static void main(String[] args) throws Exception {
new ExecuteSQL().execute();
}/////////////main
}////////////////class
ResultSetMetaDataSQL.java
package jdbc25.etc;
import java.sql.ResultSetMetaData;
import java.sql.Types;
import java.util.List;
import java.util.Vector;
import jdbc25.service.IConnectImpl;
public class ResultSetMetaDataSQL extends IConnectImpl {
public ResultSetMetaDataSQL() {
connect(ORACLE_URL, "scott", "scott");
}///////////////
@Override
public void execute() throws Exception {
try {
//1]쿼리문 준비
String sql=getQueryString();
//2]PreparedStatement객체 생성
psmt = conn.prepareStatement(sql);
//3]쿼리 실행
rs = psmt.executeQuery();//끝에 ;입력시 쿼리실행시에 java.sql.SQLSyntaxErrorException발생
/* SELECT쿼리 실행시 컬럼에 대한 정보 얻기*/
//가]ResultSet객체의 getMetaData()로 ResultSetMetaData얻기
ResultSetMetaData rsmd= rs.getMetaData();
//나]총 컬럼수 얻기-ResultSetMetaData의 int getColumnCount()
int columnCount=rsmd.getColumnCount();
System.out.println("총 컬럼수:"+columnCount);
//다]컬럼명 얻기-ResultSetMetaData의 String getColumnName(int column)
for(int i=1;i<=columnCount;i++) {
String columnName = rsmd.getColumnName(i);
int length=columnName.length()+2;//2칸 여백
System.out.print(String.format("%-"+length+"s", columnName));
}
//라]컬럼타입 얻기-int getColumnType(int column)
// 타입과 관련된 상수는 java.sql.Types클래스에 정의됨.
System.out.println("\r\n[자바의 컬럼타입으로 얻기]");
for(int i=1;i<=columnCount;i++) {
int columnType=rsmd.getColumnType(i);
switch(columnType) {
case Types.VARCHAR:
System.out.println("오라클의 VARCHAR2");break;
case Types.NVARCHAR:
System.out.println("오라클의 NVARCHAR2");break;
case Types.CHAR:
System.out.println("오라클의 CHAR");break;
case Types.NCHAR:
System.out.println("오라클의 NCHAR");break;
case Types.NUMERIC:
System.out.println("오라클의 NUMBER");break;
case Types.TIMESTAMP:
System.out.println("오라클의 DATE");break;
default:
System.out.println("오라클의 기타 자료형");
}
}///for
//마]String getColumnTypeName(int column)
//오라클의 타입명으로 반환
System.out.println("[오라클의 컬럼타입으로 얻기]");
for(int i=1;i<=columnCount;i++) {
String columnTypeName=rsmd.getColumnTypeName(i);
System.out.println(columnTypeName);
}///
//바]컬럼의 NULL허용여부 :int isNullable(int column)
// NULL허용 :1,NOT NULL:0
System.out.println("[컬럼의 NULL 허용여부 얻기]");
for(int i=1;i<=columnCount;i++) {
int isNull=rsmd.isNullable(i);
System.out.println(isNull==1?"널 허용":"NOT NULL");
}///for
//사]컬럼의 크기 얻기 -getPrecision(int column)
//()괄호 없는 자료형은 0반환
System.out.println("[컬럼의 크기 얻기]");
for(int i=1;i<=columnCount;i++) {
int columnSize=rsmd.getPrecision(i);
System.out.println(columnSize);
}//for
//각 컬럼의 자리수 설정하기
/*
* 오라클처럼
* NUMBER타입(자리수 지정 안한 NUMBER포함)은 10자리
* DATE타입은 10자리(원래 오라클은 8자리)
* CHAR게열(VARCHAR2)는 해당 자리수로 설정하는데
* 단 NCHAR계열은 자리수의 2배로 설정
* 오라클 처럼 컬럼명 밑에 --------- 를 표시하기위한 작업
*/
List<Integer> dashCount = new Vector<>();
for(int i=1;i<=columnCount;i++) {
int columnType=rsmd.getColumnType(i);
int columnSize=rsmd.getPrecision(i);
switch(columnType) {
case Types.NCHAR:
case Types.NVARCHAR:
dashCount.add(columnSize*2);break;
case Types.NUMERIC:
case Types.TIMESTAMP:
dashCount.add(10);break;
default:dashCount.add(columnSize);
}///switch
//컬럼명 출력]
//컬럼명의 길이가 대쉬의 숫자(자료형 크기)보다 크다면
//예]GENDER CHAR(1)
/*
* G
* -
*/
String columnName = rsmd.getColumnName(i).length() > dashCount.get(i-1) ?
rsmd.getColumnName(i).substring(0,dashCount.get(i-1)) :
rsmd.getColumnName(i);
System.out.print(String.format("%-"+(dashCount.get(i-1)+1)+"s", columnName));
}////////////for
System.out.println();//줄바꿈
//(-)DASH출력]
for(Integer count:dashCount) {
for(int i=0;i<count;i++) System.out.print("-");
System.out.print(" ");
}///////////
System.out.println();//줄바꿈
//데이터 출력]
while(rs.next()) {
//각 컬럼값 뽑아오기]
for(int i=1;i<=columnCount;i++) {
int columnType=rsmd.getColumnType(i);
String columnValue;
if(columnType==Types.TIMESTAMP)
columnValue = rs.getDate(i).toString();
else
columnValue = rs.getString(i);
System.out.print(String.format("%-"+(dashCount.get(i-1)+1)+"s", columnValue==null?"":columnValue));
}
System.out.println();//줄바꿈
}/////////////////
}
finally {
close();
}
}/////////////
public static void main(String[] args) throws Exception {
new ResultSetMetaDataSQL().execute();
}////////////////main
}///////////////////class
ResultSetType.java
package jdbc25.etc;
import java.sql.ResultSet;
import jdbc25.service.IConnectImpl;
public class ResultSetType extends IConnectImpl {
public ResultSetType(String url, String user, String password) {
super(url,user,password);
}//////////////////
@Override
public void execute() throws Exception {
//1]쿼리문 미리 준비
String sql="SELECT * FROM emp ORDER BY sal DESC";
//2]쿼리 실행용 객체(Statement계열-PreparedStatement) 생성
//2-1]아래는 커서를 레코드 하나씩 전진(forward)만 가능 즉 next()만 호출가능
//psmt = conn.prepareStatement(sql);
//2-2]커서를 전/후진이 가능하도록 설정
psmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
try {
//3]쿼리 실행
rs = psmt.executeQuery();
System.out.println("커서를 마지막 레코드로 이동:"+rs.last());
System.out.println("총 레코드 수:"+rs.getRow());
rs.beforeFirst();//커서를 다시 첫번째 레코드 바로 전으로 이동
System.out.println("[연봉이 높은 순]");
while(rs.next()) {
System.out.println(String.format("%-6s%-8s%-11s%-6s%s",
rs.getString(1),
rs.getString(2),
rs.getString(3),
rs.getString(6),
rs.getDate(5)
));
}////////////////////////////////
System.out.println("[연봉이 낮은 순]");
while(rs.previous()) {
System.out.println(String.format("%-6s%-8s%-11s%-6s%s",
rs.getString(1),
rs.getString(2),
rs.getString(3),
rs.getString(6),
rs.getDate(5)
));
}////////////////////////////////
}
finally {
//4]자원 반납
close();
}
}/////////////////////
public static void main(String[] args) throws Exception {
new ResultSetType(ORACLE_URL,"scott","scott").execute();
}//////////////main
}/////////////////class
TransationSQL.java
package jdbc25.etc;
import java.sql.SQLException;
import jdbc25.service.IConnectImpl;
public class TransationSQL extends IConnectImpl {
public TransationSQL() {
connect(ORACLE_URL, "kosmo", "kosmo1234");
}
@Override
public void execute() throws Exception {
try {
conn.setAutoCommit(false);
String sql="DELETE member where username=?";
psmt=conn.prepareStatement(sql);
psmt.setString(1, getValue("삭제할 아이디"));
System.out.println(psmt.executeUpdate()+"행이 삭제 되었어요");
sql="insert into member values(?,?,?,sysdate)";
psmt=conn.prepareStatement(sql);
psmt.setString(1, getValue("아이디"));
psmt.setString(2, getValue("비밀번호"));
psmt.setString(3, getValue("이름"));
System.out.println(psmt.executeUpdate()+"행이 입력 되었어요");
conn.commit();
System.out.println("커밋되었습니다-실제 테이블에 반영 되었어요");
}
catch(SQLException e) {
conn.rollback();
System.out.println("롤백되었습니다.");
}
finally {
close();
}
}
public static void main(String[] args) throws Exception {
new TransationSQL().execute();
}
}
'java' 카테고리의 다른 글
28일차 2023-04-14 (0) | 2023.04.14 |
---|---|
26일차 2023-04-12 (0) | 2023.04.12 |
20일차 2023-04-04 (0) | 2023.04.04 |
19일차 2023-04-03 (0) | 2023.04.03 |
18일차 2023-03-31 (0) | 2023.03.31 |