MySQL学习总结(4)— JDBC概念、核心类、编程步骤
1. JDBC概念
JDBC(Java Data Base Connectivity):Java操作数据库的规范(接口)。
JDBC是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。
它由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,本文中的代码都是采用MySQL数据库实现的。
应用程序必须要通过相应的数据库驱动程序与数据库进行交互。因此,开发人员想要操作数据,需要通过jdbc加载具体的驱动。
【注意】:JDBC仅仅是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。
2. JDBC核心类
核心类 | 说明 |
---|---|
DriverManager | 注册驱动;获取Connection |
Connection | connection对象表示连接,获取Statement对象 |
Statement(PreStatement) | 向数据库发送SQL语句 |
ResultSet | 结果集,是一个二维的表格 |
-
DriverManager :
(1)注册驱动:这可以让JDBC知道要使用的是哪个驱动;
(2)获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。-
常用方法:
DriverManager.getConnection(url, user, password);
获取数据库连接。url的书写格式:
协议 :子协议 : //主机:端口 + 数据库 + 参数
。常用数据库URL地址的写法: Oracle写法:jdbc:oracle:thin:@localhost:1521:数据表名称 SqlServer写法:jdbc:microsoft:sqlserver: //localhost:1433; DatabaseName=数据表名称 MySql写法:jdbc:mysql: //localhost:3306/数据表名称,如果连接的是本地的Mysql数据库,并且连接使用的端口是3306,那么的url地址可以简写为: jdbc:mysql:///数据库
-
-
Connection :
connection对象表示连接,与数据库的通讯都是通过这个对象展开的:最为重要的一个方法就是用来获取Statement对象。常用方法:
方法 说明 createStatement() 创建向数据库发送sql的statement对象。 prepareStatement(sql) 创建向数据库发送预编译sql的PrepareSatement对象 prepareCall(sql) 创建执行存储过程的callableStatement对象 setAutoCommit(boolean autoCommit) 设置事务是否自动提交 commit() 在链接上提交事务 rollback() 在此链接上回滚事务 【注意】:Connection对象,是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。
-
Statement:
statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句。需要释放资源。
常用方法:
方法 说明 executeQuery(String sql) 向数据发送查询语句。 executeUpdate(String sql) 执行更新操作(insert、update、delete等) execute(String sql) 向数据库发送任意sql语句 addBatch(String sql) 把多条sql语句放到一个批处理中 executeBatch() 向数据库发送一批sql语句执行 -
ResultSet:
ResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生。结果集是一个二维的表格,有行有列。操作结果集要学习移动
ResultSet
内部的“行光标”,以及获取当前行上的每一列上的数据,如调用ResultSet.next()
方法,可以使光标指向具体的数据行。需要释放资源。
常用方法:
方法 说明 next() 移动到下一行 Previous() 移动到前一行 absolute(int row) 移动到指定行 beforeFirst() 移动resultSet的最前面 afterLast() 移动到resultSet的最后面
3. JDBC编程步骤
3.1 准备工作
使用JDBC 首先需要下载驱动,下载地址:https://mvnrepository.com/artifact/mysql/mysql-connector-java下载jar包。
然后导入jar包,详细步骤可参考https://blog.csdn.net/yinyanyao1747/article/details/90751024。
搭建实验环境,在mysql中创建一个库,并创建数据表,插入数据。
create database jdbcStudy character set utf8 collate utf8_general_ci;
use jdbcStudy;
create table users(
id int primary key,
name varchar(40),
password varchar(40),
email varchar(60),
birthday date
);
insert into users(id,name,password,email,birthday) values(1,'zhansan','123456','zs@sina.com','1980-12-04');
insert into users(id,name,password,email,birthday) values(2,'lisi','123456','lisi@sina.com','1981-12-04');
insert into users(id,name,password,email,birthday) values(3,'wangwu','123456','wangwu@sina.com','1979-12-04');
3.2 JDBC编程
-
JDBC编程步骤:
- 1.获取数据库连接
- 2.创建statement对象
- 3.编写sql语句
- 4.执行sql语句
- 5.得到执行结果
- 6.释放资源
-
代码实现:
-
文件目录
-
配置properties文件
driver = com.mysql.jdbc.Driver username = root password = 123456 url = jdbc:mysql://localhost:3306/jdbcstudy?useSSL=true
-
编写一个创建连接数据库的工具类
JDBCUtils
创建连接数据库都是死代码 , 每次写及其不方便 , 还有关闭连接,所以写成一个工具类,简化开发。
package org.jdbc.utils; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; //创建连接数据库工具类 public class JDBCUtils { private static String driver=null; private static String username=null; private static String password=null; private static String url=null; static{ try { //加载配置文件 InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties"); Properties properties = new Properties(); properties.load(is); //读取配置文件 driver = properties.getProperty("driver"); username = properties.getProperty("username"); password = properties.getProperty("password"); url = properties.getProperty("url"); //加载数据库驱动 Class.forName(driver); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } //获取数据库连接对象 public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url,username,password); } //释放资源 public static void closeAll(ResultSet resultSet, Statement statement,Connection connection){ if (resultSet!=null){ try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement!=null){ try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection!=null){ try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
-
测试JDBC的CRUD
package org.jdbc.dao; import org.jdbc.utils.JDBCUtils; import com.sun.org.apache.xml.internal.dtm.ref.DTMDefaultBaseTraversers; import org.junit.Test; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; //测试JDBC的CRUD public class Demo01 { @Test public void insert() { Connection connection = null; Statement statement = null; try { //1.获取数据库连接 connection = JDBCUtils.getConnection(); //2.创建statement对象 statement = connection.createStatement(); //3.编写Sql语句 String sql = "INSERT INTO users(id,NAME,PASSWORD,email,birthday) VALUES(4,'liuhu','234567','liuhu@sina.com','1980-10-05');"; //4.执行sql语句 int i = statement.executeUpdate(sql); //返回受影响的行数 } catch (SQLException e) { e.printStackTrace(); } finally { //6.释放资源 JDBCUtils.closeAll(null,statement,connection); } } @Test public void delete() { Connection connection = null; Statement statement = null; try { //1.获取数据库连接 connection = JDBCUtils.getConnection(); //2.创建statement对象 statement = connection.createStatement(); //3.编写Sql语句 String sql = "delete from users where id = 5"; //4.执行sql语句 int i = statement.executeUpdate(sql); //返回受影响的行数 if (i>0){ System.out.println("删除成功"); } } catch (SQLException e) { e.printStackTrace(); } finally { //6.释放资源 JDBCUtils.closeAll(null,statement,connection); } } @Test public void update() { Connection connection = null; Statement statement = null; try { //1.获取数据库连接 connection = JDBCUtils.getConnection(); //2.创建statement对象 statement = connection.createStatement(); //3.编写Sql语句 String sql = "update users set name = 'qinjiang' where id = 4"; //4.执行sql语句 int i = statement.executeUpdate(sql); //返回受影响的行数 if (i>0){ System.out.println("修改成功"); } } catch (SQLException e) { e.printStackTrace(); } finally { //6.释放资源 JDBCUtils.closeAll(null,statement,connection); } } @Test public void query() { Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { //1.获取数据库连接 connection = JDBCUtils.getConnection(); //2.创建statement对象 statement = connection.createStatement(); //3.编写Sql语句 String sql = "select * from users"; //4.执行sql语句 resultSet = statement.executeQuery(sql); //step5:获取执行结果 while (resultSet.next()){ System.out.println(resultSet.getInt("id")); System.out.println(resultSet.getString("name")); System.out.println(resultSet.getString("password")); System.out.println(resultSet.getString("email")); System.out.println(resultSet.getDate("birthday")); } } catch (SQLException e) { e.printStackTrace(); } finally { //6.释放资源 JDBCUtils.closeAll(resultSet,statement,connection); } } }
-