目标:
数据库驱动
JDBC
的概念及作用
掌握
JDBC
的工作原理
掌握
JDBC
中几个常用接口和类
掌握基于数据库的应用程序开发流程
1.数据库编程的必备的条件
编程语言,如
Java
,
C
、
C++
、
Python
等
数据库,如
Oracle
,
MySQL
,
SQL Server
等
数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:
MySQL
提
供了
Java
的驱动包
mysql-connector-java
,需要基于
Java
操作
MySQL
即需要该驱动包。同样的,
要基于
Java
操作
Oracle
数据库则需要
Oracle
的数据库驱动包
ojdbc。
接下来我们说一说怎么添加库
第一下载库:
中央仓库maven网站网址:https://mvnrepository.com/
下载好之后:
在ieda软件里面
这样就可以了。
2. Java的数据库编程:JDBC
JDBC
,即
Java Database Connectivity
,
java
数据库连接。是一种用于执行
SQL
语句的
Java API
,它是 Java中的数据库连接规范。这个
API
由
java.sql.*,javax.sql.*
包中的一些类和接口组成,它为
Java开发人员操作数据库提供了一个标准的API
,可以为多种关系数据库提供统一访问。
3. JDBC工作原理
JDBC
为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问
API
的一种高级抽象,它主要包含一些通用的接口类。
JDBC访问数据库的层次结构:
JDBC优势:
Java
语言访问数据库操作完全面向抽象接口编程开发数据库应用不用限定在特定数据库厂商的API程序的可移植性大大增强。
4. JDBC使用
4.1 JDBC开发案例
准备数据库驱动包,并添加到项目的依赖中:
在项目中创建文件夹
lib
,并将依赖包
mysql-connector-java-5.1.47.jar
复制到
lib
中。再配置该
jar
包到本项目的依赖中:右键点击项目
Open Module Settings
,在
Modules
中,点击项目,配置 Dependencies,点击
+
,
JARS or Directories
,将该
lib
文件夹配置进依赖中,表示该文件夹下的
jar
包都引入作为依赖。
1.建立数据库连接
填写参数:
第一个解释:填写服务器所在位置
2.连接服务器
测试一下,连接成功
3.构造sql语句
PreparedStatement对象的解释
但是这样就写死了sql语句了,能不能让用户输入捏?当然可以
执行结果:
还有一种,最主流的的
4.sql语句发送到服务器上执行
Connection对象里面有两个常用的函数
我们执行一下
对了,别忘记释放资源了。
最终的代码:
package com.cdm;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class Demo11 {
public static void main(String[] args) throws SQLException {
Scanner sc = new Scanner(System.in);
System.out.println("请输入id:");
int id = sc.nextInt();
System.out.println("请输入名字:");
String name = sc.next();
//创建数据库源对象
DataSource dataSource = new MysqlDataSource();
//给对象设置属性
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");//服务器所在位置
((MysqlDataSource)dataSource).setUser("root");//服务器用户名
((MysqlDataSource)dataSource).setPassword("111111");//服务器密码
//和服务器建立网络连接
Connection connection = dataSource.getConnection();
//程序构造sql语句
// String sql = "insert into student values("+ id +", '"+ name +"')";
String sql = "insert into student values(?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1,id);
statement.setString(2,name);
//把sql语句发送到服务器上,并让服务器执行
int n = statement.executeUpdate();//返回值是影响到多少行
//资源的释放
statement.close();
connection.close();
}
}
同理,查询也是同样的道理
代码:
package com.cdm;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Demo12 {
public static void main(String[] args) throws SQLException {
//创建数据库源对象
DataSource dataSource = new MysqlDataSource();
//给对象设置属性
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");//服务器所在位置
((MysqlDataSource)dataSource).setUser("root");//服务器用户名
((MysqlDataSource)dataSource).setPassword("111111");//服务器密码
//和服务器建立网络连接
Connection connection = dataSource.getConnection();
//创建sql语句,预处理
String sql = "select*from student";
PreparedStatement statement = connection.prepareStatement(sql);//预处理
//执行sql语句
ResultSet resultSet = statement.executeQuery();//返回的是数集合
//遍历结果
while(resultSet.next()) {
System.out.print("id:" + resultSet.getInt("id"));
System.out.println("名字:" + resultSet.getString("name"));
}
//释放资源
resultSet.close();
statement.close();
connection.close();
}
}
解释
执行结果:
也可以严谨一点的释放资源:
// 关闭连接命令if ( connection != null ) {try {connection . close ();} catch ( SQLException e ) {e . printStackTrace ();}}
4.2 JDBC使用步骤总结
1. 创建数据库连接 Connection2. 创建操作命令 Statement3. 使用操作命令来执行 SQL4. 处理结果集 ResultSet5. 释放资源
5. JDBC常用接口和类
5.1 JDBC API
在
Java JDBC
编程中对数据库的操作均使用
JDK
自带的
API
统一处理,通常与特定数据库的驱动类是完全 解耦的。所以掌握Java JDBC API
(位于
java.sql
包下) 即可掌握
Java
数据库编程。
5.2 数据库连接Connection
Connection
接口实现类由数据库提供,获取
Connection
对象通常有两种方式:
一种是通过DriverManager(驱动管理类)的静态方法获取:
// 加载JDBC驱动程序Class.forName("com.mysql.jdbc.Driver");// 创建数据库连接Connection connection = DriverManager.getConnection(url);
1种是通过DataSource(数据源)对象获取。实际应用中会使用DataSource对象:
也就是我上面写的这一种
以上两种方式的区别是:
1. DriverManager 类来获取的 Connection 连接,是无法重复利用的,每次使用完以后释放资源时,通过connection.close() 都是关闭物理连接。2. DataSource 提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接 是可以复用的,每次使用完数据库连接,释放资源调用connection.close() 都是Conncetion连接对象回收。
5.3 Statement对象
Statement
对象主要是将
SQL
语句发送到数据库中。
JDBC API
中主要提供了三种
Statement
对象。
实际开发中最常用的是PreparedStatement对象,以下对其的总结:
主要掌握两种执行SQL的方法:
- executeQuery() 方法执行后返回单个结果集的,通常用于select语句。
- executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete语句。
5.4 ResultSet对象
ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供了对这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
6.课堂总结
JDBC
使用步骤:
1.
创建数据库连接
Connection
DriverManager创建
DataSource获取
2.
创建操作命令
Statement
PreparedStatement
3.
使用操作命令来执行
SQL
// 查询操作preparedStatement . executeQuery ();// 新增、修改、删除操作preparedStatement . executeUpdate ();
4. 处理结果集ResultSet
while ( resultSet . next ()) {int xxx = resultSet . getInt ( "xxx" );String yyy = resultSet . getString ( "yyy" );...}
5. 释放资源
try {if ( resultSet != null ){resultSet . close ();}if ( preparedStatement != null ){preparedStatement . close ();}if ( connection != null ){connection . close ();}} catch ( SQLException e ) {e . printStackTrace ();throw new RuntimeException ( " 数据库错误 " );}
好了今天就到这里了。