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的数据库驱动,对于操作界面而言,数据库驱动就是:
文章图片
输入的命令就是MySQL数据驱动的一部分,数据库驱动包含了数据库操作API,它们的关系如下:
文章图片
2.什么是JDBC? 1.不同数据库厂商提供数据库驱动不一样,提供了不同的API接口,那么java程序要怎么实现,针对一个数据库写一套调用方法太麻烦,解决上面问题的办法就是使用JDBC.
文章图片
2.1JDBC定义 1.JDBC即java DataBase Connectivity,java数据库连接,是一种用于执行SQL语句的javaAPI,它是java中的数据库连接规范。目的是用这套规范(JDBC)实现不同数据库之间的统一访问。
2.2JDBC工作原理 【数据库|JDBC编程】1.jdbc为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。
jdbc访问数据库层次结构:
文章图片
2.JDBC优势
(1)java语言访问数据库操作完全面向抽象接口编程。
(2)开发数据库应用不用限定在特定数据库厂商的API。
(3)程序的可移植性大大增加。
3.JDBC使用 3.1创建项目并添加MySQL驱动 1.创建一个java项目(创建项目的目录里面一定不要包含中文路径,不然后面会有问题),并添加MySQL驱动(mysql-connector-java-5.1.47.jar),需要注意不同的数据库版本要对应相应的驱动包。
文章图片
文章图片
文章图片
文章图片
3.2使用代码操作数据库 1.操作数据库MySQL提供了两种操作API:
(1)DriverManager
(2)DataSource(推荐使用)
2.使用DataSource来实现操作数据库,使用代码操作数据分为五个步骤:
(1)获取数据源(准备工作,点击MySQL连接工具,并输入用户名、密码)
(2)获取连接(敲击回车试图建立客户端和服务端的连接)
(3)获取执行器(连接到服务器并切换到数据库)
(4)查询或操作数据库(输入命令并得到结果)
(5)关闭连接(关闭客户端)
3.2.1获取数据源
1.数据源是MysqlDataSource,获取方式如下,需要输入数据连接的MySQL服务器地址、用户名和密码:
文章图片
//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对象:
文章图片
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.具体实现:
文章图片
// 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,"王五");
文章图片
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();
//关闭连接
文章图片
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)
文章图片
(2)数据库:
文章图片
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)
文章图片
(2)
文章图片
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)
文章图片
(2)
文章图片
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 ";
PreparedStatement statement=connection.prepareStatement(sql);
statement.setInt(1,10);
//4.执行SQL,打印查询结果
ResultSet resultSet=statement.executeQuery();
//得到结果集
while(resultSet.next()){
City city=new City();
city.setId(resultSet.getInt("id"));
//查询当前行中列名为id的值
city.setName(resultSet.getString("name"));
//打印city对象
System.out.println(city);
}
//5.关闭资源
resultSet.close();
statement.close();
connection.close();
}
}
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)
文章图片
(2)
文章图片
推荐阅读
- java|年终奖问题
- java|数据结构之排序
- 一款基于 Spring Boot 开发的 OA 项目,已开源,真香..
- no appropriate service handler found,修改数据库的最大连接数,默认150
- Java|MyBatis简介及下载地址
- spring系列|Spring系列之primary可以解决什么问题()
- java|java指定日期年月日加减法
- mysql|MyBatis ResultMap结果集映射
- 面试题|【Java实习生面试题系列】-- 多线程篇一