다음과 같이 코드 코드를 복사합니다 .
패키지 com.groundhog.codingmouse;
import java.sql.Connection;
java.sql.DriverManager 가져오기;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 데이터베이스 관리 수업
* @author 코딩마우스
*2009.2.20
*/
공개 최종 클래스 DBManager {
/**
* 데이터베이스 연결 객체
*/
개인 연결 dbConnection = null;
/**
* 데이터베이스 명령 실행 객체
*/
개인 ReadyStatement preStatement = null;
/**
* 결과 세트 객체
*/
개인 결과 집합 rsSet = null;
/**
* 데이터베이스 드라이버 버전 번호
*/
개인 정적 문자열 드라이버 버전 = null;
/**
* 데이터베이스 서버 로그인 사용자 이름 및 비밀번호 문자열 상수(기본값은 'sa')
*/
개인 정적 문자열 데이터베이스 사용자 = "sa";
개인 정적 문자열 데이터베이스 비밀번호 = "sa";
/**
* 데이터베이스 드라이버 전체 클래스 이름 문자열 상수
*/
개인 정적 최종 문자열
DRIVER_CLASS_SQLSERVER2000 =
"com.microsoft.jdbc.sqlserver.SQLServerDriver" // SQL
서버 2000 직접 연결
개인 정적 최종 문자열
DRIVER_CLASS_SQLSERVER2005 =
"com.microsoft.sqlserver.jdbc.SQLServerDriver" // SQL
서버 2005 직접 연결
개인 정적 최종 문자열
DRIVER_CLASS_BRIDGECONNECT = "sun.jdbc.odbc.JdbcOdbcDriver";
// ODBC 브릿지 연결
/**
* 데이터베이스 연결 문자열 상수
*/
개인 정적 최종 문자열
DATABASE_URL_SQLSERVER2000 =
"jdbc:microsoft:sqlserver://127.0.0.1:1433;데이터베이스 이름=stuD
B"; // SQL Server 2000 직접 연결
개인 정적 최종 문자열
DATABASE_URL_SQLSERVER2005 =
"jdbc:sqlserver://127.0.0.1:1433;데이터베이스 이름=stuDB";
// SQL Server 2005 직접 연결
개인 정적 최종 문자열
DATABASE_URL_BRIDGECONNECT = "jdbc:odbc:stuDBSource";
// ODBC 브릿지 연결
/**
* 클래스 자체의 인스턴스 정적 변수 정의(싱글톤 [웨어] 모드 애플리케이션에 적용 가능)
*/
개인 정적 DBManager 연결 관리자 = null;
/**
* 개인화된 기본 구성(클래스가 new 키워드를 사용하여 직접 인스턴스화되는 것을 방지하기 위해 싱글톤 [웨어] 모드 애플리케이션에 적용됨)
*/
개인DB관리자() {
감독자();
}
/**
* 데이터베이스 연결 관리 클래스 인스턴스를 획득하는 방법(싱글톤[웨어] 모드 적용)
* @param version 데이터베이스 드라이버 버전 번호, 값: (버전 =
2000 | 버전 = 2005 | 버전 = odbc)
* @param 사용자 데이터베이스 서버 로그인 사용자 이름
* @param 비밀번호 데이터베이스 서버 로그인 비밀번호
* @return 데이터베이스 연결 관리 객체
* @throws 예외 매개변수 오류 예외
*/
공개 정적 DBManager getInstance(
문자열 버전,
문자열 사용자,
문자열 비밀번호)
예외가 발생합니다. {
if (!(버전 == "2000" || 버전 == "2005"
|| 버전 == "odbc")) {
throw new Exception("데이터베이스 드라이버 버전 번호가 올바르지 않습니다. 값은 "2000/2005/odbc"만 가능합니다!");
}
//데이터베이스 드라이버 버전 번호를 저장합니다.
드라이버버전 = 버전;
if (사용자 == null || user.equals("")) {
throw new Exception("데이터베이스 서버 로그인 사용자 이름은 비워둘 수 없습니다!");
}
//데이터베이스 서버 로그인 사용자 이름과 비밀번호 저장
데이터베이스사용자 = 사용자;
데이터베이스비밀번호 = 비밀번호;
// 클래스 자체에 하나의 인스턴스만 있도록 싱글톤 [ware] 패턴을 적용합니다.
if (connectionManager == null) {
ConnectionManager = 새로운 DBManager();
}
// 클래스 자체의 인스턴스를 반환합니다.
연결 관리자를 반환합니다.
}
/**
* 데이터베이스 연결을 얻는 방법
* @return 데이터베이스 연결 객체
*/
개인 연결 getConnection() {
노력하다 {
클래스.이름(
드라이버 버전 ==
"2000"
?
DRIVER_CLASS_SQLSERVER2000
: (드라이버 버전 ==
"2005"
?
DRIVER_CLASS_SQLSERVER2005
:
DRIVER_CLASS_BRIDGECONNECT));
this.dbConnection =
DriverManager.getConnection(
드라이버 버전 ==
"2000"
?
DATABASE_URL_SQLSERVER2000
: (드라이버버전 ==
"2005"
?
DATABASE_URL_SQLSERVER2005
:
DATABASE_URL_BRIDGECONNECT),
데이터베이스사용자,
데이터베이스비밀번호);
} catch (ClassNotFoundException 예) {
System.err.println("SQL 서버를 찾을 수 없습니다.
" + driversVersion + "데이터베이스 드라이버 클래스: " + ex.getMessage());
//예외 스택 정보를 콘솔에 출력
// ex.printStackTrace();
} catch (예외예외) {
System.err.println("데이터베이스 연결 가져오기 오류: " + ex.getMessage());
//예외 스택 정보를 콘솔에 출력
// ex.printStackTrace();
}
// 데이터베이스 연결 객체를 반환합니다.
this.dbConnection을 반환합니다.
}
/**
* 데이터베이스 명령 실행 객체를 얻는 방법
* @param sql SQL 명령어 어셈블리문 실행할 문자열
* @return 데이터베이스 명령 실행 객체
*/
개인용 ReadyStatement getPreparedStatement
(문자열 SQL) {
노력하다 {
//획득한 데이터베이스 연결 객체를 기반으로 데이터베이스 명령 실행 객체 생성
this.preStatement = getConnection
().prepareStatement(sql);
} catch (예외예외) {
System.err.println("데이터베이스 명령 실행 개체를 가져오는 중 오류 발생: " + ex.getMessage());
//예외 스택 정보를 콘솔에 출력
// ex.printStackTrace();
}
// 데이터베이스 명령 실행 객체를 반환합니다.
this.preStatement를 반환합니다.
}
/**
* 업데이트 문 실행 (Insert|Update|Delete)
* @param sql SQL 명령어 어셈블리문 실행할 문자열
* @return 영향을 받은 행 수
*/
공개 int 실행 업데이트(문자열 SQL){
노력하다 {
// 결과 세트 객체의 원래 내용을 비웁니다.
this.rsSet = null;
//문을 실행하고 영향을 받은 행 수를 반환합니다.
this.getPreparedStatement를 반환하세요.
(sql).executeUpdate();
} 잡기(SQLException e) {
System.err.println("데이터 업데이트 오류:" +
e.getMessage());
0을 반환합니다.
}마지막으로{
//데이터베이스 연결 리소스 닫기
closeDBResource();
}
}
/**
* 쿼리문 실행(선택)
* @param sql SQL 명령어 어셈블리문 실행할 문자열
* 쿼리 후 @return 결과 집합 개체
*/
공개 결과 집합 실행 쿼리(문자열 SQL){
노력하다 {
// 결과 세트 객체의 원래 내용을 비웁니다.
this.rsSet = null;
//SQL문을 실행하여 결과 세트를 얻습니다.
this.rsSet =
this.getPreparedStatement(sql).executeQuery();
} 잡기(SQLException e) {
System.err.println("쿼리 데이터 오류:" +
e.getMessage());
}
// 결과 세트 객체를 반환합니다.
this.rsSet을 반환합니다.
}
/**
* 지정된 SQL 문을 실행한 후 반환된 결과 집합의 레코드 수를 가져옵니다.
* @param sql SQL 명령어 어셈블리문 실행할 문자열
* @return 쿼리 결과에서 얻은 레코드 수
*/
공개 int getResultSetCount(String sql) {
//지정된 SQL 문이 실행된 후 기록된 행 수를 반환하는 카운터 변수를 저장합니다.
정수 개수 = 0;
노력하다 {
// 결과 세트 객체의 원래 내용을 비웁니다.
this.rsSet = null;
//SQL문을 실행하여 결과 세트를 얻습니다.
this.rsSet = this.getPreparedStatement
(sql).executeQuery();
// 결과 세트를 반복하고 카운터를 누적합니다.
동안(this.rsSet.next()) {
카운트++;
}
} 잡기(SQLException e) {
e.printStackTrace();
}
반환 횟수;
}
/**
* 데이터베이스 연결 리소스 닫기(결과 집합 개체, 명령 실행 개체 및 연결 개체 포함)
*/
공공 무효 closeDBResource() {
노력하다 {
closeResultSet();
closePreparedStatement();
closeConnection();
} 잡기(SQLException sqlEx) {
System.err.println(sqlEx.getMessage
());
//예외 스택 정보를 콘솔에 출력
// sqlEx.printStackTrace();
}
}
/**
* 결과 집합 개체를 닫는 방법
* @SQLException 발생
*/
private void closeResultSet()에서 SQLException이 발생합니다.
노력하다 {
if (this.rsSet != null) {
this.rsSet.close();
this.rsSet = null;
}
} 잡기(SQLException sqlEx) {
throw new SQLException("결과 집합 개체를 닫는 동안 오류 발생: " + sqlEx.getMessage());
//예외 스택 정보를 콘솔에 출력
// sqlEx.printStackTrace();
}
}
/**
* 데이터베이스 명령 실행 객체를 닫는 방법
* @SQLException 발생
*/
개인 무효 closePreparedStatement()가 발생합니다.
SQL예외 {
노력하다 {
if (this.preStatement != null) {
this.preStatement.close();
this.preStatement = null;
}
} 잡기(SQLException sqlEx) {
throw new SQLException("데이터베이스 닫기 명령 실행 개체 오류: " + sqlEx.getMessage());
//예외 스택 정보를 콘솔에 출력
// sqlEx.printStackTrace();
}
}
/**
* 데이터베이스 연결을 종료하는 방법
* @SQLException 발생
*/
private void closeConnection()이 SQLException을 발생시킵니다.
노력하다 {
if (this.dbConnection != null && (!
this.dbConnection.isClosed())) {
this.dbConnection.close();
}
} 잡기(SQLException sqlEx) {
throw new SQLException("데이터베이스 연결을 닫는 동안 오류 발생: " + sqlEx.getMessage());
//예외 스택 정보를 콘솔에 출력
// sqlEx.printStackTrace();
}
}
}