JDBC使用

目录

一、什么是JDBC?

二、使用步骤

1.下载jar包

2.IDEA中带入jar包

3.使用JDBC 

第一步:加载驱动

第二步:连接数据库

第三步:创建Statement对象

第四步:执行sql语句

三、数据库连接池

1.传统JDBC连接数据库的缺点

2.数据库连接池技术

数据库连接池的优点:

3.开源数据库

DBCP数据库池:

四、整合JDBC工具类

总结


一、什么是JDBC?

JDBC的全称是:Java Database Connectivity,即Java数据库连接。

JDBC可以通过载入不同的数据库的“驱动程序”而与不同的数据库进行连接。

二、使用步骤

1.下载jar包

        从maven库中可以直接下载相应版本的mysql.jar包;里面包含连接数据库需要的类,如Driver

        maven仓库地址:https://mvnrepository.com/search?q=mysql

2.IDEA中带入jar包

        1.直接jar右键 add as library

 

        2.project structure -> libraries -> 加号中选择java -> 导入jar包

        

        

3.使用JDBC 

        jdbc分为五步,步骤固定

第一步:加载驱动

        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

 com.mysql.jdbc.Driver是jar包中提供的类

如果mysql版本6.0以上,Driver类存在于 com.mysql.cj.jdbc.Driver中

第二步:连接数据库

/* url格式:
        jdbc:mysql:协议名
        localhost:ip地址
        3306:端口号
        mydb:数据库名
*/ 
private static String url = jdbc:mysql://localhost:3306/mydb
// 填入三个变量
Connection conn = DriverManager.getConnection(url, username, password);

第三步:创建Statement对象

1.Statement对象

Statement st = conn.createStatement();
String sql = "select * from testJDBC";

2.PrepareStatement对象

String sql = "delete from tb_user where userName = ?";
PrepareStatement st = conn.prepareStatement(sql);
 st.setString(1, "zhangsan");

 PrepareStatement使用占位符?替换sql语句中的变量部分,可以方式sql注入;

通过set系列方法进行赋值

第四步:执行sql语句

        statement和prepareStatement中方法类似:

1.执行查询语句 executeQuery()方法

        方法返回参数是 ResultSet类型,为查询结果集;next()方法用来判断结果集中是否存在一条数据;get系列方法可以通过列号或者列名就行查询

       String sql = "select * from tb_user";
       st = conn.prepareStatement(sql);

       rs = st.executeQuery();
       while(rs.next()) {
            System.out.println(rs.getString(1));
       }

2.执行DML语句: insert, delete, update,均使用executeUpdate()方法

        返回值为操作的数据数量; 以insert为例

    String sql = "insert into tb_user (userName) values (?)";
    PrepareStatement st = conn.prepareStatement(sql);
    st.setString(1, "lisi");

    int num = st.executeUpdate();
    if(num > 0) {
       System.out.println("插入:" + num);
     }

第五步:释放资源

        在JDBC编码的过程中我们创建了Connection、ResultSet等资源,这些资源在使用完毕之后是一定要进行关闭的。关闭的过程中遵循从里到外的原则。

        try {
             if(conn != null) conn.close(); // 防止空指针异常
        } catch (SQLException e) {
             e.printStackTrace();
        }
        try {
            if(st != null) st.close();
        } catch (SQLException e) {
             e.printStackTrace();
        }
        try {
            if(rs != null) rs.close();
        } catch (SQLException e) {
             e.printStackTrace();
        }

三、数据库连接池

1.传统JDBC连接数据库的缺点

(1)普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection加载到内存中,再验证用户名和密码。需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。这样的方式将会消耗大量的资源和时间。数据库的连接资源并没有得到很好的重复利用。若同时有几百人甚至几千人在线,频繁的进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩溃。
(2)对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将导致重启数据库。
(3)这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。

2.数据库连接池技术

        为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。

        数据库连接池负责分配管理释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个

数据库连接池的优点:

(1)资源重用
由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销。另一方面也增加了系统运行环境的平稳性。

(2)更快的系统反应速度
数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接避免了数据库连接初始化和释放过程的时间开销,从而减少了系统的响应时间

(3)新的资源分配手段
对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置,实现某一应用最大可用数据库连接数的限制,避免某一应用独占所有的数据库资源

(4)统一的连接管理,避免数据库连接泄漏
在较为完善的数据库连接池实现中,可根据预先的占用超时设定,强制回收被占用连接,从而避免了常规数据库连接操作中可能出现的资源泄露

3.开源数据库

        目前用过DBCP和Durid

        1.DBCP 是Apache提供的数据库连接池。tomcat服务器自带dbcp数据库连接池。速度相对c3p0较快,但因自身存在BUG,Hibernate3已不再提供支持。

        2.Druid 是阿里提供的数据库连接池,据说是集DBCP 、C3P0 、Proxool优点于一身的数据库连接池,但是速度不确定是否有BoneCP快。

DBCP数据库池:

        DBCP 是 Apache 软件基金组织下的开源连接池实现,该连接池依赖该组织下的另一个开源系统:Common-pool。如需使用该连接池实现,应在系统中增加如下两个 jar 文件:

maven仓库地址:

dbcp:连接池实现

pool:连接池dbcp中的依赖库

使用方式:

        通过配置文件将driver, url, username, password脱离java代码,保证项目的灵活性

   basicDataSource = new BasicDataSource(); // 创建连接池
   Properties properties = new Properties(); // 创建配置类
    // 获取配置文件输入流
   InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("db.properties");
        try {
            properties.load(is);
            driver = properties.getProperty("db.driver");
            url = properties.getProperty("db.url");
            username = properties.getProperty("db.user");
            password = properties.getProperty("db.password");
            // 使用连接池的set系列方法设置属性
            basicDataSource.setDriverClassName(driver);
            basicDataSource.setUrl(url);
            basicDataSource.setUsername(username);
            basicDataSource.setPassword(password);
        } catch (IOException e) {
            e.printStackTrace();
        }

配置文件 db.properties

        idea中配置文件放在resources的资源文件目录下,在编译的时候从类路径下加载配置文件

四、整合JDBC工具类

public class JDBCUtil {

    private static BasicDataSource basicDataSource;
    static {
        basicDataSource = new BasicDataSource();
        // 创建属性配置类
        Properties properties = new Properties();
        InputStream is = JDBCUtilPratice.class.getClassLoader().getResourceAsStream("db.properties");
        try {
            properties.load(is);

            // 属性赋值
            basicDataSource.setDriverClassName(properties.getProperty("db.driver"));
            basicDataSource.setUrl(properties.getProperty("db.url"));
            basicDataSource.setUsername(properties.getProperty("db.user"));
            basicDataSource.setPassword(properties.getProperty("db.password"));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        Connection conn = null;
        try {
            conn = basicDataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return conn;
    }

    public static void close(Connection conn) {
        if(conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

总结

        记录JDBC的学习

数据库连接池参考:JAVA之JDBC数据库连接池(超详细介绍)_故明所以的博客-CSDN博客_jdbc连接池

emmm,数据库连接池参考上述链接,文字方面的叙述来自上述文章,如侵权,还望指正(害怕)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值