目录
1. 将数据库驱动包,添加到项目依赖中
创建目录,拷贝jar包,然后add as library
2. 创建数据源
DataSourse:数据源,描述了数据库服务器在哪里
3. 和数据库建立连接
使用JDBC里的Connection将代码和数据库服务器进行连接
一个程序中,通常有一个数据源对象,可以有多个Connection对象
4. 构造sql语句
PreparedStatement:表示一个预处理过的SQL语句对象
5. 执行sql语句
(1)executeUpdate 对应插入到删除修改语句,返回值表示这次SQL操作影响到的行数
(2)executeQuery 对应查询语句,返回值则是返回的临时表数据,用ResultSet接收
6. 释放资源
colse释放资源 先创建的后释放,后创建的先释放
各种数据库,都会提供API,方便编程语言来控制API:就是应用程序编程接口,提供了一组类/方法,让程序员直接调用Oracle、SQL Server、MySQL、SQLite... 不同种类的数据库提供的API不一样
API不一样就会有很多问题 (提高程序员学习成本;如果项目要把数据库替换成另一种,改动会非常大 )Java中为了解决这个问题,就提供了一组统一风格的数据库操作API然后让这些数据库厂商来适配java的API所以程序员只要掌握这一套java的API,就可以操作各种数据库,java把这个API叫JDBC
下载方法:
(1)去Oracle官网下载(麻烦需要去官网登录注册才可以下载)
(2)去中央仓库下载(https://mvnrepository.com/)
1.下载mysql驱动包
1)打开中央仓库—搜索mysql驱动包
2)找到和自己的mysql大版本对应的驱动包
3)找到对应大版本,然后点击进行下载
下载的是一个驱动包,驱动包在代码中才能看出来
2.把刚刚下载的jar包导入到项目中,使用
1)先创建一个目录,比如名字叫lib,和src同级
2)把刚才的jar包拷贝进lib中
3)右键刚才的目录lib,找到add as library ,是idea可以识别到jar包
通过JDBC来操作数据库,往数据库java01中的student1表中插入一条记录
1. 将数据库驱动包,添加到项目依赖中
右键项目创建目录(点Directory,和src同级)——>拷贝驱动包到目录——>右键目录点击add as library(让idea识别jar包)
2. 建立数据库连接
创建数据源对象,数据源对象就描述了要访问的数据库是什么和数据库位置在哪里
- DataSource dataSource = new MysqlDataSource();//向下转型
- ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");
- ((MysqlDataSource)dataSource).setUser("root");
- ((MysqlDataSource)dataSource).setPassword("111111");
每种数据库都会提供对应的类来实现DataSourse接口
调用的这个方法不是DataSource中的,而是MysqlDataSource转成子类引用,才可以调用这个方法(向下转型)
DataSource是服务于各种数据库的,
MysqlDataSource只服务于MySQL
MySQL中,是一个客户端服务器的程序,描述服务器的位置
会使用URL(去唯一资源定位符)这个概念来表示
但是有点的数据库,比如SQLite,就不是客户端服务器结构的
也就不使用URL
DataSource考虑到通用性,就不能使用setURL这样的方法
也可以这样写,但不建议
这种写法是不使用多态的写法
这样写可能会让MysqlDataSource这个类型出现在代码的很多地方
导致MySQL和项目的耦合性就提高了
(如果以后要更换成其他数据库,就需要把很多出现MysqlDataSoucre这个类型的地方,都要进行修改,非常麻烦)
3. 创建操作命令
让代码和数据库服务器建立连接
Connection connection = dataSource.getConnection();
4. 构造和执行SQL语句
构造要执行的SQL语句
(1)直接插入的
- //1.构造请求
- String sql = "insert into student1 values(1, '张三')";
- PreparedStatement statement = connection.prepareStatement(sql);
-
- //2.发送请求 & 读取响应
- //返回影响到的行数
- int n = statement.executeUpdate();
- System.out.println("n = " + n);
SQL语句发给数据库,然后数据库对这个SQL进行解析
解析过程是比较消耗资源、消耗时间的,所以就将一部分解析的工作,放在客户端完成,
客户端完成后,1将解析结果发给数据库,这样就节省了资源开销,提高效率
执行SQL,执行方法有两个
(1)executeUpdate 对应插入到删除修改语句,返回值表示这次SQL操作影响到的行数
(2)executeQuery 对应查询语句,返回值则是返回的临时表数据,用ResultSet接收
(2)用户输入,确定插入的值
这样做的好处是 代码可读性好,并且SQL注入问题得到改善
- //用户输入,通过用户输入的数据,来确定插入的值
- Scanner scanner = new Scanner(System.in);
- System.out.println("请输入要插入的学号:");
- int id = scanner.nextInt();
- System.out.println("请输入要插入的名字:");
- String name = scanner.next();
-
-
- //构造sql语句
- String sql = "insert into student1 values(?,?)";
- PreparedStatement statement = connection.prepareStatement(sql);
- statement.setInt(1,id);
- statement.setString(2,name);
- System.out.println("statement: " + statement);
-
- //执行sql语句
- int n = statement.executeUpdate();
- System.out.println("n = " + n);
5. 释放资源
完成之后,就需要关闭释放相关资源
释放资源的顺序和申请资源的顺序正好相反
(先创建的后释放,后创建的先释放)
- statement.close();
- connection.close();
执行代码
影响了一行
打开MySQL查询一下,看插入成功了没有
(1)修改
- 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 JDBCUpdate {
- public static void main(String[] args) throws SQLException {
- //1.创建数据源
- DataSource dataSource = new MysqlDataSource();
- ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");
- ((MysqlDataSource)dataSource).setUser("root");
- ((MysqlDataSource)dataSource).setPassword("111111");
-
- //2.和数据库建立连接
- Connection connection = dataSource.getConnection();
-
- //3.构造sql语句
- Scanner scanner = new Scanner(System.in);
- System.out.println("请输入要修改的同学学号:");
- int id = scanner.nextInt();
- System.out.println("请输入要修改的同学姓名:");
- String name = scanner.next();
-
- String sql = "update student1 set name = ? where id = ?";
- PreparedStatement statement = connection.prepareStatement(sql);
- statement.setString(1,name);
- statement.setInt(2,id);
-
- //4.执行sql语句
- int n = statement.executeUpdate();
- System.out.println("n = " + n);
-
- //5.关闭释放资源
- statement.close();
- statement.close();
- }
- }
运行代码后,在MySQL中查看是否修改成功
(2)删除
- 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;
-
- /**
- * Created with IntelliJ IDEA.
- * Description:
- * User: 28463
- * Date: 2022—08—16
- * Time: 13:49
- */
- public class JDBCDelete {
- public static void main(String[] args) throws SQLException {
- //1.创建数据源
- DataSource dataSource = new MysqlDataSource();
- ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");
- ((MysqlDataSource)dataSource).setUser("root");
- ((MysqlDataSource)dataSource).setPassword("111111");
-
- //2.和数据库建立连接
- Connection connection = dataSource.getConnection();
-
- //3.构造sql语句
- Scanner scanner = new Scanner(System.in);
- System.out.println("请输入要删除的同学学号:");
- int id = scanner.nextInt();
-
- String sql = "delete from student1 where id = ?";
- PreparedStatement statement = connection.prepareStatement(sql);
- statement.setInt(1,id);
-
- //4.执行sql语句
- int n = statement.executeUpdate();
- System.out.println("n = " + n);
-
- //5.关闭释放资源
- statement.close();
- connection.close();
- }
- }
执行代码,查看是否删除成功
(3)查询
- 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;
- import java.util.Scanner;
-
- /**
- * Created with IntelliJ IDEA.
- * Description:
- * User: 28463
- * Date: 2022—08—16
- * Time: 14:03
- */
- public class JDBCSelect {
- public static void main(String[] args) throws SQLException {
- //1.创建数据源
- DataSource dataSource = new MysqlDataSource();
- ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java01?characterEncoding=utf8&useSSL=false");
- ((MysqlDataSource)dataSource).setUser("root");
- ((MysqlDataSource)dataSource).setPassword("111111");
-
- //2.和数据库建立连接
- Connection connection = dataSource.getConnection();
-
- //3.构造sql语句
- String sql = "select * from student1";
- PreparedStatement statement = connection.prepareStatement(sql);
-
- //4.执行sql语句
- //查询语句要使用executeQuery来完成
- //返回结果是ResultSet,结果集,里面是一个“表”这样的数据结构
- ResultSet resultSet = statement.executeQuery();
-
- //5.遍历结果集合
- while (resultSet.next()) {
- //每次循环,都可以获取resultSet中的一行,进一步的就可以拿到每一列
- int id = resultSet.getInt("id");
- String name = resultSet.getString("name");
- System.out.println("id = " + id + ", name = " + name);
- }
-
- //6.释放资源
- resultSet.close();
- statement.close();
- connection.close();
- }
- }
也可以加上条件查询