一.前言
1.1学习JDBC前所需基础
掌握Java SE(https://www.w3cschool.cn/java/)
掌握sql(https://www.w3cschool.cn/sql/)
掌握一门数据库(推荐MySQL)(https://www.w3cschool.cn/mysql/)
(下文的教程会基于MySQL 5.1.49和idea进行介绍)
最常用的增删查改语句
(1) 增加
insert into [table] ([column],[column],[column])
values(?,?,?)
(2) 删除
delete
from [table]
where column = ?
(3) 修改
update [table]
set column = ?
where column = ?
(4) 查询
select *
from [table]
where [column] = ?
1.2 JDBC是什么
Java数据库连接,全称Java Database Connectivity,简称JDBC。是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口( JAVA API),提供了诸如查询和更新数据库中数据的方法。
JDBC API 库包含下面提到的每个任务,都是与数据库相关的常用用法。
- 连接数据库。
- 创建 SQL 语句。
- 执行 SQL 语句。
- 查看和修改所产生的记录。
1.3 JDBC原理
为了更方便的连接和操作数据库,SUN公司提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API。各个厂商提供遵循JDBC规范的驱动,用来访问自己数据库。
简单来说,JDBC由java提供,而驱动由不同的数据库公司提供,因此我们使用哪种数据库,就要去下载相应的数据库驱动。
JDBC架构
- JDBC API: 提供了应用程序对 JDBC 管理器的连接。
- JDBC Driver API: 提供了 JDBC 管理器对驱动程序连接。
JDBC API 使用驱动程序管理器和数据库特定的驱动程序来提供异构(heterogeneous)数据库的透明连接。
JDBC 驱动程序管理器可确保正确的驱动程序来访问每个数据源。该驱动程序管理器能够支持连接到多个异构数据库的多个并发的驱动程序。
以下是结构图,其中显示了JDBC Driver Manager相对于在 JDBC 驱动程序和 Java 应用程序所处的位置。

二 JDBC接口、类介绍及使用
常用的类有:
- DriverManager – 类,用来获取Connection;
- Connection – 接口;维护与数据库的会话。 可用于事务管理。 它提供了返回Statement,PreparedStatement的方法。
- Statement – 接口;执行sql语句
(PreparedStatement – 接口;执行sql语句 - ResultSet – 接口。接受返回值,输出
具体使用和代码将在下文中详细介绍

JDBC使用
如果你已经配置完成,只对jdbc代码使用感兴趣,请点此跳过配置教程!
1.打开idea导入jar包
在项目名下新建lib文件夹,复制mysql-connector-java-5.1.36.jar包。(注意,jar包的版本应该和数据库的版本匹配,jar包版本过高会导致下一步idea无法连接到数据库)


按指示导入jar包,下一步通过idea集成的数据库登陆到MySQL。
2.登陆MySQL
1.点击右侧dataBase

2.点击+号,在Data Source下选择MySQL

接下来在红色框框内写下你的MySQL用户名和密码。

再点击Test Connection。成功后点完成。

出现上图画面时前期工作完成,进入JDBC代码部分。
3. 连接数据库
3.1加载驱动
通过反射机制要求JVM查找并加载指定的类
Class.forName("com.mysql.jdbc.Driver");
3.2获取链接
设置好地址,用户名和密码
注意,url中的数据库名是填写你想要操作的表所在的数据库,而一个数据库中包含很多张表。
String url = "jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF-8";
String user = "root";//输入MySQL用户名
String password = "******";//输入MySQL密码
Connection connection = DriverManager.getConnection(url,user,password);//获取连接
3.3 创建Statement(PreparedStatement)对象,执行sql语句,返回结果集
注意,在这里为什么有两种选择,Statement和PreparedStatement有什么区别?我们从具有登陆功能的sql语句的拼接来看他们的不同。

Statement是通过sql拼接的方式进行,可能会碰到恶意用户通过sql注入来破坏系统,而PreparedStatement对sql进行预编译,在数据库中形成“执行计划”,通过占位符的可以对SQL语句中的“变量参数“进行修改,可避免注入风险。
因此对于登陆功能,我们选用
String sql = "select * from t_user where userName = ? and password = ?";
System.out.println(sql);
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,username);
preparedStatement.setString(2,mypassword);
ResultSet resultSet = preparedStatement.executeQuery();
查询功能
String sql = "select * from student ";
//System.out.println(sql);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
Integer id = resultSet.getInt(1);
//resultSet获取数据可通过两种方式,一种是字段获取,一种是通过下标获取。
//上面id就是通过字段获取,下面name则是通过下标获取
String name = resultSet.getString(2);
double score = resultSet.getDouble(3);
Date date = resultSet.getDate(4);
System.out.println(id+"-"+name+"-"+score+"-"+date);
}

增、删、改功能
增删改和查询功能略有差异,查询功能需要返回结果集,而增删改不需要,下面以增加功能进行介绍
sql = "insert into student(name,score,birthday) values('二狗','100','2018-01-01')";
Statement statement = connection.createStatement();
int result = statement.executeUpdate(sql);//适合于增删改 用update
System.out.println(result);
左图中1是executeUpdate的返回值,右图显示已经插入数据

executeUpdate(sql) 的返回值是一个整数(int)。
当executeUpdate(sql)是INSERT、UPDATE 或 DELETE 语句时,返回的是受影响的行数(即更新的行数)。
当executeUpdate(sql)是CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值是0。
524

被折叠的 条评论
为什么被折叠?



