MySQL~Java的数据库编程:JDBC(JDBC的环境配置以及使用)

您所在的位置:网站首页 java开发数据库要会多少 MySQL~Java的数据库编程:JDBC(JDBC的环境配置以及使用)

MySQL~Java的数据库编程:JDBC(JDBC的环境配置以及使用)

2024-06-01 12:12| 来源: 网络整理| 查看: 265

 

目录

JDBC的环境配置

JDBC的使用步骤(Java操作数据库)

建立数据库连接

方式一:DriverManager

 方式二:DataSource(数据源/数据库连接池)

DataSource与DriverManager的对比 

创建操作命令对象Statement

Statement

PreparedStatement

CallableStatement

执行SQL语句

处理结果集 

释放资源 

JDBC实现查询操作完整代码

什么是JDBC?

JDBC即Java Database Connectivity,Java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个api由java.sql.*、javax.sql.*包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问.

· 多种:可以同时支持多种关系型数据库,可以任意切换(兼容性)

· 统一:使用一套标准的jdbc api操作的代码

JDBC的优势

· Java语言访问数据库操作完全面向抽象接口编程

· 开发数据库应用不用限定在特定数据库厂商的API

· 程序的可移植性增强 

JDBC的环境配置

①首先需要提前准备数据库驱动包

②创建项目,并创建一个lib目录,将jar包放置在lib目录中

③项目右键,打开当前项目的设置

④按照如下顺序将依赖包添加至项目中

⑤进行完上述步骤后即配置完成,之后检验是否配置成功即可.

只要能看到如上提示即配置成功.

JDBC的使用步骤(Java操作数据库)

数据库:是一个网络主机上的数据库服务端进程,需要使用URL来连接.

· 协议名:网络传输数据的格式

· 服务器地址:服务器(进程)所在主机对应的地址(ip,域名)

      本机的ip:127.0.0.1

      域名:localhost

· 服务器端口号:主机中端口绑定的一个进程

· 带层次的文件路径:服务资源(资源可能是一个文件,也可能是虚拟资源)

再进行下列jdbc操作之前,首先需要建立一个数据库,例如在下列演示中,我使用的是自己提前建好的db_test数据库,并针对其进行操作

建立数据库连接 方式一:DriverManager import java.sql.*; public class First { public static void main(String[] args) throws ClassNotFoundException, SQLException { //1、建立数据库连接 Class.forName("com.mysql.jdbc.Driver"); /** * DriverManager是jdbc的api,Connection也是(Java.sql开头) * url: * ①服务器地址,看看是不是要连接的数据库ip/域名 * ②带层次的路径:数据库名 * ③用户名,密码 */ Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_test?user=root&password=142516&useUnicode=true&characterEncoding=UTF-8"); } }  方式二:DataSource(数据源/数据库连接池)

连接池初始化时就创建了一定数量的数据库连接对象(Connection),一个程序连接某个数据库使用一个连接池就行.

import java.sql.Connection; import java.sql.SQLException; public class CourseQuery { public static void main(String[] args) throws SQLException { /** * 使用数据库连接池来获取数据库连接对象 * 一个Java程序,创建多个还是1个连接池对象一个 */ MysqlDataSource ds = new MysqlDataSource(); //url中的参数,可以使用方法来设置 ds.setURL("jdbc:mysql://localhost:3306/db_test"); ds.setUser("root"); ds.setPassword("142516"); //安全连接,如果不设置有警告 ds.setUseSSL(false); //设置编码格式:按某个编码保存数据,也要按一样的编码来使用 ds.setCharacterEncoding("UTF-8"); Connection c = ds.getConnection(); } } DataSource与DriverManager的对比 

· DriverManager每次都是新建一个物理连接,释放的时候是关闭物理连接,相当于实际操作MySQL中的点击关闭

· DataSource是初始化的时候就创建一定数量的连接,释放时只是重置并放回连接池,即可以实现复用

·  DriverManager效率低,而DataSource效率高

创建操作命令对象Statement

Statement对象用于执行sql代码,共有三种操作命令对象,分别为:Statement、PreparedStatement、CallableStatement.

Statement

不带占位符简单操作命令对象,用于执行不带参数的简单SQL语句

//2、创建操作命令对象 Statement s = c.createStatement(); PreparedStatement

 使用PreparedStatement创建操作命令对象时,需要对其传入sql语句

· 其用于执行带或不带参数的sql语句

· SQL语句会预编译在数据库系统

· 执行速度快于Statement对象

//2.创建操作命令对象 //使用PreparedStatement创建操作命令对象时,必须对其传入sql语句 String sql = "select id, name from course where name=?"; PreparedStatement ps = c.prepareStatement(sql); CallableStatement

用于执行存储过程的,后续学习后会记录在该博客中.

执行SQL语句

· 如果是插入、修改、删除操作,调用executeUpdate方法,返回int类型表示处理成功多少条

//插入,修改,删除,都调用executeUpdate,返回int是执行成功多少条 int n = ps.executeUpdate();

· 如果是查询操作,处理结果集ResultSet,调用excuteQuery方法,返回结果集

由于在利用PreparedStatement创建操作命令对象时已经传入了sql语句,因此在执行的时候就不需要再传了. 

//Statement创建操作命令对象 ResultSet rs = s.executeQuery("select id, name from course"); //PreparedStatement创建操作命令对象 ResultSet rs = ps.executeQuery(); 处理结果集  while(rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println(String.format("id: %d,name: %s\n",id, name)); } 释放资源 

 反向释放(ResultSet -> Statement -> Connection),都是调用close方法释放

//关闭结果集 if(rs != null) { try { rs.close(); } catch(SQLException e) { e.printStackTrace(); } } //关闭命令 if(s != null) { try { s.close(); } catch(SQLException e) { e.printStackTrace(); } } //关闭连接 if(c != null) { try { c.close(); } catch(SQLException e) { e.printStackTrace(); } } JDBC实现查询操作完整代码

下述为Java操作数据库实现查询操作的完整代码,创建操作命令对象时利用Statement创建,并实现根据用户输入来查询的操作.

package org.example; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import java.sql.*; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: Li_yizYa * Date: 2022—05—03 * Time: 19:43 */ public class CourseQuery { public static void main(String[] args) throws SQLException { //1.连接数据库 /** * 使用数据库连接池来获取数据库连接对象 * 一个Java程序,创建多个还是1个连接池对象一个 */ MysqlDataSource ds = new MysqlDataSource(); //url中的参数,可以使用方法来设置 ds.setURL("jdbc:mysql://localhost:3306/db_test"); ds.setUser("root"); ds.setPassword("142516"); //安全连接,如果不设置有警告 ds.setUseSSL(false); //设置编码格式:按某个编码保存数据,也要按一样的编码来使用 ds.setCharacterEncoding("UTF-8"); Connection c = ds.getConnection(); Scanner scan = new Scanner(System.in); System.out.print("请输入要查找的书名:>"); String inputName = scan.nextLine(); //2.创建操作命令对象 //使用PreparedStatement创建操作命令对象时,必须对其传入sql语句 String sql = "select id, name from course where name=?"; PreparedStatement ps = c.prepareStatement(sql); /** * 替换占位符: setXXX(index, value) * XXX: 值的类型 * index: 是占位符的索引位置(从1开始) * value: 要替换的值 */ ps.setString(1, inputName); //3.执行sql语句 ResultSet rs = ps.executeQuery(); //4.处理结果集 while (rs.next()){//遍历每一行数据 //获取id字段的值 int id = rs.getInt("id"); String name = rs.getString("name"); System.out.printf("id: %s, name: %s\n", id, name); } //5.释放资源:反向释放(resultSet, Statement, Connection).close() if(rs != null) { try { rs.close(); } catch(SQLException e) { e.printStackTrace(); } } //关闭命令 if(ps != null) { try { ps.close(); } catch(SQLException e) { e.printStackTrace(); } } //关闭连接 if(c != null) { try { c.close(); } catch(SQLException e) { e.printStackTrace(); } } } }

· 数据库中目前存储了六本书,可以随意查询以下六本书

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3