JDBC 操作数据库

Jun 07, 2016 pm 03:35 PM
jdbc 사용 작동하다 데이터 베이스 액자

有时候 使用框架,或许没有直接操作数据库来的快, 或者说是使用框架太麻烦,有个直接操作数据库的工具类多好,故直接上干货,写下如下代码: private static Logger logger = Logger.getLogger(DBHelper.class.getName()); /** * 纯 java 式的连接 定义常量

            有时候

           使用框架,或许没有直接操作数据库来的快,

           或者说是使用框架太麻烦,有个直接操作数据库的工具类多好,故直接上干货,写下如下代码:


    private static Logger logger = Logger.getLogger(DBHelper.class.getName());
    /**
     * 纯 java 式的连接 定义常量来存储配置
     */
    public static String DRIVER = null;
    public static String URL = null;
    public static String USER = null;
    public static String PASS = null;

    Connection conn = null;
    PreparedStatement pstmt = null;
    Statement stmt = null;
    ResultSet rs = null;

    // 获得数据连接信息.
    static {
        Properties pops = new Properties();
        InputStream inStream;
        try {
            inStream = DBCommandUtils.class.getResourceAsStream("/jdbc.properties");
            pops.load(inStream);
        } catch (FileNotFoundException e) {
            logger.error(e.getMessage());
        } catch (IOException e) {
            logger.error(e.getMessage());
        }

        URL = pops.getProperty("datasource.url");
        USER = pops.getProperty("datasource.username");
        PASS = pops.getProperty("datasource.password");
        DRIVER = pops.getProperty("datasource.driverClassName");
    }

    /**
     * 得到数据库连接
     */
    public Connection getConn() {
        try {
            if (DRIVER == null || USER == null || PASS == null || URL == null) {
                Properties pops = new Properties();
                InputStream inStream;
                try {
                    inStream = DBCommandUtils.class
                            .getResourceAsStream("/jdbc.properties");
                    pops.load(inStream);
                } catch (FileNotFoundException e) {
                    logger.error(e.getMessage());
                } catch (IOException e) {
                    logger.error(e.getMessage());
                }

                URL = pops.getProperty("datasource.url");
                USER = pops.getProperty("datasource.username");
                PASS = pops.getProperty("datasource.password");
                DRIVER = pops.getProperty("datasource.driverClassName");
            }
            // 获得链接.
            Class.forName(DRIVER);
            conn = (Connection) DriverManager.getConnection(URL, USER, PASS);
            return conn;
        } catch (Exception e) {
            logger.error("获取链接失败!" + e.getLocalizedMessage());
            return null;
        }
    }

    /**
     * 要执行的增 ,删 ,改 的操作,不执行查询 (注意参数的使用)
     */
    public int executeSQL(String preparedSql, String[] param) {
        int count = 0;
        /**
         * 执行的操作
         */
        try {
            if (conn == null) {
                conn = getConn(); // 获得连接
            }
            pstmt = conn.prepareStatement(preparedSql);// 要执行的 sql 语句
            if (param != null) {
                for (int i = 0; i                     pstmt.setString(1 + i, param[i]);// 为预编译sql设置参数
                }
            }
            count = pstmt.executeUpdate(); // 执行 sql 语句
        } catch (SQLException e) {
            logger.error(e.getMessage()); // 处理SQLException异常
            return -1;
        }
        return count; // 返回结果
    }

    /**
     * 要执行的增 ,删 ,改 的操作,不执行查询 (注意参数的使用)
     */
    public int executeSQL(String preparedSql) {
        int count = 0;
        /**
         * 执行的操作
         */
        try {
            if (conn == null) {
                conn = getConn(); // 获得连接
            }
            pstmt = conn.prepareStatement(preparedSql);// 要执行的 sql 语句
            count = pstmt.executeUpdate(); // 执行 sql 语句
        } catch (SQLException e) {
            logger.error(e.getMessage()); // 处理SQLException异常
            return -1;
        }
        return count; // 返回结果
    }

    /**
     * 要执行的增 ,删 ,改 的操作,不执行查询 (注意参数的使用)
     */
    public int[] executeSQLs(String[] sqls) {
        int[] count = null;
        /**
         * 执行的操作
         */
        try {
            if (conn == null) {
                conn = getConn(); // 获得连接
            }
            stmt = conn.createStatement();
            for (String sql : sqls) {
                stmt.addBatch(sql);
            }
            count = stmt.executeBatch(); // 执行 sql 语句
        } catch (SQLException e) {
            logger.error(e.getMessage()); // 处理SQLException异常
            return null;
        }
        return count; // 返回结果
    }

    /**
     * 要执行的复杂操作
     */
    public boolean executeAllSQL(String preparedSql) {
        boolean result = false;
        try {
            if (conn == null) {
                conn = getConn(); // 获得连接
            }
            pstmt = conn.prepareStatement(preparedSql);// 要执行的 sql 语句
            result = pstmt.execute();
        } catch (SQLException e) {
            logger.error(e.getMessage()); // 处理SQLException异常
        }
        return result; // 返回结果
    }

    /**
     * 使用PreparedStatement查询数据
     *
     * @param sql
     * @param params
     *            参数列表
     * @return 结果集 不要关闭连接
     */
    public ResultSet selectSQL(String sql, String[] param) {
        try {
            if (conn == null) {
                conn = getConn(); // 获得连接
            }
            pstmt = conn.prepareStatement(sql); // 执行sql语句
            for (int i = 0; i                 pstmt.setString(i + 1, param[i]);
            }
            rs = pstmt.executeQuery(); // 执行的结果
        } catch (SQLException e1) {
            logger.error(e1.getMessage());
        }
        return rs;
    }

    /**
     * 使用statement执行查询
     *
     * @param sql
     *            执行的SQL语句
     * @return 不可关闭连接
     */
    public ResultSet selectSQL(String sql) {
        try {
            if (conn == null) {
                conn = getConn(); // 获得连接
            }
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
        } catch (SQLException e1) {
            logger.error(e1.getMessage());
        }
        return rs;
    }

    /**
     * 关闭所有的接口 (注意括号中的参数)
     */
    public void closeAll() {
        if (stmt != null) {
            try {
                stmt.close();
                stmt = null;
            } catch (Exception e) {
                logger.error(e.getMessage());
            }
        }
        // 判断是否关闭,要时没有关闭,就让它关闭,并给它附一空值(null),下同
        if (pstmt != null) {
            try {
                pstmt.close();
                pstmt = null;
            } catch (SQLException e) {
                logger.error(e.getMessage()); // 异常处理
            }
        }
        if (rs != null) {
            try {
                rs.close();
                rs = null;
            } catch (SQLException e) {
                logger.error(e.getMessage()); // 异常处理
            }
        }
        if (conn != null) {
            try {
                conn.close();
                conn = null;
            } catch (SQLException e) {
                logger.error(e.getMessage()); // 异常处理
            }
        }
    }

    /**
     * 检查数据库连接
     *
     * @param manager
     * @return true:无法连接;false:正常
     */
    public boolean checkCon(DBCommandUtils manager) {
        boolean result = false;
        try {
            result = getConn().isClosed();
        } catch (SQLException e) {
            logger.error(e.getMessage());
        }
        return result;
    }

    /**
     * 编写测试类来进行对数据库的检验
     */
    public static void main(String[] args) {
        DBCommandUtils manager = new DBCommandUtils();
        try {
            System.out.println(manager.getConn().isClosed());
        } catch (SQLException e) {
            logger.error(e.getMessage()); // 抛出异常
        }
    }


这个玩意就可以直接拿来用了,其实还是很不错的玩意。。。

自然是没有使用关系型框架舒服了。

不过: 有了这个有时候不用框架也是比较舒服的。


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

iOS 18에는 손실되거나 손상된 사진을 검색할 수 있는 새로운 '복구된' 앨범 기능이 추가되었습니다. iOS 18에는 손실되거나 손상된 사진을 검색할 수 있는 새로운 '복구된' 앨범 기능이 추가되었습니다. Jul 18, 2024 am 05:48 AM

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

Java 프레임워크에 대한 상용 지원의 비용 효율성을 평가하는 방법 Java 프레임워크에 대한 상용 지원의 비용 효율성을 평가하는 방법 Jun 05, 2024 pm 05:25 PM

Java 프레임워크에 대한 상용 지원의 비용/성능 평가에는 다음 단계가 포함됩니다. 필요한 보증 수준과 SLA(서비스 수준 계약) 보장을 결정합니다. 연구지원팀의 경험과 전문성. 업그레이드, 문제 해결, 성능 최적화와 같은 추가 서비스를 고려하십시오. 위험 완화 및 효율성 향상을 기준으로 비즈니스 지원 비용을 평가합니다.

PHP에서 데이터베이스 연결 오류를 처리하는 방법 PHP에서 데이터베이스 연결 오류를 처리하는 방법 Jun 05, 2024 pm 02:16 PM

PHP에서 데이터베이스 연결 오류를 처리하려면 다음 단계를 사용할 수 있습니다. mysqli_connect_errno()를 사용하여 오류 코드를 얻습니다. 오류 메시지를 얻으려면 mysqli_connect_error()를 사용하십시오. 이러한 오류 메시지를 캡처하고 기록하면 데이터베이스 연결 문제를 쉽게 식별하고 해결할 수 있어 애플리케이션이 원활하게 실행될 수 있습니다.

비트겟 런치풀이란? Bitget 런치풀은 어떻게 사용하나요? 비트겟 런치풀이란? Bitget 런치풀은 어떻게 사용하나요? Jun 07, 2024 pm 12:06 PM

BitgetLaunchpool은 모든 암호화폐 애호가를 위해 설계된 동적 플랫폼입니다. BitgetLaunchpool은 독특한 제품으로 돋보입니다. 여기에서 토큰을 스테이킹하여 에어드랍, 높은 보상, 초기 참가자에게만 제공되는 넉넉한 상금 풀 등 더 많은 보상을 잠금 해제할 수 있습니다. BitgetLaunchpool이란 무엇인가요? BitgetLaunchpool은 사용자 친화적인 이용 약관에 따라 토큰을 스테이킹하고 획득할 수 있는 암호화폐 플랫폼입니다. Launchpool에 BGB 또는 기타 토큰을 투자함으로써 사용자는 무료 에어드랍, 수익을 받고 넉넉한 보너스 풀에 참여할 수 있는 기회를 갖게 됩니다. 담보자산의 수입은 T+1시간 이내에 계산되며, 보상은 다음을 기준으로 합니다.

PHP 프레임워크의 학습 곡선은 다른 언어 프레임워크와 어떻게 비교됩니까? PHP 프레임워크의 학습 곡선은 다른 언어 프레임워크와 어떻게 비교됩니까? Jun 06, 2024 pm 12:41 PM

PHP 프레임워크의 학습 곡선은 언어 숙련도, 프레임워크 복잡성, 문서 품질 및 커뮤니티 지원에 따라 달라집니다. PHP 프레임워크의 학습 곡선은 Python 프레임워크에 비해 높고 Ruby 프레임워크에 비해 낮습니다. Java 프레임워크에 비해 PHP 프레임워크는 학습 곡선이 적당하지만 시작하는 데 걸리는 시간이 더 짧습니다.

PHP 프레임워크의 경량 옵션은 애플리케이션 성능에 어떤 영향을 줍니까? PHP 프레임워크의 경량 옵션은 애플리케이션 성능에 어떤 영향을 줍니까? Jun 06, 2024 am 10:53 AM

경량 PHP 프레임워크는 작은 크기와 낮은 리소스 소비를 통해 애플리케이션 성능을 향상시킵니다. 그 특징은 다음과 같습니다: 작은 크기, 빠른 시작, 낮은 메모리 사용량, 향상된 응답 속도 및 처리량, 리소스 소비 감소 실제 사례: SlimFramework는 500KB에 불과한 REST API를 생성하며 높은 응답성과 높은 처리량을 제공합니다.

Astar 스테이킹 원칙, 수입 해체, 에어드랍 프로젝트 및 전략 및 운영 보모 수준 전략 Astar 스테이킹 원칙, 수입 해체, 에어드랍 프로젝트 및 전략 및 운영 보모 수준 전략 Jun 25, 2024 pm 07:09 PM

목차 Astar Dapp 스테이킹 원리 스테이킹 수익 잠재적 에어드랍 프로젝트 해체: AlgemNeurolancheHealThreeAstar Degens DAOVeryLongSwap 스테이킹 전략 및 운영 "AstarDapp 스테이킹"이 올해 초 V3 버전으로 업그레이드되었으며 스테이킹 수익에 많은 조정이 이루어졌습니다. 규칙. 현재 첫 번째 스테이킹 주기는 종료되었으며 두 번째 스테이킹 주기의 "투표" 하위 주기가 막 시작되었습니다. '추가 보상' 혜택을 받으려면 이 중요한 단계(6월 26일까지 지속 예정, 5일 미만 남았음)를 파악해야 합니다. 아스타 스테이킹 수익을 자세하게 분석해보겠습니다.

Go WebSocket은 데이터베이스와 어떻게 통합됩니까? Go WebSocket은 데이터베이스와 어떻게 통합됩니까? Jun 05, 2024 pm 03:18 PM

GoWebSocket을 데이터베이스와 통합하는 방법: 데이터베이스 연결 설정: 데이터베이스/sql 패키지를 사용하여 데이터베이스에 연결합니다. WebSocket 메시지를 데이터베이스에 저장: INSERT 문을 사용하여 데이터베이스에 메시지를 삽입합니다. 데이터베이스에서 WebSocket 메시지 검색: SELECT 문을 사용하여 데이터베이스에서 메시지를 검색합니다.

See all articles