当前位置: 首页 > news >正文

MySQL——桥梁JDBC

一: 本节⽬标

掌握JDBC常⽤接⼝和类
熟练使⽤JDBC进⾏数据库交互
如何通过java程序操作数据库

二:什么是JDBC

JDBC(Java Data Base Connectivity, Java数据库连接)是Java程序和数据库之间的桥梁,包含了⼀套Java定义的⽤于执⾏SQL语句的接⼝,使开发者能够编写数据库的程序。JDBC 的主要作⽤是:与数据库建⽴连接、发送SQL语句和处理数据库执⾏结果。

1. JDBC的应⽤场景
java可以搭配不同的数据库进行开发
2. JDBC⼯作原理
a. JDBC⼯作原理简洁地概括为:加载驱动、建⽴连接、创建Statement、执⾏SQL、处理结果和关闭资源。
为了解决不同数据库的使用场景,java中只定义了由于连接和操作数据库的接口——jabc
具体的实现由数据库厂商完成。

三:为什么要使⽤JDBC

⾸先回顾⼀下使⽤客⼾端操作数据库的过程,主要分为以下⼏步:
a. 连接到数据库服务 getconnection
b. 发送SQL语句 query
c. 得到返回结果并显⽰ resultSet
d. 关闭连接 close

JDBC使⽤过程可以概括为:加载数据库⼚商的驱动包、建⽴连接、创建Statement、执⾏SQL、处理结果释放资源和关闭连接jadb 只定义了这些方法(getconnection、query、resultSet、close), 对于程序员来说,只需要调用JDBc定义的方法,就可以完成对数据库的操作。

四:使⽤JDBC

4.1 创建Maven⼯程

在idea创建项目 build system 选择 maven
项目中关于maven的配置文件就是pom

这个main就是开发时项目的源代码
test就是测试的
resources存放静态资源的

maven仓库中有java项目中所有的依赖
比如有连接MySql的jar包

4.2 获取MySQL驱动包

maven仓库有很多依赖。
在Maven仓库 mvnrepository.com 搜索MySQL,找到最新版的驱动包
举个例子啊:
点开maven仓库:

查找mysql依赖
后面带J就是最新版,java就是老版

选择一个java打开:
出先很多版本,以后根据所需选择就可以

点开一个8.0.33:

4.3 修改pom.xml⽂件

出现这些代码:
1手动创建一个标签<>
2把上个图片的代码复制一下

3报红我们点一下这个就可以,重新loag过程

在目录页就可以看到我们的依赖8.0.33

maven仓库一般都在国外,有时候下载依赖时候就很慢
可以把仓库配置成国内的
1:打开settings

2:找到这里

3找配置文件

4然后我们下载阿里云的国内镜像:
需要的话联系博主

4.4 建⽴数据库连接

使⽤驱动管理类 DriverManager 的静态⽅法获取数据库连接

public class Demo01_DriverManger {  public static void main(String[] args) {  //1:加载数据库厂商提供的驱动  try {  Class.forName("com.mysql.jdbc.Driver");  //2:创建数据库连接  Connection connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test", "root", "123456");  }catch (ClassNotFoundException e){  throw new RuntimeException(e);  }catch (SQLException e){  throw new RuntimeException(e);  }  }  
}

4.5 创建Statement

Statement是⽤于执⾏静态SQL语句并返回执⾏结果的对象
statement = connection.createStatement();

4.6 执⾏SQL语句

执⾏select查询时返回的是⼀个结果集,⽤ResultSet接收
执⾏nsert, update, delete操作时,返回的是受影响的⾏数,⽤int类型接收String sql ="select  id,name,sno,age,gender,enroll_date,class_id from student";  //5执行sql语句(增删改都用executeUpdate方法)  //查询是executeQuery方法  
resultSet= statement.executeQuery(sql);//获取结果

4.7 处理结果集

如果返回的是⼀个结果集,则需要遍历这个集合获取对应列的值,具体代码如下:
//6遍历结果集,获取数据行  
while (resultSet.next()){//resultSet.next()返回true则有下一行数据,false则没有  //7获取数据列  int id = resultSet.getInt(1);  String name = resultSet.getString(2);  String sno = resultSet.getString(3);  int age = resultSet.getInt(4);  Boolean gender = resultSet.getBoolean(5);  Date enroll_date = resultSet.getDate(6);  int class_id = resultSet.getInt(7);  //8输出数据  System.out.println("id:"+id+",name:"+name+",sno:"+sno+",age:"+age+",gender:"+gender+",enroll_date:"+enroll_date+",class_id:"+class_id);  
}

4.8 释放资源

在整个数据库访问过程中创建的对象都需要释放,包括:ResultSet,Statement和Connection,
后创建的先释放
finally {  //9关闭资源  if (resultSet != null) {  try {  resultSet.close();  } catch (SQLException e) {  throw new RuntimeException(e);  }  }  if (statement != null) {  try {  statement.close();  } catch (SQLException e) {  throw new RuntimeException(e);  }  }  if (connection != null) {  try {  connection.close();  } catch (SQLException e) {  throw new RuntimeException(e);  }  }  
}

五: JDBC常⽤接⼝和类

5.1 DriverManager 和DataSource

DriverManager驱动管理类,⽤于管理JDBC驱动程序,可以从驱动程序中获取数据库连接,始于JDK1.1。

DataSource数据源是DriverManager的替代⽅案,始于JDK1.4,是获取数据库连接的⾸选⽅法,推荐使⽤。

5.2 DriverManager 与 DataSource 的区别

DriverManager和DataSource都可以获取到数据库连接,但它们之间存着着⼀些区别,主要在于连接的管理⽅式和资源利⽤效率
连接管理⽅式不同:
DriverManager每次调⽤getConnection⽅法都会初始化⼀个新的连接,使⽤完成后会关闭真实连接,导致资源浪费

DataSource使⽤了连接池的技术,会在初始化时创建⼀定数量的数据库连接,这些连接可以重复使⽤,关闭时并不是真正关闭连接,⽽是将连接归还给连接池,以供后续使⽤,有效地提⾼资源利⽤率和和性能

六:实例

使用DriverManager去打印数据库的数据

我们如果想打印一列:就如下代码 打印一列,遍历结果集使用if
package com.bitjiuyeke;  
import java.sql. * ;  
import java.util.Scanner;  
public class Demo02_Statement {  public static void main(String[] args) {  Connection connection = null;  Statement statement =null;  ResultSet resultSet = null;  //1:加载数据库厂商提供的驱动  try {  Class.forName("com.mysql.cj.jdbc.Driver");  //2:创建数据库连接  connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/java116", "root", "123456");  //3创建statement对象,执行sql语句  statement = connection.createStatement();  Scanner scanner= new Scanner(System.in);  String  inputname = scanner.next();  //4定义sql语句  String sql ="select  id,name,sno,age,gender,enroll_date,class_id from student where name = '"+inputname+"'";  //5执行sql语句(增删改都用executeUpdate方法)  //查询是executeQuery方法  resultSet= statement.executeQuery(sql);//获取结果  //6遍历结果集,获取数据行  //遍历多条数据,使用while循环  
//            while (resultSet.next()){//resultSet.next()返回true则有下一行数据,false则没有  
//                //7获取数据列  
//                int id = resultSet.getInt(1);  
//                String name = resultSet.getString(2);  
//                String sno = resultSet.getString(3);  
//                int age = resultSet.getInt(4);  
//                Boolean gender = resultSet.getBoolean(5);  
//                Date enroll_date = resultSet.getDate(6);  
//                int class_id = resultSet.getInt(7);  
//                //8输出数据  
//                System.out.println("id:"+id+",name:"+name+",sno:"+sno+",age:"+age+",gender:"+gender+",enroll_date:"+enroll_date+",class_id:"+class_id);  
//            }  //遍历一条结果集,使用if语句  if (resultSet.next()){//resultSet.next()返回true则有下一行数据,false则没有  //7获取数据列  int id = resultSet.getInt(1);  String name = resultSet.getString(2);  String sno = resultSet.getString(3);  int age = resultSet.getInt(4);  Boolean gender = resultSet.getBoolean(5);  Date enroll_date = resultSet.getDate(6);  int class_id = resultSet.getInt(7);  //8输出数据  System.out.println("id:"+id+",name:"+name+",sno:"+sno+",age:"+age+",gender:"+gender+",enroll_date:"+enroll_date+",class_id:"+class_id);  }  }catch (ClassNotFoundException esthrow new RuntimeException(e);  }  }  }  }  
}

运行结果:

使用DataSource:去打印数据库中的数据

package com.bitjiuyeke;  import com.mysql.cj.jdbc.MysqlDataSource;  import javax.sql.DataSource;  
import java.sql.*;  
import java.util.ResourceBundle;  
import java.util.Scanner;  public class Demo03_DataSource {  public static void main(String[] args) {  //定义mysql数据源  MysqlDataSource mysqlDataSource = new MysqlDataSource();  //设置数据库的连接串  mysqlDataSource.setURL("jdbc:mysql://localhost:3306/java116");  //设置用户名和密码  mysqlDataSource.setUser("root");  mysqlDataSource.setPassword("123456");  //定义jdbc数据源对象  DataSource dataSource = mysqlDataSource;  //声明数据库连接对象  Connection connection = null;  //声明sql语句预处理对象  PreparedStatement statement = null;  //声明查询结果集对象  ResultSet resultSet = null;  //获取数据库连接  try {  connection = dataSource.getConnection();  String sql = "select id ,name,sno,age,gender,enroll_date , class_id  from student where name=? "; // 占位符替换  // 接收用户输入的姓名  Scanner scanner = new Scanner(System.in);  System.out.println("请输入要查询的学生姓名:");  String inputname = scanner.next();  scanner.close(); // 关闭 Scanner  // 初始化 PreparedStatement            statement = connection.prepareStatement(sql);  // 用真实的姓名替换占位符  statement.setString(1, inputname); // 占位符的index从1开始  // 执行sql语句  resultSet = statement.executeQuery();  // 获取查询结果集  // 遍历一条结果集,使用if语句  if (resultSet.next()) { // resultSet.next()返回true则有下一行数据,false则没有  // 获取数据列  int id = resultSet.getInt("id");  String name = resultSet.getString("name");  String sno = resultSet.getString("sno");  int age = resultSet.getInt("age");  Boolean gender = "M".equals(resultSet.getString("gender")); // 假设 'M' 代表男性,'F' 代表女性  Date enroll_date = resultSet.getDate("enroll_date");  int class_id = resultSet.getInt("class_id");  // 输出数据  System.out.println("id:" + id + ",name:" + name + ",sno:" + sno + ",age:" + age + ",gender:" + gender + ",enroll_date:" + enroll_date + ",class_id:" + class_id);  }  } catch (SQLException e) {  throw new RuntimeException(e);  } finally {  // 关闭资源  if (resultSet != null) {  try {  resultSet.close();  } catch (SQLException e) {  throw new RuntimeException(e);  }  }  if (statement != null) {  try {  statement.close();  } catch (SQLException e) {  throw new RuntimeException(e);  }  }  if (connection != null) {  try {  connection.close();  } catch (SQLException e) {  throw new RuntimeException(e);  }  }  }  }  
}

使用DataSource插入数据:

package com.bitjiuyeke;  import com.mysql.cj.jdbc.MysqlDataSource;  import javax.sql.DataSource;  
import java.sql.*;  
import java.util.Scanner;  public class Demo04_Insert {  public static void main(String[] args) {  //定义mysql数据源  MysqlDataSource mysqlDataSource = new MysqlDataSource();  //设置数据库的连接串  mysqlDataSource.setURL("jdbc:mysql://localhost:3306/java116");  //设置用户名和密码  mysqlDataSource.setUser("root");  mysqlDataSource.setPassword("123456");  //定义jdbc数据源对象  DataSource dataSource = mysqlDataSource;  //声明数据库连接对象  Connection connection = null;  //声明sql语句预处理对象  PreparedStatement statement = null;  //声明查询结果集对象  ResultSet resultSet = null;  try {//1获取数据库连接  connection = dataSource.getConnection();  //2定义sql语句  String sql = "insert into student (name,sno,age,gender,enroll_date,class_id) values(?,?,?,?,?,?) "; // 占位符替换  // 3获取sql预处理对象  statement = connection.prepareStatement(sql);  // 接收用户输入的姓名  Scanner scanner = new Scanner(System.in);  String inputname = scanner.next();  String inputsno=scanner.next();  int inputage=scanner.nextInt();  String inputgender=scanner.next();  String inputenroll_date=scanner.next();  int inputclass_id=scanner.nextInt();  // 4设置参数  statement.setString(1, inputname);  statement.setString(2, inputsno);  statement.setInt(3, inputage);  statement.setString(4, inputgender);  statement.setString(5, inputenroll_date);  statement.setInt(6, inputclass_id);  // 5执行sql语句  int row = statement.executeUpdate();  // 获取查询结果集  // 6遍历一条结果集,使用if语句  if (row==1 ) { // resultSet.next()返回true则有下一行数据,false则没有  // 获取数据列  System.out.println("数据插入成功!");  }else {  System.out.println("数据插入失败!");  }  } catch (SQLException e) {  throw new RuntimeException(e);  } finally {  // 7关闭资源  if (resultSet != null) {  try {  resultSet.close();  } catch (SQLException e) {  throw new RuntimeException(e);  }  }  if (statement != null) {  try {  statement.close();  } catch (SQLException e) {  throw new RuntimeException(e);  }  }  if (connection != null) {  try {  connection.close();  } catch (SQLException e) {  throw new RuntimeException(e);  }  }  }  }  
}

占位符要和设置参数相匹配

每次写连接太麻烦创建一个类,去调用就可以:
`package utils; 
import com.mysql.cj.jdbc.MysqlDataSource;  import javax.sql.DataSource;  
import java.sql.Connection;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  public class DBUtil {  //定义一个数据源对象  private  static DataSource dataSource;  //定义URL  private static String url="jdbc:mysql://localhost:3306/java116";  //定义用户名  private static String username="root";  //定义密码  private static String password="123456";  //在类加载的时候初始化dataSource对象  static {  //定义mysql数据源  MysqlDataSource mysqlDataSource = new MysqlDataSource();  //设置数据库的连接串  mysqlDataSource.setURL(url);  //设置用户名和密码  mysqlDataSource.setUser(username);  mysqlDataSource.setPassword(password);  //定义jdbc数据源对象  dataSource = mysqlDataSource;  }  private DBUtil() {}  public static Connection getConnection() throws SQLException{  return  dataSource.getConnection();  }  public static void close(ResultSet resultSet, Statement statement, Connection connection){  // 7关闭资源  if (resultSet != null) {  try {  resultSet.close();  } catch (SQLException e) {  throw new RuntimeException(e);  }  }  if (statement != null) {  try {  statement.close();  } catch (SQLException e) {  throw new RuntimeException(e);  }  }  if (connection != null) {  try {  connection.close();  } catch (SQLException e) {  throw new RuntimeException(e);  }  }  }  }`

upda实例使用Datasource:

package com.bitjiuyeke;  import utils.DBUtil;  import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.SQLException;  
import java.util.Scanner;  public class Demo05_Update {  public static void main(String[] args) throws SQLException {  Connection connection = null;  PreparedStatement statement = null;  Scanner scanner = new Scanner(System.in);  try {  // 1. 获取数据库连接  connection = DBUtil.getConnection();  // 2. 定义SQL语句, 根据Id修改学号  String sql = "update student set sno = ? where id = ?";  // 3. 定义SQL的预处理对象  statement = connection.prepareStatement(sql);  // 4. 用真实的数据替换占位符  System.out.println("请输入要修改的记录Id-->");  long inId = scanner.nextLong();  System.out.println("请输入要修改的学号-->");  String inSno = scanner.next();  statement.setString(1, inSno);  statement.setLong(2, inId);  // 5. 执行SQL  int row = statement.executeUpdate();  // 6. 获取执行结果  if (row >0) {  System.out.println("修改成功");  } else {  System.out.println("修改失败");  }  } catch (SQLException e) {  throw new RuntimeException(e);  } finally {  // 释放资源  DBUtil.close(null, statement, connection);  scanner.close();  }  }  
}


使用DataSource删除数据库中数据:

package com.bitjiuyeke;  import utils.DBUtil;  import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.SQLException;  
import java.util.Scanner;  public class Demo06_Delete {  public static void main(String[] args) {  Connection connection = null;  PreparedStatement statement = null;  Scanner scanner = new Scanner(System.in);  try{  // 1. 连接数据库  connection = DBUtil.getConnection();  //2.定义sql语句  String sql="delete from student where name=?";  //3.创建PreparedStatement对象  statement = connection.prepareStatement(sql);  //4输入要删除的学生姓名  System.out.println("请输入要删除的学生姓名:");  String name = scanner.next();  //5.设置参数  statement.setString(1, name);  //6.执行sql语句  int  row = statement.executeUpdate();  if(row>0){  System.out.println("删除成功!");  }else{  System.out.println("删除失败!");  }  } catch (SQLException e) {  throw new RuntimeException(e);  }finally{  //7.关闭资源  DBUtil.close(null, statement, connection);  scanner.close();  }  }  
}

http://www.dtcms.com/a/500075.html

相关文章:

  • 不在百度做推广他会把你的网站排名弄掉有哪些网络平台
  • 基于ADAMS的汽车悬架静态工作载荷提取
  • 提交网站通过命令上传wordpress
  • 龙岩有什么公司无锡seo公司网站
  • Make命令和makefile工程管理
  • 【CMAQ 模型第二期】运行 CMAQ 基准测试(Benchmark Case)
  • 小新pro更改网站设置不在百度做推广他会把你的网站排名弄掉
  • 四川做网站设计哪家好怎么封闭网站
  • 网站重建小微企业利润大于300万
  • 长春市网站开发网络营销怎么理解
  • MySQL 核心复制技术全解析:从日志格式到 GTID 实践
  • MLIR 学习1
  • Unity:UGUI笔记(一)——三大基础控件、组合控件
  • 栾城住房和城乡建设局网站百度推广运营公司
  • 下载了网站模板怎么用闸北微信网站建设
  • 就业信息|基于SprinBoot+vue的就业信息管理系统(源码+数据库+文档)
  • 黑龙江企业网站设计团队游戏网站建设多少钱
  • 分治:地毯填补问题
  • 北京南站附近的景点深圳工业设计培训班
  • 肤契:全域协议版 六 销量即救赎
  • 长治网站建设培训文件儿童7一8岁手工
  • php做购物网站详情页的代码点击链接即可进入
  • WebGL精简指南:核心概念、前端技术与效果实现
  • 怎么优化自己网站的关键词手机网站开发 html5
  • 前端基础--css(1)
  • 算法训练之多源BFS
  • 网站开发用什么语言比较流行网站建设未验收会计账务处理
  • openKylin 2.0版本学习入门
  • 如何用php数据库做网站搜狗收录提交
  • 人工智能三要素→ 数据 算力 算法