27일차 2023-04-13

2023. 4. 13. 20:15java

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