Java数据库编程

JDBC(Java Database Connectivity):是java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类库(位于java.sql和javax.sql包中)。利用JDBC,可以                                                      用java编写程序,实现与特定的数据库连接,向数据库发送SQL语句,实现对数据库的特定操作,并对数据库返回结果进行处理。

1.JDBC编程六个步骤 :(1).根据应用程序所用数据库,选择JDBC驱动程序类型。

                              (2).连接到数据库,得到Connection对象。

                              (3).通过Connection创建Statement对象。

                              (4).使用Statement对象提交SQL语句。

                              (5).操作结果集。

                             (6).回收数据库资源。

2.选定JDBC驱动程序类型 (1).LDBC-ODBC桥加ODBC 驱动程序

                                 (2).本地API和部分基于Java的驱动程

                                 (3).为数据库中间件实现的纯Java驱动程序

                                 (4).本地协议纯Java驱动程序(性能最好)

3.JDBC连接代码示例:

package com;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * JDBC辅助类
 * 
 * @author
 *
 */
public class JdbcUtil {

    /* 最好使用配置文件保存 */
    private static String driver; // 驱动
    private static String url; // 连接字符串
    private static String user; // 用户名
    private static String password; // 密码

    private static Connection conn; // Connection对象
    private static PreparedStatement pstmt; // PreparedStatement对象
    private static ResultSet rs; // ResultSet对象

    /* 加载数据库驱动 */
    static {
        loadProperties();
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    private JdbcUtil() {
    }

    /**
     * 读取配置文件
     */
    private static void loadProperties() {
        Properties properties = new Properties();
        InputStream in = Thread.currentThread().getClass()
                .getResourceAsStream("/com/lovo/day2/jdbc.properties");
        try {
            properties.load(in);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        driver = properties.getProperty("driver");
        url = properties.getProperty("url");
        user = properties.getProperty("user");
        password = properties.getProperty("password");
    }

    /**
     * 获取数据库连接
     * 
     * @return 连接对象
     */
    public static Connection getConnection() {
        try {
            return conn = DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 释放ResultSet资源
     * 
     * @param rs
     */
    public static void close(ResultSet rs) {
        try {
            if (null != rs)
                rs.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 释放ResultSet资源
     * 
     * @param rs
     */
    public static void close(Statement stmt) {
        try {
            if (null != stmt)
                stmt.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 释放ResultSet资源
     * 
     * @param rs
     */
    public static void close(Connection conn) {
        try {
            if (null != conn)
                conn.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 释放所有资源
     */
    public static void close() {
        try {
            if (null != rs && !rs.isClosed()) {
                rs.close();
            }
            rs = null;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                if (null != pstmt && !pstmt.isClosed()) {
                    pstmt.close();
                }
                pstmt = null;
            } catch (SQLException e) {
                throw new RuntimeException(e);
            } finally {
                try {
                    System.out.println(conn);
                    if (null != conn && !conn.isClosed()) {
                        conn.close();
                    }
                    conn = null;
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

    /**
     * 执行增删改
     * 
     * @param sql
     *            待执行的SQL语句
     * @param params
     *            SQL语句中?占位符的参数
     * @return 受影响的行数
     */
    public static int executeUpdate(String sql, Object... params) {
        try {
            if (null == conn)
                getConnection();
            pstmt = conn.prepareStatement(sql);

            if (null != params) { // 为SQL语句中?占位符设置参数
                for (int i = 0; i < params.length; i++) {
                    pstmt.setObject(i + 1, params[i]);
                }
            }

            return pstmt.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 实现查询
     * 
     * @param sql
     *            待执行的查询SQL语句
     * @param params
     *            SQL语句中?占位符的参数
     * @return 查询结果集ResultSet对象
     */
    public static ResultSet executeQuery(String sql, Object... params) {
        try {
            if (null == conn)
                getConnection();
            pstmt = conn.prepareStatement(sql);

            if (null != params) { // 为SQL语句中?占位符设置参数
                for (int i = 0; i < params.length; i++) {
                    pstmt.setObject(i + 1, params[i]);
                }
            }

            return rs = pstmt.executeQuery();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

posted on 2015-05-17 18:03  陌生人的问候  阅读(194)  评论(0编辑  收藏  举报