Java – JDBC – 数据库基本操作

简介

JDBC全称 Java DataBase Connectivity . 是Java用于数据库连接,数据库操作的驱动。

JDBC的本质其实是Java官方定义的一套操作所有关系型数据库的接口集,通过不同数据库厂商对JDBC接口集开发实现类,从而使用JDBC一次编码,可以统一操作不同数据库。

 

基础使用

// 使用反射导入 Mysql 的 JDBC 驱动到内存中,在新的版本中,使用com.mysql.cj.jdbc.Driver 而且不需要再手动调用这个方法加载,会自动加载
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 调用 DriverManager.getConnection 连接Mysql数据库
        Connection sqlConn = DriverManager.getConnection("jdbc:mysql:///jdbc", "root", "tzminglove");
        // 定义一个 sql 语句
        String sql = "update user set money=2000 where id = 1";
        // 创建一个sql记录集管理对象
        Statement sqlStatement = sqlConn.createStatement();
        // sql记录集管理对象执行 sql 语句,会返回受影响的行数
        int count = sqlStatement.executeUpdate(sql);
        System.out.println(count);
        // 释放记录集
        sqlStatement.close();
        // 关闭数据连接
        sqlConn.close();

 

DriverManager类

驱动管理对象,用于管理一组JDBC驱动程序的基础服务类

功能:

1.注册驱动 registerDriver()

在使用反射调用 com.mysql.cj.jdbc.Driver 时,Driver 类里有一个静态代码块,随着反射调用时会自动执行

static {
        try {
            // 静态代码块处调用了DriverManager注册方法
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }

所以实际上,注册驱动的,是 DriverManager 类在处理

 

2.获取数据库连接

使用DriverManager.getConnection() 方法获取数据库

static Connection getConnection(String url)  
static Connection getConnection(String url, Properties info)  

// 使用连接 url 和数据库账号密码进行连接数据库,返回 Connection 对象
static Connection getConnection(String url, String user, String password)

url 中根据不同的数据库类型,url 定义也不同,如果是 mysql 的数据库,那么使用

jdbc:mysql://ip地址:端口/数据库名?参数键值对...

比如

jdbc:mysql://127.0.0.1:3306/db 

如果是本地的数据库,还可以不写数据库ip地址

jdbc:mysql:///db 

 

Connection类

数据库连接对象接口,它是一个数据库连接之后对于某个数据库连接的管理接口,一个数据库的连接,就是一个 Connection 方法

功能

1.获取执行 sql 的对象

// 创建一个sql记录集对象,用于管理sql执行和记录的类
Statement createStatement()  
PreparedStatement prepareStatement(String sql)  

2.管理事务

开启事务

// JDBC 默认开启自动事务提交,所以如果需要手动事务提交,需要关闭
void setAutoCommit(boolean autoCommit)  

调用方法设置参数为 false ,即开启事务

开启事务后,我们就可以对数据库进行一系列的操作,但是这样的操作并不是实时写进数据库中的,而是在事务中暂存,目的是提防在数据库操作过程中出现异常。

 

提交事务

// 把一些sql执行语句进行提交修改,如果修改成功则通过
void commit()  

如果在上述的数据库操作中没有出现异常,调用 commit() 提交事务后,数据库才会最终修改。如果上述数据库操作中出现异常了,就会被 try..cache 捕获异常,这时应该把数据库的操作进行回滚。

 

回滚事务

// 如果通过事务提交的任务执行失败,则会回滚事务
void rollback()  

回滚数据库操作后,上述一系列的数据库操作将无效还原。

 

Statement类

执行sql的记录集对象接口,它其实就是一个静态sql语句的记录集管理对象,用于管理sql执行和数据结果的接口。

// 执行任意的sql语句,这个不常用
boolean execute(String sql)  

// 执行DML(update,insert,delete)操作都可以调用它进行操作,返回影响行数
int executeUpdate(String sql)  

// 执行 DQL(select) 操作,都可以调用它来进行,用于查询数据库,会返回一个 
// ResultSet 对象
ResultSet executeQuery(String sql) 

 

 

ResultSet类

ResultSet 类是用于调用executeQuery 方法后,返回的数据库数据表集的类

ResultSet 对象默认在内存中会存在着一个 游标 ,用于指定当前查询数据库表中的记录位置,默认在第 0 行(第一行数据在第 1 行),使用 next() 方法,使 游标 往下移动一行,再进行读取数据。

// 使游标往下移动一行数据行,如果能移动则返回 true ,如果不能移动则返回 false
boolean next()

 

 

同时,可以调用 ResultSet 对象的 getXxx() 系列方法,对数据表中的字段进行读取

get 方法有非常多,但都只有两种重载方式

// 通过传入数据表的列数来定位字段,列数从 1 开始
getXxx(int columnIndex)

// 通过传入数据表的列名来定位字段
getXxx(String columnName)

getXxx 系列的方法有非常多,这里列举部分常用的方法

.getString();
.getInt();
.getBoolean();
.getByte();
.getDate();
.getFloat();
.getDouble();
.getLong();
.getTimestamp();
.getTime();
.getArray();

 

使用循环取出查询数据

ResultSet resultSet = sqlStatement.executeQuery(sql);
     while (resultSet.next()){
         // 取出等一列的字段数据
         resultSet.getInt(1);
         // 取出 字段名为 username 的字段数据
         resultSet.getString("username");
         resultSet.getString("createTime");
}

// 取出完数据后要释放资源
resultSet.close();

 

 

PreparedStatement类

执行sql的对象接口,PreparedStatement 是一个升级的Statement类。

Statement 类中是使用了静态sql语句执行查询的,这样会出现sql注入的问题(目前是),于是Java提供了一种动态的sql语句构建Statement类。

 

定义PreparedStatement

PreparedStatement 需要提前接收一个原始的sql语句,语句中的查询字段使用 ? 替代。

// 连接 MySQL 数据库
Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbc", "root", "tzminglove");

// 预先构造一个原始的sql语句,查询的字段使用 ? 代替
String sql = "select count(username) from user where username = ? and password = ?";

// 数据库连接对象 创建一个 PreparedStatement ,并传入原始sql
PreparedStatement ps = connection.prepareStatement(sql);

 

对sql进行字段匹配

配置好原始SQL语句后,需要在PreparedStatement 中设置 ? 替代符为真实的数据,PreparedStatement 提供了非常多的 setXxx() 系列方法

setXxx(int index, <T> data);

参数1:指的是要设置第几个 ? 替代符的值

 

参数2:指的是要设置的真正值

String sql = "select count(username) from user where username = ? and password = ?";
PreparedStatement ps = connection.prepareStatement(sql);

// 设置第一个 ? 的值为 username
ps.setString(1, username);
// 设置第二个 ? 的值为 password
ps.setString(2, password);

 

 

执行查询

PreparedStatement 类中因为前期已传入了原始sql语句,因此在执行查询时,是不需要传入sql参数的。

ResultSet executeQuery()

// 直接调用,返回 ResultSet 对象。
ResultSet resultSet = ps.executeQuery();

 

在项目中,多数都会使用PreparedStatement类代替不安全的Statement类。

 

 

 

如果您喜欢本站,点击这儿不花一分钱捐赠本站

这些信息可能会帮助到你: 下载帮助 | 报毒说明 | 进站必看

修改版本安卓软件,加群提示为修改者自留,非本站信息,注意鉴别

THE END
分享
二维码
打赏
海报
Java – JDBC – 数据库基本操作
JDBC全称 Java DataBase Connectivity . 是Java用于数据库连接,数据库操作的驱动。
<<上一篇
下一篇>>