数据库操作方面的一点认识

历史问题

市面上有非常多的数据库,本来我们是需要根据不同的数据库学习不同的API,极不方便。

ODBC的诞生

ODBC是 Open Database Connectivity的英文简写。它是一种用来在相关或不相关的数据库管理系统(DBMS)中存取数据的,用C语言实现的,标准应用程序数据接口。通过ODBC API,应用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS使用了何种数据存储格式和编程接口。

JDBC(Java Data Base Connectivity)诞生

由于java的平台无关性面向对象等特征,导致其用户量激增,但是ODBC没有这两大特点,java的有点无法突出,JDBC应运而生。

是什么:

它是可以执行SQL语句的Java API。(对应着DAO层(data access object,数据访问对象))

其实可以好好细品一下JDBC,把接口定义出来,反正你给我实现就对了,无论数据库怎么变,用的时候是同一套API

jdbc如何解决(以mysql为例)

(也就是这6大步骤)

  1. 通过驱动实现实体类和数据库的连接,dirver,加载驱动

    Class.forName("com.mysql.jdbc.Driver");
    
  2. 获取与数据库连接的对象-Connetcion,

    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/zhongfucheng", "root", "root");
    

    获取到连接之后就在连接上实现数据处理

  3. 创建执行对象,

    Statement st = conn.createStatement();
    
  4. 执行SQL语句,拿到结果集

    resultSet = statement.executeQuery("SELECT * FROM users");
    
  5. 封装结果集

    while (resultSet.next()) {
    
            System.out.println(resultSet.getString(1));
    
            System.out.println(resultSet.getString(2));
        }
    
  6. 关闭连接

    /*
        * 关闭资源,后调用的先关闭
        *
        * 关闭之前,要判断对象是否存在
        * */
    
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
        }
    
PreparedStatement接口与Statement接口的区别
  • Statement对象编译SQL语句时,如果SQL语句有变量,就需要使用分隔符来隔开,如果变量非常多,就会使SQL变得非常复杂。PreparedStatement可以使用占位符,简化sql的编写
  • Statement会频繁编译SQL。PreparedStatement可对SQL进行预编译,提高效率,预编译的SQL存储在PreparedStatement对象中
  • PreparedStatement防止SQL注入。(Statement通过分隔符’++’,编写永等式,可以不需要密码就进入数据库)
数据库连接池

为什么我们要使用数据库连接池

数据库的连接的建立和关闭是非常消耗资源的,频繁地打开、关闭连接造成系统性能低下

常见的数据库连接池

C3P0、DBCP、Druid

mysql的分页
/*
	  Mysql分页语法:
	  @start---偏移量,不设置就是从0开始【也就是(currentPage-1)*lineSize】
	  @length---长度,取多少行数据
	
	*/
	SELECT *
	FROM 表名
	LIMIT [START], length;
	
	/*
	  例子:
	    我现在规定每页显示5行数据,我要查询第2页的数据
	
	  分析:
	    1:第2页的数据其实就是从第6条数据开始,取5条
	
	  实现:
	    1:start为5【偏移量从0开始】
	    2:length为5
		Mysql从(currentPage-1)*lineSize开始取数据,取lineSize条数据
*/
jdbc的事务管理

首先设置setautocommit(false)
当所有的sql语句都执行无误后,commit
如果出现问题执行rollback
使用savepoint保存中间点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值