Mysql数据库与JDBC编程

一、JDBC基础

前言

数据库访问接口:不同的程序涉及语言会有各自不同的数据库访问接口,程序语言通过这些接口执行SQL语言,进行数据库管理。此处列出了Java连接数据库的访问接口JDBC。
JDBC
Java数据库连接,它是一种可以执行SQL语句的JavaAPI,程序可以通过JDBC API连接到关系型数据库进行操作数据库数据。

JDBC简介

面向接口编程

在这里插入图片描述

一开始,sun公司准备开发一组Java API,准备囊括市面上所有的数据库操作系统,但是却具有很大的局限性,因为市面上的数据库实例太多,并且各个数据库实例内部特性又不同,故最后sun公司自己制定了一套标准的API,只提供接口不提供实现类。

具体的实现类由数据库厂商提供实现,这些实现类就是驱动程序,我们在编程时只需要面向JDBC编程即可,当需要在数据库实例之间进行切换例如Mysql切换为Oracle,只需要更换数据库驱动程序即可。

JDBC主要功能

  1. 与数据库建立连接
  2. 执行SQL语句
  3. 获得SQL语句执行结果

JDBC用法

JDBC常用接口和类简介

(1)DriverManager:用于管理JDBC驱动的服务类。程序中使用该类的的主要功能是获取Connection对象,具体方法:getConnection(String url, String user, String password)

(2)Connection:代表数据库连接对象,每个Connection代表一个物理连接会话。要想访问数据库,必须先得到数据库连接,主要用于获取执行sql语句的Statement对象

(3)Statement:用于执行sql语句的工具接口。当执行sql查询时,返回查询到的结果集。

(4)PreparedStatement:预编译的Statement对象,PreparedStatement是Statement的子接口,它允许数据库预编译sql语句(这些sql语句通常带有参数)

(5)ResultSet:结果集对象。该对象包含访问查询结果的方法,ResultSet可以通过列索引或列名获得列数据。

Statement与PreparedStatement区别

(1)Statement不支持预编译、PreparedStatement支持预编译
(2)PreparedStatement是Statement的子接口

具体:
对于两条SQL语句而言如果只有参数不同,结构相同,在这种情况下我们使用?(占位符)来代替要输入的值。而对于Statement执行sql语句时不允许使用问号,而且这个问号必须获得值之后才能执行,为了解决这种困扰,JDBC提供了PreparedStatement接口。其可以预编译SQL语句,预编译的SQL语句被存储在PreparedStatement对象中,然后可以使用该对象多次高效的执行该语句,一方面提高了效率,另一方面也防止了SQL注入。

如何防止SQL注入?
对于PreparedStatement,当SQL语句中使用参数时无需拼接SQL字符串
而使用Statement,则要拼接字符串。

JDBC编程步骤

第一步:注册驱动
Class.forName("com.mysql.cj.jdbc.Driver")

Tips:Mysql8.0使用的驱动为:com.mysql.cj.jdbc.Driver
驱动概念

  • JDBC是接口,驱动是接口的实现类,没有驱动将无法完成数据库连接,故需要引入Java连接数据库的jar包,每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。
  • 驱动程序可以保证两个设备进行通信,它需要满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过驱动程序可以与该设备进行通信。
  • 在这里插入图片描述
第二步:获取连接
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/database_name";
String user = "root";
Strign password = "root"
Connection conn = DriverManager.getConnection(url, user, password);

Tips:使用DriverManager类的静态方法getConnection()方法来实现。

第三步:创建对象

Tips:此处采用的是预编译对象PreparedStatement ,性能较好,此后无需再传入SQL语句,只需要为预编译的SQL语句参数赋值即可

String sql = "insert into user(username, sex, address) values(?,?,?)";
PreparedStatement ps = conn.preparedStatement(sql);
ps.setString(1, "张三");    //为第一个问号赋值
ps.setInt(2, 1);           //为第二个问号赋值
ps.setString(3, "北京市"); //为第三个问号赋值
第四步:执行语句
ps.executeUpdate();
第五步:释放连接

Tips:用于回收数据库资源

使用连接池管理连接

前言

数据库的连接与建立本身很消耗系统资源,对于多层结构的应用环境中,这种资源的耗费对系统的性能影响更为明显。对于使用传统的获取连接的方式,一个数据库的连接对象Connection均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完毕之后立即关闭。频繁的打开】关闭导致系统性能低下。

解决:使用数据库连接池,当应用程序启动的时候,系统主动建立起足够的数据库连接,将这些连接组成一个连接池,每次应用程序请求数据库连接时,无需重新打开连接,而是从数据库连接池中获取已有的连接使用,使用完毕之后不再关闭连接,二十将连接归还给连接池。

连接池具体的参数,后续会书写,及其重要的参数和原理。

JDBC的数据库连接池使用javax.sql.DataSource表示,其本身是一个接口,该接口被其他厂商实现,如C3P0和Druid等。
具体的Druid连接池可以参考官方文档的使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值