文章标题:
MySQL环境下JDBC编程入门全解
文章内容:
欢迎 👍点赞 ➕关注 ❤️收藏 💬评论
目录
🌟一、何为JDBC?
🌟二、JDBC编程的步骤
✨使用流程
✨DriverManger
💫定义
💫DriverManger的主要作用
💫DriverManger的关键方法
💫使用示例
✨DataSource
💥定义
💥使用方式
💥代码优化手段
✨DriverManger与DataSource的差异
🌟一、何为JDBC?
JDBC(Java Data Base Connectivity,即Java数据库连接)是Java程序和数据库之间的沟通纽带,是Java语言操作数据库的标准API,它提供了一套用于执行SQL语句的Java接口。其主要功能是实现与数据库的连接、发送SQL语句以及处理数据库执行后的结果。
🌟二、JDBC编程的步骤
✨使用流程
1.加载数据库厂商所提供的驱动包
2.建立与数据库的连接,需要用到用户名和密码等信息
3.创建用于执行SQL语句的Statement对象
4.发送需要执行的SQL语句
5.接收并展示返回的结果(包括结果集以及受影响的行数等)
6.释放相关资源并关闭连接
✨DriverManger
💫定义
DriverManger是JDBC中的一个核心类,处于java.sql包下,它负责对数据库驱动程序进行管理,并且为客户端程序提供获取数据库连接的方法。它就如同一个“驱动协调者”,协调不同数据库驱动与应用程序之间的交互运作。
💫DriverManger的主要作用
- 注册数据驱动:对已经加载的数据进行管理;
- 获取数据库连接:依据连接信息(URL、用户名、密码)返回合适的Connection对象;
- 处理驱动程序之间的竞争:当有多个驱动都能连接到同一URL时,挑选出最合适的那个驱动。
URL是统一资源定位符,是互联网上用于指定一个位置、文件或者资源的标准方式。
💫DriverManger的关键方法
getConnection()
关键方法 | 功能 |
---|---|
getConnection(String url) | 通过URL来获取连接 |
getConnection(String url,String user,String password) | 通过URL、用户名和密码来获取连接 |
getConnection(String url,Properties info) | 通过URL和包含连接属性的Properties对象来获取连接 |
registerDriver(Driver driver) | 注册驱动(一般无需手动调用) |
deregisterDriver(Driver driver) | 注销驱动 |
gerDrivers() | 获取所有已注册的驱动 |
💫使用示例
import java.sql.*;
import java.text.MessageFormat;
import java.util.Scanner;
public class DemoOne {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//1,加载数据库厂商提供的驱动:将数据库提供的jdbc驱动类加载并注册到DriverManger中
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取数据库连接--类似在数据库中执行use java2;操作
//数据库连接URL格式:jdbc:mysql://服务器地址:端口/数据库?参数名=值[&参数名=值]
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java2?characterEncoding=utf8" +
"&allowPublicKeyRetrieval=true&useSSL=false", "root", "123456");
//3.创建Statement对象:Statement用于向数据库发送SQL语句
stmt = conn.createStatement();
//4.定义SQL语句并执行
System.out.println("请输入学生姓名:");
Scanner sc = new Scanner(System.in);
//接收用户输入
String name = sc.next();
String sql = "select id,name,class_id from students where name='" + name + "'";
//5.执行SQL,获取查询结果
//executeQuery用于执行select语句,返回结果集
rs = stmt.executeQuery(sql);
//6.对结果集进行遍历获取结果
//有返回true,没有返回false
while (rs.next()) {
long id = rs.getLong(1);//获取第一列字段的值
String Stuname = rs.getString(2);//获取第二列字段的值
long class_id = rs.getLong(3);//获取第三列字段的值
System.out.println(MessageFormat.format("学生id={0},姓名={1},班级={2}", id, name, class_id));
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {// 释放资源(从后往前释放),关闭连接
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
✨DataSource
💥定义
是Java数据库连接(JDBC)的一个接口,用于获取数据库连接,能够方便地对数据库连接资源进行管理,还可以实现连接池等高级功能。
💥使用方式
import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.*;
import java.text.MessageFormat;
import java.util.Scanner;
public class DemoTwo {
public static void main(String[] args) {
//定义MySQL数据源对象
MysqlDataSource mysqlDataSource = new MysqlDataSource();
//MySQL驱动直连
//数据库连接
mysqlDataSource.setURL("jdbc:mysql://127.0.0.1:3306/java2?characterEncoding=utf8");
mysqlDataSource.setUser("root");
mysqlDataSource.setPassword("123456");
//定义jdbc数据源对象
DataSource dataSource = mysqlDataSource;
Connection conn = null;
//预处理
PreparedStatement stmt = null;
//查询结果集对象
ResultSet rs = null;
try {
//1.获取数据库连接
conn = dataSource.getConnection();
//2.创建Statement对象:Statement用于向数据库发送SQL语句
//定义SQL语句并执行
String sql = "select id,name,class_id from students where name=?";
stmt = conn.prepareStatement(sql);
//3.接收用户输入
System.out.println("请输入学生姓名:");
Scanner sc = new Scanner(System.in);
String name = sc.next();
// 用真实值替换占位符
stmt.setString(1, name);
//4..执行SQL,获取查询结果
//executeQuery用于执行select语句,返回结果集
rs = stmt.executeQuery(sql);
//5.对结果集进行遍历获取结果
//有返回true,没有返回false
while (rs.next()) {
long id = rs.getLong(1);//获取第一列字段的值
String Stuname = rs.getString(2);//获取第二列字段的值
long class_id = rs.getLong(3);//获取第三列字段的值
System.out.println(MessageFormat.format("学生id={0},姓名={1},班级={2}", id, name, class_id));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {// 释放资源(从后往前释放),关闭连接
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
💥代码优化手段
封装
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;
import java.util.Random;
public class DBUtil {
//数据源
private static DataSource dataSource = null;
//数据库连接串
private static final String url = "jdbc:mysql://127.0.0.1:3306/java2?characterEncoding=utf8";
//用户
private static String user = "root";
//密码
private static String password = "123456";
//当类加载到JVM时,执行数据源的初始化
static {
MysqlDataSource mysqlDataSource = new MysqlDataSource();
mysqlDataSource.setURL(url);
mysqlDataSource.setUser(user);
mysqlDataSource.setPassword(password);
dataSource = mysqlDataSource;
}
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//构造方法私有化,防止new这个对象
private DBUtil() {};
//获取数据连接
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
使用jdbc插入数据
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class DemoThree {
//插入数据
public static void main(String[] args) {
Connection conn = null;
PreparedStatement stmt = null;
//插入数据,不用获得结果集,要影响行数即可
try {
//获取数据库
conn = DBUtil.getConnection();
//定义SQL
String sql = "insert into students(id,name,class_id) values(?,?,?)";
//定义SQL预处理对象
stmt = conn.prepareStatement(sql);
//接收用户参数
Scanner sc = new Scanner(System.in);
System.out.println("请输入id");
Long id = Long.valueOf(sc.next());
System.out.println("请输入姓名");
String name = sc.next();
System.out.println("请输入班级");
Long class_id = Long.valueOf(sc.next());
//用真实数据代替占位符
stmt.setLong(1, id);
stmt.setString(2, name);
stmt.setLong(3, class_id);
//获取结果,影响的行数
//executeUpdate执行返回结果是一个整形,通常用于insert、delete、update
int row = stmt.executeUpdate();
//判断
if (row == 1) {
System.out.println("插入成功");
} else {
System.out.println("插入失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
//关闭连接,释放资源
DBUtil.close(null, stmt, conn);
}
}
}
✨DriverManger与DataSource的差异
- DriverManger每次调用都会重新初始化一个新的连接,容易造成资源的浪费;
- DataSource采用连接池技术,一个连接可以被重复使用,用DataDource替代DriverManger.getConnection()的直连方式,更加直接且灵活。
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/13653.html