CUBRID Manager 및 CUBRID Query Browser에서는 DB 내에 있는 전체 레코드 개수를 한번에 확인하는 방법을 아직 지원하지 않습니다.
따라서 전체 레코드 개수를 한번에 확인할 수 있는 SP를 작성하여 제공합니다.
SP(Stored Procedure)와 관련된 자세한 정보는 메뉴얼을 참고하시기 바랍니다.
1. 아래의 소스코드대로 CountAll.java 파일을 작성합니다.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class CountAll { public static long countAll() { long recordCount = 0; StringBuffer sql = new StringBuffer(); sql.append("SELECT class_name FROM db_class WHERE is_system_class='NO'"); ① List<String> tableList = new ArrayList<String>();
try { Class.forName("cubrid.jdbc.driver.CUBRIDDriver"); Connection conn = DriverManager.getConnection("jdbc:default:connection:"); ② PreparedStatement pstmt = conn.prepareStatement(sql.toString()); ResultSet rs = pstmt.executeQuery();
while(rs.next()) { tableList.add(rs.getString(1)); }
for(String tableName : tableList) { sql.setLength(0); sql.append("SELECT COUNT(*) FROM [" + tableName + "]"); ③ pstmt = conn.prepareStatement(sql.toString()); rs = pstmt.executeQuery(); if(rs.next()) recordCount += rs.getLong(1); } conn.commit(); } catch (Exception e) { e.printStackTrace(); } return recordCount; } } |
① 먼저 db_class 테이블에서 class_name 컬럼의 데이터를 조회합니다. (테이블 이름 조회)
조회한 테이블 데이터들은 List 에 저장됩니다.
② SP의 connection은 서버측 JDBC 드라이버를 사용해야 하기 때문에 default 설정을 사용합니다.
③ List에 저장된 테이블 이름들을 통해 COUNT(*) 함수를 수행하여 레코드 개수를 합산한 뒤 리턴합니다.
2. CountAll.java 파일 컴파일 및 loadjava 수행
2-1. 컴파일 수행
[seunghun@newTest1 ~]$ javac -cp .:$CUBRID/jdbc/cubrid_jdbc.jar CountAll.java |
컴파일 수행시 CUBRID JDBC 드라이버가 포함되어야 하므로 -cp 옵션에 JDBC 드라이버 경로를 추가하여 수행합니다.
2-2. loadjava 수행
[seunghun@newTest1 ~]$ loadjava -y demodb CountAll.class |
loadjava [option] <DB_NAME> <CLASS_FILE> 순서로 명령어를 수행하며,
-y 옵션은 해당 클래스 파일이 등록되어 있더라도 덮어씌우는 옵션 입니다.
3. DB에서 SP 생성 방법
CSQL 혹은 CUBRID Manager, CUBRID Query Browser에서 DB에 접속한 후 다음 명령어를 수행합니다.
CREATE FUNCTION countall() RETURN BIGINT AS LANGUAGE JAVA NAME 'CountAll.countAll() RETURN LONG'; |
4. SP 수행
SELECT 혹은 CALL 을 사용하여 countall() SP를 호출합니다.
csql> select countall(); === <Result of SELECT Command in Line 1> === countall() ====================== 30690 1 rows selected. SQL statement execution time: 0.049740 sec Current transaction has been committed. 1 command(s) successfully processed. csql> csql> call countall(); === <Result of CALL Command in Line 2> === Result ====================== 30690 SQL statement execution time: 0.019026 sec Current transaction has been committed. 1 command(s) successfully processed. csql> |