数据库与java程序的连接操作--JDBC

JDBC是什么

JDBC,即java Datebase Connectivity,是java与数据库的连接技术,sun公司推出的一套java应用程序访问数据库的技术规范是java与数据库连接的桥梁,用于使用java进行数据库的增删改查。
JDBC是java访问数据库的基石,JDO,Hibernate等知识更好的封装了JDBC。
JDBC是独立于特定数据库管理系统,同于的sql数据库存储和操作的公共接口。

java中的数据库存取技术分类:

1.JDBC直接访问数据库
2.JDO技术(java Date Object)
3.第三方O/R工具,如Hibernate,Mybatis等

jdbc操作的前提

将jdbc的驱动包导入到项目中。
导包操作:右击工程,选择Open module Settings.----libraries----- + -------选择下载好的mysql-connector-java-8.0.23.jar包
在这里插入图片描述
在这里插入图片描述

JDBC连接的四部操作

1.加载驱动
方法一:可以直接用new对象的方式,但此方式属于编译期加载,如果编译期间该类不存在则直接报编译错误,有很强的依赖性。
并且会创建两次Driver类的对象,导致效率降低
方法二:通常使用反射类Class.froname()方法。可以避免上面的问题
2.获取连接:
DriverManager.getConnection(url, user, password).:三种参数分别为url地址,用户名,密码。通常在配置文件中配置,且用工具类获取。
3.执行sql语句的增删改查
connection.createStatement():返回statement对象,statement对象有两个主要方法
executeupdate方法用来进行增删改查的操作,executequery方法用来进行查询操作
4.关闭连接
各个对象的close方法;

prepareStatement:

在第三步操作获取statement对象时通常使用此方法,此方法可以在sql语句中的变量处使用占位符?来表示。
并通过后续的setXxx(Xxx代表数据类型):方法来定义占位符的内容

常见的连接池开源组织

DBCP:Apache提供的数据库连接池,速度相对c3p0更快,但自身存在bug,hibernate3不再支持
C3P0:速度相对较慢,但稳定性更好,不容易丢失连接数
Proxool:是source下的一个开源项目数据库连接池,有监控连接池状态的功能,稳定性较于c3p0差一点
BoneCp:速度快
Druid:是阿里提供的数据库连接池,集DBCP,C3P0,[roxool优点于一身的连接池,速度不一定有BoneCp快。

连接池的作用

连接池的作用

1.普通的jdbc数据库连接使用DriverManager来获取,每次想数据库建立连接的时候都要将
Connection加载到内存中,再验证IP地址,用户名和密码,需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接
这样会浪费大量资源世界,数据库的连接资源没有得到好的重复利用
2.每一次连接数据库,之后都要断开,否则会导致数据库系统中的内存泄漏
3.不能开工至被创建的连接对象数,系统资源会毫无顾忌的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃
连接池技术的优点:
1.资源重用
2.更快的系统反应速度
3.新的资源分配手段
4.同一的连接管理,避免数据库连接泄漏

Durid连接池

需要先下载durid包

导入jar包后,就可以用DruidDataSourceFactory.createDataSource(Properties pre)方法来建立连接

druid池连接实例

//Druid连接方式
        Properties pre = new Properties();
        pre.load(new FileInputStream("src\\Druid.Properties"));//获取配置文件信息,durid的配置文件与普通连接方法的配置文件不同,篇幅原因请自行搜索
        //DruidDataSourceFactory.createDataSource:创建数据库连接池
        //第一步:创建一个指定参数的数据库连接池
        DataSource ds = DruidDataSourceFactory.createDataSource(pre);
        //第二步:从数据库连接池中获取可用的连接对象
        Connection connection = ds.getConnection();
        PreparedStatement psm = connection.prepareStatement("此处为sql语句");
        ResultSet resultSet = psm.executeQuery();
        System.out.println("连接成功");
        connection.close();

封装工具类

由于每次使用JDBC连接时会有大量重复代码,因此可以将一些常用操作封装为工具类
此处用自己写的Durid版本的简易工具类展示一下,功能很简单

public class JDBCUTILSBYDURID {
    
    
    static Properties pre;
    static DataSource ds;


    static{
    
    //静态代码块加载重复操作,避免重复操作
        Connection connection = null;
        try {
    
    
            pre = new Properties();
            pre.load(new FileInputStream("src\\Druid.Properties"));//获取到url,root,password等信息

            ds = DruidDataSourceFactory.createDataSource(pre);
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

    public static Connection getConnection(){
    
    
		//通用的获取连接方法

        try {
    
    
            return ds.getConnection();
        } catch (SQLException throwables) {
    
    
            throw new RuntimeException();
        }
    }


    public static void Close(ResultSet resultSet, Statement statement, Connection connection){
    
    
		//通用的关闭连接方法
        if (resultSet!=null){
    
    
            try {
    
    
                resultSet.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
        }
        if (statement!=null){
    
    
            try {
    
    
                statement.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
        }
        if (connection!=null){
    
    
            try {
    
    
                connection.close();
            } catch (SQLException throwables) {
    
    
                throwables.printStackTrace();
            }
        }
    }
}

Utils工具类

需要导包

提供了一系列增删改查的工具类。
其中的主要两个类为:
QueryUpdate类:
update(connection.sql,?):执行任何增删改查
query(connection,sql,ResultSetHandler,?):执行任何查询语句,针对于任何表
ResultSetHandler:
beanHandler:将结果集的第一行封装成对象,需要有javabean文件 new beanHandler(class)
beanListHandler:将所有行封装成对象的集合,并且返回 new beanListHandler(class)
ScalarHandler:将结果集中的第一行第一列,以Object形式返回,new ScalarHandler

query(Connection,sql,ResultSetHandler,Object):参数分别为:
1.connection连接对象。2.sql语句。3.resultSetHandler,用于确认返回的结果集。 4.占位符的内容
代码实例:

@Test
    public void TestDButils1(){
    
    
        Connection connection = JDBCUTILSBYDURID.getConnection();//上述工具类获取连接
        QueryRunner qr = new QueryRunner();
        List<Account> query = null;
        try {
    
    
            query = qr.query(connection, "select * from account where balance>?", new BeanListHandler<>(Account.class), 2000);//以集合方式返回所有结果
        } catch (SQLException throwables) {
    
    
            throw new RuntimeExeception;//将编译期异常抛出为运行使异常
        }
        for (Account account:query){
    
    
            System.out.println(account);
        }
        JDBCUTILSBYDURID.Close(null,null,connection);//工具类关闭连接

    }

猜你喜欢

转载自blog.csdn.net/qq_52873070/article/details/114477812