第一章 JDBC概述
之前学习了JavaSE,编写了Java程序,数据保存在变量、数组、集合等中,无法持久化,后来学习了IO流可以将数据写入文件,但不方便管理数据以及维护数据的关系;
后来我学习了数据库管理软件MySQL,可以方便的管理数据。
那么如何将它俩结合起来呢?即Java程序<==>MySQL,实现数据的存储和处理。
那么就可以使用JDBC技术。
1.1 为什么需要JDBC
1.没有JDBC
2.有了JDBC后
1.2 JDBC概述
JDBC:Java Database Connectivity,它是代表一组独立于任何数据库管理系统(DBMS)的API,声明在java.sql与javax.sql包中,是SUN(现在Oracle)提供的一组接口规范。由各个数据库厂商来提供实现类,这些实现类的集合构成了数据库驱动jar。
即JDBC技术包含两个部分:
(1)java.sql包和javax.sql包中的API
因为为了项目代码的可移植性,可维护性,SUN公司从最初就制定了Java程序连接各种数据库的统一接口规范。这样的话,不管是连接哪一种DBMS软件,Java代码可以保持一致性。
(2)各个数据库厂商提供的jar
因为各个数据库厂商的DBMS软件各有不同,那么内部如何通过sql实现增、删、改、查等管理数据,只有这个数据库厂商自己更清楚,因此把接口规范的实现交给各个数据库厂商自己实现。
1.3 JDBC使用步骤
1.3.1 准备工作
create database day04;
use day04;
create table user(
id int primary key auto_increment,
username varchar(20),
password varchar(20),
nickname varchar(20)
);
INSERT INTO `USER` VALUES(null,'zs','123456','老张');
INSERT INTO `USER` VALUES(null,'ls','123456','老李');
INSERT INTO `USER` VALUES(null,'wangwu','123','东方不败');
1.3.2 注册驱动
(1)将DBMS数据库管理软件的驱动jar拷贝到项目的libs目录中
例如:mysql-connector-java-5.1.36-bin.jar
(2)把驱动jar添加到项目的build path中
(3)将驱动类加载到内存中
Class.forName("com.mysql.jdbc.Driver");
1.3.3 获取Connection连接对象
Connection conn = DriverManager.getConnection(url,username,password);
mysql的url:jdbc:mysql://localhost:3306/数据库名?参数名=参数值
jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8 (如果JDBC程序与服务器端的字符集不一致,会导致乱码,那么可以通过参数指定服务器端的字符集)
String url = "jdbc:mysql://localhost:3306/jdbc_test?useUnicode=true&characterEncoding=utf8";
String user = "root";
String password = "123456";
//获得连接
Connection connection = DriverManager.getConnection(url, user, password);
1.3.4 执行sql并处理结果
(1)编写sql
String sql = "select * from user";
(2)创建Statement对象
Statement statement = connection.createStatement();
(3)使用Statement对象执行sql
增删改:调用executeUpate方法
查询:调用executeQuery方法
ResultSet resultSet = statement.executeQuery(sql);
(4)处理结果
增删改:返回的是整数值,表示受到影响的数据条数 表示成功
查询:返回ResultSet结果
-
boolean next():判断是否还有下一行
-
getString(字段名或序号),getInt(字段名或序号),getObject(字段名或序号)
while (resultSet.next()) {
//获取每一列的数据
System.out.println(resultSet.getObject(1));
System.out.println(resultSet.getObject(2));
System.out.println(resultSet.getObject(3));
System.out.println(resultSet.getObject(4));
}
1.3.5 释放资源
原则是后创建的资源先关闭,我们会依次关闭ResultSet、Statement、Connection对象
//关闭资源
if(resultSet != null){
resultSet.close();
}
if(statement != null){
statement .close();
}
if(connection != null){
connection.close();
}
1.4 JDBC使用小结
第二章 JDBC的增删改查练习
2.1 执行添加的SQL语句
@Test
public void fun01() throws Exception {
//增加 insert into user values(null,'tq','77777','田七');
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获得连接
String url = "jdbc:mysql://localhost:3306/jdbc_test?useUnicode=true&characterEncoding=utf8";
String user = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url, user, password);
//3.创建执行sql语句对象
Statement statement = connection.createStatement();
//4.执行sql语句
String sql = "insert into user values(null,'tq','77777','田七')";
int rows = statement.executeUpdate(sql);
System.out.println("几行收影响=" + rows);
//5.释放资源
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
}
2.2 执行删除的SQL语句
@Test
//删除id为5的用户
public void fun03() throws Exception {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获得连接
String url = "jdbc:mysql://localhost:3306/jdbc_test?useUnicode=true&characterEncoding=utf8";
String user = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url, user, password);
//3.创建执行sql语句对象
Statement statement = connection.createStatement();
//4.执行sql语句
String sql = "delete from user where id = 5";
statement.executeUpdate(sql);
//5.释放资源
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
}
2.3 执行修改的SQL语句
@Test
//更新 把id为4的用户的密码改成88888888
public void fun02() throws Exception {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获得连接
String url = "jdbc:mysql://localhost:3306/jdbc_test?useUnicode=true&characterEncoding=utf8";
String user = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url, user, password);
//3.创建执行sql语句对象
Statement statement = connection.createStatement();
//4.执行sql语句
String sql = "update user set password = '88888888' where id = 4";
statement.executeUpdate(sql);
//5.释放资源
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
}
2.4 执行查询单行数据的SQL语句
要求: 将查询到的结果封装到User对象中
User类
public class User {
private int id;
private String username;
private String password;
private String nickname;
//提供get/set方法 Alt+Insert
public User() {
}
public User(int id, String username, String password, String nickname) {
this.id = id;
this.username = username;
this.password = password;
this.nickname = nickname;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.us