三、Java基础之JDBC详解

JDBC主要包括一个类(DriverManager)和三个核心接口(Connection,Preparement,Resultset)
1.DriverManager类:驱动管理类,用于管理所有注册的驱动。(针对不同的数据库调用不同的驱动)它是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接.此外,DriverManager类中的方法都是静态方法,所以在程序中无须对它进行实例化,直接通过类名就可以用.DriverManager类的常用方法有getConnection(String url,String user,String password)方法,
比如连接数据库:Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”, “root”, “1234”);
2.Connection接口:代表与数据库之间的连接。要对数据库表进行操作,首先要与数据库建立来连接。就好像在应用程序和数据库之间建立一条连接的路径,通过DriverManager类的getConnection()方法可获取Connection实例。
3.PreparedStatement:预处理并执行sql语句。(支持预编译,在创建PreparedStatement对象的时候将sql语句传递给数据库做预编译,以后每次执行sql语句时,效率会提高很多。)
4.ResultSet:用于接收数据库所有查询记录,并使用ResultSet显示内容。
5.遍历结果集:

public List<Pet> getAllPet() {
        //创建一个集合对象
        List<Pet> pets=new ArrayList<>();
        //声明一个宠物对象
        Pet pet=null;
        //sql语句
        String sql="SELECT `id`,`name`,`typename`,`health`,`love`,`birthday`,`price`,`owner_id`,`store_id`,`type` FROM pet";
        //参数集
        Object[] params={};
        //对sql语句和参数进行处理,执行的结果存放在res中
        res=super.executeSelect(sql, params);
        try {
        /*
         res.next使用res对象读取记录中的内容,有两个动作,
         1、数据库指针指向下一条记录;
         2、如果没有返回false,自然循环退出;如果有记录,完成第二个动作,把记录内容存入res中,并返回true.
         */

            while(res.next()){
                pet=new Pet();//创建宠物对象
                //getInt是以Int类型取出res里的此列数据
                pet.setId(res.getInt("id"));
                pet.setName(res.getString("name"));
                pet.setTypename(res.getString("typename"));
                pet.setHealth(res.getInt("health"));
                pet.setLove(res.getInt("love"));
                pet.setBirthday(res.getDate("birthday"));
                pet.setPrice(res.getInt("price"));
                pet.setOwner_id(res.getInt("owner_id"));
                pet.setStore_id(res.getInt("store_id"));
                pet.setType(res.getInt("type"));
                pets.add(pet);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return pets;
    }

具体实现代码如下:

package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 数据库操作基础类
 * 
 * @author AAA
 *
 */
public class BaseDao {
    // 创建4个常量(数据库连接地址,数据库驱动类地址,数据库登录权限名,登录密码)
    //数据库驱动类地址
    private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
    //数据库连接地址
    private static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
    //用户名
    private static final String UNAME = "system";
    //密码
    private static final String UPWD = "ok";

    // 使用静态块加载数据库的驱动
    static {
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    // 声明三个核心接口对象(Connection,PreparedStatment,ResultSet)
    private Connection conn = null;// 数据库连接的对象
    private PreparedStatement pstmt = null;// SQL命令预处理并执行操作的对象
    protected ResultSet res = null;// 查询后返回的结果集对象
    // 编写创建数据库连接对象的方法(DriverManager)

    private void getConn() {
        try {
            conn = DriverManager.getConnection(URL, UNAME, UPWD);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    // 编写关闭数据库释放资源的方法
    protected void colseAll() {
        if (null != res) {
            try {
                res.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (null != pstmt) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (null != conn) {
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    // 编写数据库的查询方法
    protected ResultSet excuteSelect(String sql, Object[] params) {
        // 调用数据库连接对象的方法
        this.getConn();
        // 创建预处理对象
        try {
            pstmt = conn.prepareStatement(sql);
            // 通过for循环对参数进行预处理
            if (null != params) {
                for (int i = 0; i < params.length; i++) {
                    pstmt.setObject(i+1, params[i]);
                }
            }
            // 操作查询并返回结果集
            res = pstmt.executeQuery();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return res;
    }
    // 编写数据库的增删改的方法
    protected int excuteEdit(String sql,Object[] params){
        int count = 0;
        //调用数据库连接对象的方法
        this.getConn();
        try {
            //创建SQL命令预处理执行操作的对象
            pstmt = conn.prepareStatement(sql);
            //对参数进行预处理
            for (int i = 0; i < params.length; i++) {
                pstmt.setObject(i+1, params[i]);
            }
            //接收操作执行返回的行数
            count = pstmt.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            this.colseAll();
        }
        return count;
    }

}

猜你喜欢

转载自blog.csdn.net/simplehappiness7/article/details/81409943
今日推荐