数据库|JDBC编程


JDBC编程

  • 1.程序是怎么操作数据库的?
  • 2.什么是JDBC?
    • 2.1JDBC定义
    • 2.2JDBC工作原理
  • 3.JDBC使用
    • 3.1创建项目并添加MySQL驱动
    • 3.2使用代码操作数据库
      • 3.2.1获取数据源
      • 3.2.2获得连接
      • 3.2.3获得执行器
      • 3.2.4执行SQL
      • 3.2.5关闭资源
    • 3.3使用DriverManager实现查询
  • 4.添加实现
  • 5.修改实现
  • 6.删除实现
  • 7.查询实现

1.程序是怎么操作数据库的? 1.使用程序之所以能操作数据库,主要是因为数据厂商提供了操作的API,也就是数据库驱动,驱使数据库行动起来,就是数据库驱动,不光是程序,向我们之所以能通过命令行操作MySQL,也
是因为MySQL的数据库驱动,对于操作界面而言,数据库驱动就是:
数据库|JDBC编程
文章图片

输入的命令就是MySQL数据驱动的一部分,数据库驱动包含了数据库操作API,它们的关系如下:
数据库|JDBC编程
文章图片

2.什么是JDBC? 1.不同数据库厂商提供数据库驱动不一样,提供了不同的API接口,那么java程序要怎么实现,针对一个数据库写一套调用方法太麻烦,解决上面问题的办法就是使用JDBC.
数据库|JDBC编程
文章图片

2.1JDBC定义 1.JDBC即java DataBase Connectivity,java数据库连接,是一种用于执行SQL语句的javaAPI,它是java中的数据库连接规范。目的是用这套规范(JDBC)实现不同数据库之间的统一访问。
2.2JDBC工作原理 【数据库|JDBC编程】1.jdbc为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。
jdbc访问数据库层次结构:
数据库|JDBC编程
文章图片

2.JDBC优势
(1)java语言访问数据库操作完全面向抽象接口编程。
(2)开发数据库应用不用限定在特定数据库厂商的API。
(3)程序的可移植性大大增加。
3.JDBC使用 3.1创建项目并添加MySQL驱动 1.创建一个java项目(创建项目的目录里面一定不要包含中文路径,不然后面会有问题),并添加MySQL驱动(mysql-connector-java-5.1.47.jar),需要注意不同的数据库版本要对应相应的驱动包。
数据库|JDBC编程
文章图片

数据库|JDBC编程
文章图片

数据库|JDBC编程
文章图片

数据库|JDBC编程
文章图片

3.2使用代码操作数据库 1.操作数据库MySQL提供了两种操作API:
(1)DriverManager
(2)DataSource(推荐使用)
2.使用DataSource来实现操作数据库,使用代码操作数据分为五个步骤:
(1)获取数据源(准备工作,点击MySQL连接工具,并输入用户名、密码)
(2)获取连接(敲击回车试图建立客户端和服务端的连接)
(3)获取执行器(连接到服务器并切换到数据库)
(4)查询或操作数据库(输入命令并得到结果)
(5)关闭连接(关闭客户端)
3.2.1获取数据源
1.数据源是MysqlDataSource,获取方式如下,需要输入数据连接的MySQL服务器地址、用户名和密码:
数据库|JDBC编程
文章图片

//1.创建数据源 MysqlDataSource dataSource=new MysqlDataSource(); //1.1设置连接的MySQL服务器 dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true"); //1.2设置用户名 dataSource.setUser("root"); //1.3设置密码 dataSource.setPassword("123456");

3.2.2获得连接
连接对象是connection,注意此步骤容易出错,一定是com.mysql.jdbc包下的Connection对象:
数据库|JDBC编程
文章图片

3.2.3获得执行器
1.执行器是用来执行SQL命令的,执行器有三种:
(1)Statement:
用于执行不带参数的简单SQL语句。
(2)PreparedStatement:
用于执行带或者不带参数的SQL语句。
SQL语句会编译在数据库系统。
执行速度快与Statement.
(3)CallableStatement:
用于执行数据库存储过程的调用。
2.实际开发中最常用的PreparedStatement对象,它的优点有:
(1)参数化SQL查询
(2)性能比Statement高
(3)SQL预编译
(4)阻止常见SQL注入攻击
(5)占位符:? 下标从1开始
(6)占位符不能使用多值。
3.具体实现:
数据库|JDBC编程
文章图片

// 1.创建数据源 MysqlDataSource dataSource = new MysqlDataSource(); // 1.1 设置连接的 MySQL 服务器 dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33? characterEncoding=utf8&useSSL=true"); // 1.2 设置?户名 dataSource.setUser("root"); // 1.3 设置密码 dataSource.setPassword("12345678"); // 2.创建连接 Connection connection = (Connection) dataSource.getConnection(); //3.获得执行器 PreparedStatement statement=connection.prepareStatement("select * from student where username=?"); //3.1占位符赋值 statement.setString(1,"王五");

数据库|JDBC编程
文章图片

4.PreparedStatement有两种重要的方法:
(1)executeQuery():方法执行后返回单个结果集,通常用于select语句。
(2)executeUpdate():方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete语句。
3.2.4执行SQL
int result=statement.executeUpdate(); //返回受影响的行数 System.out.println("受影响的行数:"+result);

3.2.5关闭资源
关闭数据库连接时为了不浪费MySQL服务器端的资源。
//5.关闭资源(从小到大) statement.close(); //关闭执行器 connection.clase(); //关闭连接

数据库|JDBC编程
文章图片

3.3使用DriverManager实现查询 1.使? DriverManager 只是获取 Connection 之前的两步代码不?样:
// 1.加载JDBC驱动程序:反射,这样调?初始化com.mysql.jdbc.Driver类,即将该类加载到 JVM?法区,并执?该类的静态?法块、静态属性。 Class.forName("com.mysql.jdbc.Driver"); // 2.创建数据库连接 Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java33? user=root&password=12345678&characterEncoding=UTF-8&useSSL=true");

4.添加实现 1.代码:
import com.mysql.jdbc.Connection; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import java.sql.PreparedStatement; import java.sql.SQLException; public class AddCity { public static void main(String[] args) throws SQLException { //1.获得数据源 DataSource(设置mysql的服务器地址) MysqlDataSource dataSource=new MysqlDataSource(); dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true"); //设置mysql服务器地址 dataSource.setUser("root"); // 设置连接mysql的用户名 dataSource.setPassword("123456"); //设置mysql的密码 //2.获得连接Connection Connectionconnection=(Connection) dataSource.getConnection(); //3.得到执行器,组装SQL( String insertSQL="insert into city(id,name) values(?,?)"; //组装SQL,使用占位符? PreparedStatement statement=connection.prepareStatement(insertSQL); //填充占位符 statement.setInt(1,4); statement.setString(2,"深圳"); //4.执行SQL int result=statement.executeUpdate(); //返回一个受影响的行数 System.out.println("受影响的行数:"+result); //5.关闭资源 statement.close(); //关闭执行器 connection.close(); //关闭连接 } }

2.运行结果:
(1)
数据库|JDBC编程
文章图片

(2)数据库:
数据库|JDBC编程
文章图片

5.修改实现 1.代码:
import com.mysql.jdbc.Connection; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import java.sql.PreparedStatement; import java.sql.SQLException; public class UpCity { public static void main(String[] args) throws SQLException { //1.获得数据源 MysqlDataSource dataSource=new MysqlDataSource(); dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true"); dataSource.setUser("root"); dataSource.setPassword("123456"); //2.获得连接 Connection connection= (Connection) dataSource.getConnection(); //3.获得执行器,组装SQL String updateSql="update city set name=? where id=?"; PreparedStatement statement=connection.prepareStatement(updateSql); statement.setString(1,"长沙"); statement.setInt(2,3); //4.执行SQL int result=statement.executeUpdate(); System.out.println("受影响的行数:"+result); //5.关闭资源 statement.close(); connection.close(); ; } }

2.实现结果:
(1)
数据库|JDBC编程
文章图片

(2)
数据库|JDBC编程
文章图片

6.删除实现 1.代码:
import com.mysql.jdbc.Connection; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import java.sql.PreparedStatement; import java.sql.SQLException; public class DelCity { public static void main(String[] args) throws SQLException { //1.获得数据源 MysqlDataSource dataSource=new MysqlDataSource(); dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true"); dataSource.setUser("root"); dataSource.setPassword("123456"); //2.获得连接 Connection connection= (Connection) dataSource.getConnection(); //3.获得执行器,组装SQL String delSql="delete from city where id=?"; PreparedStatement statement=connection.prepareStatement(delSql); statement.setInt(1,2); //4.执行SQL int result=statement.executeUpdate(); System.out.println("受影响的行数为:"+result); //5.关闭资源 statement.close(); connection.close(); } }

2.实现结果:
(1)
数据库|JDBC编程
文章图片

(2)
数据库|JDBC编程
文章图片

7.查询实现 1.代码:
SelCity.java:
import com.mysql.jdbc.Connection; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class SelCity { public static void main(String[] args) throws SQLException { //1.获得数据源 MysqlDataSource dataSource=new MysqlDataSource(); dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true"); dataSource.setUser("root"); dataSource.setPassword("123456"); //2.得到连接Connection Connection connection= (Connection) dataSource.getConnection(); //3.获得执行器 String sql="select * from city where id

City.java:
public class City { private intid; private String name; public int getId() { return id; }@Override public String toString() { return "City{" + "id=" + id + ", name='" + name + '\'' + '}'; }public void setId(int id) {this.id = id; }public void setName(String name) {this.name = name; }public String getName() {return name; } }

2.运行结果:
(1)
数据库|JDBC编程
文章图片

(2)
数据库|JDBC编程
文章图片

    推荐阅读