JDBC连接 - JDBCBase

先介绍一下jdbc连接的流程

1,注册驱动

Class.forName("com.mysql.jdbc.Driver");

通过这句代码,我们会得到com.mysql.jdbc.Driver这个类,先将这个类加载进内存,该类中的静态代码块也会随之进入内存,在静态代码块中已经存在了注册代码.

Driver类如下

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }

    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can\'t register driver!");
        }
    }
}

为什么不使用DriverManager.registerDriver(new Driver());进行注册?
-驱动是分厂家的
-有重复性的操作(重复的进行注册)

2,创建与数据库的连接,获得连接对象

Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306?user=用户名,&password=密码");

获取连接对象三种方式:

-第一种

Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/数据库名?user=用户名,&password=密码"); 
// ?连接的是参数 
// user是参数名 
// 用户名是参数值 
// &与是在参数与参数之间起到连接作用

-第二种

Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/数据库名",
"用户名",
"密码");

-第三种

// 创建一个Properties对象
// 用来存储参数,用户名,密码
Properties properties = new Properties();
// 以key-values的方式存储
properties.setProperty("user","用户名");
properties.setProperty("password","密码");
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/数据库名",properties);

地址的含义
jdbc:mysql://localhost:3306/数据库名
协议:子协议:本机地址:端口号

3,通过连接对象,获得statement对象

Statement statement = connection.createStatement();

4,由statement对象,执行sql语句

statement.excute(sql语句);

执行sql语句可以使用三个执行方法

-boolean a = execute();
返回值类型是boolean类型,如果执行sql语句后,得到了一个ResutlSet对象,那么返回true;
如果执行sql语句后,得到的是受影响的行数,或者没有得到什么结果,那么返回false;

-int b = executeUpdate();
返回值是int类型,返回的是执行sql语句受影响的行数.

-ResultSet resultSet = executeQuery();
返回值是resultSet对象
可以通过while循环遍历resultSet结果集,进行输出.循环条件为resultSet.next();
判断下一行有没有数据,如果有返回true继续循环,如果没有,返回false,跳出循环.

ResultSet中常用的方法:

resultSet.getRow();//获取当前指针所在位置
resultSet.next();//获取当前指针下一行
resultSet.previous();//获取当前指针上一行

5,释放资源

connection.close();
statement.close();

代码块

{
// 普通代码块
}
static {
// 静态代码块
}

静态代码块的执行过程:当类加载进内存,静态的属性,方法,代码块也随之进入内存.
类加载进内存只执行一次,静态的属性,方法,代码块也执行一次.
静态的属性,方法,代码块的执行顺序不分前后,按顺序执行.

JavaBean使用

创建JavaBean类中
必须包含无参的构造方法
类中的属性,可以不是成员变量,但是属性名必须与表中字段名一致

创建类的集合,可以将查询到的信息,set进类的对象中,再将类的对象添加到集合中,如下代码所示

创建JavaBean类
public class stu{
// 与表中字段名相同的属性名
// 空的构造方法
// get与set方法
// toString方法
}
创建jdbc连接类
public class Jdbc{
    public static void main(String[] args) {
        // 创建集合
        List<Stu> list = new ArrayList<>();
        Connection conn = null;
        Statement statement = null;
        ResultSet res = null;
    try{
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/数据库名",
        "用户名",
        "密码");
        statement = conn.createStatement();
        res =  statement.executeQuery(
        "select * from stu;");
        while(res.next()) {
            // 创建stu对象,将数据set进stu对象
            Stu stu = new Stu();
            stu.setId(res.getInt("id"));
            stu.setName(res.getString("name"));
            // 将stu对象,添加进集合
            list.add(stu);
        }
        for(Stu stu: list) {
            system.out.println(stu);
    }catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

JDBCUtil

我们可以将jdbc连接过程封装成一个工具类,每次先查询数据库中的数据,我们就可以直接调用这个工具类,避免重复的操作.

public class JdbcUtil {
    // 先创建成员变量,赋值为空,之后从配置文件中读取数据内容,洗一次修改路径等,我们就直接可以从配置文件中修改.
    // 驱动类的路径
    private String driverClass = null;
    // 连接数据库路径
    private String url = null;
    // 用户名
    private String user = null;
    // 密码
    private String pass= null;

    // 在静态代码块中注册驱动,从配置文件中读取数据
    static {
        ClassLoader cl = JDBCUtil.class.getClassLoader();
        InputStream stream = cl.getResourceAsStream("jdbcfg.properties");
        // 得到流中的数据
        // 创建一个Properties对象
        Properties properties = new Properties();
        // 通过Properties对象的load方法,加载流中的数据
        try {
            prop.load(stream);
        }catch (IOException e) {
            e.printStrackTrace();
        }
        //根据key,获得value
            driverClass = prop.getProperty("driverClass");
            url = prop.getProperty("url");
            user = prop.getProperty("user");
            pass = prop.getProperty("password");
            try {
                Class.forName(driverClass);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }

    // 写一个静态方法,获取连接对象
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,password);
    }

    // 写一个静态方法,用来释放资源
    // 如果想要释放Connection对象
    // 需要调用Connection对象的close方法
    // 所以需要将Connection对象传入到release方法中
    // 释放资源
    // statement对象与ResultSet对象同理
    public static void release(Connection connection ,Statement statement,ResultSet res) {
        if(connection != null) {
            try{
                connection.close();
            }catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement != null) {
            try{
                statement.close();
            }catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(res != null) {
            try{
                res.close();
            }catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    // 重载release方法
    // 当不存在ResultSet时
    public static void release(Connection connection ,Statement statement) {
        release(connection,statement,null)
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值