:MySQL之Java的JDBC编程
Posted 我擦我擦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:MySQL之Java的JDBC编程相关的知识,希望对你有一定的参考价值。
文章目录
一:JDBC基本概念
(1)JDBC是什么
JDBC:全称为Java Database Connectivity,也即Java数据库连接,是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范,为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问(例如MySQL、SQL Server等等)
(2)JDBC工作原理
JDBC工作原理:JDBC为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。JDBC访问数据库层次结构如下
二:JDBC使用
(1)下载驱动
进入Maven Repository中搜索“mysql”,然后选择“MySQL Connector Java”
下拉选择相应版本的下载,注意大版本号要对应,这里我选择8.0.31,然后选中jar下载
- jar包是Java程序发布的一种常见方式
(2)添加项目依赖
首先创建一个项目
然后创建一个和src同级的目录,这里我命名为lib
接着把驱动包拷贝到该目录下
右键lib选择Add as Library,让IDEA能够识别目录中的jar包
(3)JDBC基本流程
JDBC基本流程:
- 创建数据源对象
- 设置URL、用户名和密码
- 与服务器建立连接
- 构造SQL语句并进行预处理
- 执行SQL语句
- 释放资源
import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBC
public static void main(String[] args) throws SQLException
/************创建数据源对象:它描述了要访问的数据库是什么,在哪里 **************/
/*
1: DataSource来源标准库,是一个接口,而MysqlDataSource来源于MySQL驱动包
2:每种数据库都会提供对应的类来实现DataSource接口(向上转型)
*/
DataSource dataSource = new MysqlDataSource();
/************设置URL、用户名和密码 **************/
/*
1:DataSource服务于各种数据库,而MysqlDataSource只是服务于MySQL
2: MySQL是一个C/S程序,要描述服务器的位置就必须指定服务器地址,所以需要
向下转型,转成子类后调用MysqlDataSource中的setURL方法
3:当然你也可以不用多态写法,写成下面这样
MysqlDataSource dataSource = new MysqlDataSource();
dataSource1.setURL();
但是这样的写法会导致MysqlDataSource与项目耦合程度太高,
因此未来在更换数据库时修改成本就会增加
4:setURL中各字段含义如下
jdbc:mysql: 协议名称
127.0.0.1:IP地址,这是本地环回,即本机IP地址
3306:端口号
mysql_java:要访问的数据库名称
characterEncoding=utf8:客户端使用的字符集(注意要和服务器一致)
useSSL=false:设置连接不加密
serverTimezone=UTC:设置时区为全球标准时间
*/
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysql_java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("password");
/************与服务器建立连接**************/
/*
1:注意处理异常,因为有很多原因可能会导致连接建立失败
2:使用Connection来表示连接,且注意Connection应该要使用JDBC(java.sql)下的Connection
不要使用MySQL中的Connection
*/
Connection connection = dataSource.getConnection();
System.out.println(connection); // 如果可以正常显示代表连接成功
/************构造SQL语句并进行预处理**************/
/*
1:使用高级语言操作数据库时,还是要通过SQL语句进行
2:如果直接把 字符串发给数据库,数据库就得对其进行解析(耗时比较长)
3:因此我们会把解析工作放在客户端进行,待客户端解析完成后直接把解析后的结果发送给数据库
4:所以需要通过字符串描述待执行的SQL操作,然后构造PreparedStatement对象
*/
String sql = "insert into student values(1, '张三')";
PreparedStatement statement = connection.prepareStatement(sql);
/************执行SQL语句**************/
/*
1:executeUpdate 对应插入删除、修改语句,返回值表示这次SQL影响了多少行
2:excuteQuery 对应查询语句,返回值是临时表数据
*/
int n = statement.executeUpdate();
System.out.println("n = " + n);
/************释放资源**************/
statement.close();
connection.close();
三:使用示例
(1)插入INSERT
实际在插入数据时不能把数据写死,要依据用户的输入把信息放入相应的字段,可以借助statement
中setXXX
方法实现
import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBCINSERT
public static void main(String[] args) throws SQLException
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysql_java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("password");
Connection connection = dataSource.getConnection();
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生学号");
int Sid = sc.nextInt();
System.out.println("请输入学生姓名");
String Sname = sc.next();
String sql = "insert into student values(?, ?)"; //?是占位符
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, Sid);
statement.setString(2, Sname);
int n = statement.executeUpdate();
System.out.println("n = " + n);
statement.close();
connection.close();
(2)更新UPDATE
更新前表状态
代码
import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBCUPDATE
public static void main(String[] args) throws SQLException
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysql_java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("password");
Connection connection = dataSource.getConnection();
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改学生的学号");
int Sid = sc.nextInt();
System.out.println("请输入要修改学生的姓名");
String Sname = sc.next();
String sql = "update student set Sname = ? where Sid = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(2, Sid);
statement.setString(1, Sname);
int n = statement.executeUpdate();
System.out.println("n = " + n);
statement.close();
connection.close();
(3)删除DELETE
更新前表状态
代码
import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBCDELETE
public static void main(String[] args) throws SQLException
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysql_java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("password");
Connection connection = dataSource.getConnection();
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除学生的学号");
int Sid = sc.nextInt();
String sql = "delete from student where Sid = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, Sid);
int n = statement.executeUpdate();
System.out.println("n = " + n);
statement.close();
connection.close();
(4)查询SELECT
注意查询时要使用executeQuery
方法,并用resultSet
接受返回结果
import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBCSELECT
public static void main(String[] args) throws SQLException
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysql_java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("password");
Connection connection = dataSource.getConnection();
String sql = "select * from student where Sid > 3";
PreparedStatement statement = connection.prepareStatement(sql);
//注意查询语句需要使用executeQuery来完成
ResultSet resultSet = statement.executeQuery();
//然后需要遍历结果集合
while(resultSet.next())
int Sid = resultSet.getInt("Sid");
String Sname = resultSet.getString("Sname");
System.out.println("Sid = " + Sid + ", Sname = " + Sname);
resultSet.close();
statement.close();
connection.close();
以上是关于:MySQL之Java的JDBC编程的主要内容,如果未能解决你的问题,请参考以下文章