Java--JDBC操作数据库

JDBC是一种可用于执行SQL语句的Java API,是连接数据库和Java程序的纽带。JDBC全称是Java Database Connectivity,是一套面向对象的应用程序接口,指定了统一的访问各种关系型数据库的标准接口。JDBC是一种底层的API,因此访问数据库时需要再逻辑层中嵌入SQL语句。

1.JDBC技术主要完成以下任务:

1.1.与数据库建立连接。

1.2.向数据库发送SQL语句。

1.3.处理从数据库返回的结果。

需要注意:JDBC并不能直接访问数据库,必须依赖数据库厂商提供的JDBC驱动程序。

2.JDBC驱动程序的类型

JDBC-ODBC桥

        依靠ODBC驱动器和数据库通信。这种连接方式必须将ODBC二进制代码加载到使用该驱动程序的每台客户机上。

JDBC网络驱动

        这种驱动程序将JDBC转换为与DBMS无关的网络协议,又被某个服务器转换为DBMS协议,是一种利用Java编写的JDBC驱动程序,也是最灵活的驱动程序。

本地协议驱动

        这是一种纯Java驱动程序。这种驱动程序将JDBC调用直接转换为DBMS所使用的网络协议,允许从客户机上直接调用DBMS服务器,是一种很使用的访问Internet的解决方法。

3.JDBC中常用的类和接口

常用的JDBC类和接口都在java.sql包中。

3.1 Connection接口

Connection接口代表与特定的数据库的连接,在连接上下文中执行SQL语句并返回结果。

Connection接口的常用方法
方法 功能描述
createStatement() 创建Statement对象
createStatement(int resultSetType, int resultSetConcurrency) 创建一个Statement对象,该对象将生成具有给定类型、并发性和可保存性的ResultSet对象
preparedStatement() 创建预处理对象preparedStatement
isReadOnly() 查看当前Connection对象的 读取模式是否为只读模式
setReadOnly() 设置当前Connection独享的读取模式为只读模式,默认为非只读模式
commit() 使所有上一次提交/回滚后进行的更改成为持久更改,并释放此Connection对象所持有的所有数据库锁
roolback() 取消当前事务中进行的所有更改,并释放此Connection对象所持有的所有数据库锁
close() 立即释放此Connection对象所持有的数据库和JDBC资源

3.2 Statement接口

Statement接口用于在已经建立Connection连接的基础上向数据库发送SQL语句。

在JDBC中有3种Statement对象:

3.2.1 Statement接口

        Statement对象用于执行不带参数的简单SQL语句;

Statement接口中的常用方法
方法 功能描述
execute(String sql) 执行静态的SELECT语句,该语句可能返回多个结果集
executeQuery(String sql) 执行给定的SQL语句,该语句返回单个resultSet对象
clearBatch() 清空此Statement对象的当前SQL命令列表
executeBatch() 将一组命令提交给数据库来执行,如果命令全部执行成功,则返回一个更新计数组成的数组,数组元素的排序与SQL语句的添加顺序对应
addBatch(String sql) 将给定的SQL命令添加到此Statement对象的当前命令列表中,如果驱动程序不支持批量操作,将抛出异常
close() 释放Statement对象占用的数据库和JDBC资源

3.2.2 PreparedStatement接口

        PreparedStatement继承了Statement,用来执行动态的SQL语句;通过PreparedStatement实例执行的动态SQL语句,将被预编译并保存到PreparedStatement实例中,从而可以反复地执行该SQL语句。

PreparedStatement接口提供的常用方法
方法 功能描述
setInt(int index, int k) 将指定位置的参数设置为int值
setFloat(int index, float f)
setLong(int index, long l)
setDouble(int index, double d)
setBoolean(int index, boolean b)
setDate(int index, date date)
setString(int index, String s)
setNull(int index, intsqlType) 将指定位置的参数设置为SQL NULL
executeQuery() 在此PreparedStatement对象中执行SQL查询,并返回该查询结果生成的ResultSet对象
executeUpdate() 执行前面包含参数的动态INSERT,UPDATE,DELETE语句
clearParameters() 清除当前所有参数的值

3.2.3 CallableStatement接口

        CallableStatement继承了PreparedStatement,用于执行对数据库的存储过程的调用。

3.3 PreparedStatement接口

        同3.2.2

3.4 DriverManager类

        DriverManager类用来管理数据库中的所有驱动程序。它是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库和驱动程序之间建立连接。

DriverManager类的常用方法
方法 功能描述
getConnection(String url, String user, String password) 指定3个入口参数,来获取与数据库的连接
setLoginTimeout() 设置驱动程序试图登录某数据库的最长等待时间,单位为秒
println(String message) 将一条消息打印到当前JDBC日志流中

3.5 ResultSet接口

        ResultSet接口类似一个临时表,用来暂时存储数据库查询操作所获取的结果集。ResultSet实例具有指向当前数据行的指针,指针开始的位置在第一条记录的前面,通过next()方法可将指针向下移动。

ResultSet接口提供的常用方法
方法 功能描述
getInt() 以int的形式获取此ResultSet对象的当前行的指定列的值。如果列值是NULL,则返回值是0
getFloat()
getDate()
getBoolean()
getString()
getObject()
first() 将指针移动到当前记录的第一行
last() 将指针移动到当前记录的最后一行
next() 将指针向下移动一行
beforeFirst() 将指针移动到集合的开头(第一行位置)
afterLast() 将指针移动到集合的尾部(最后一行位置)
absolute(int index) 将指针移动到ResultSet给定编号的行
isFirst() 判断指针是否位于当前记录的第一行
isLast()
updateInt() 用int值更新指定列
updateFloat()
updateLong()
updateString()
updateObject()
updateNull()
updateDate()
updateDouble()
getrow() 查看当前行的索引号
insertRow() 将插入行的内容插入到数据库中
updateRow() 将当前行的内容更新到数据库表
deleteRow() 删除当前行,但不同步到数据库,而是执行close()方法后同步到数据库中

4.数据库操作

4.1 连接数据库步骤:

        4.1.1 下载数据库驱动类,并加载到程序中

        详见JDBC | mysql-connector jar包的加载_mysql-connector-java.jar-CSDN博客

        4.1.2 通过java.lang包的静态方法forName()来加载JDBC驱动程序

        4.1.3 通过java.lang包中类DriverManager的静态方法getConnection(String url, String user, String pwd)建立数据库连接

package db;

import java.sql.*;          //导入java.sql包

public class Conn {
    Connection con;     //声明Connection对象

    public Connection getConnection() {         //建立返回值为Connection对象的方法
        try {
//            Class.forName("com.mysql.jdbc.Driver");           //deprecated
            Class.forName("com.mysql.cj.jdbc.Driver");      //加载数据库驱动类
            System.out.println("数据库驱动加载成功");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        
        try {
            //通过访问数据库的url,获取数据库连接对象con
            con = DriverManager.getConnection("jdbc:mysql:" + "//127.0.0.1:3306/debug", "root", "12345678");
            System.out.println("数据库连接成功");
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return con;     //返回Connection对象
    }

    public static void main(String[] args) {
        Conn c = new Conn();        //创建类对象
        c.getConnection();          //调用连接数据库的方法
    }
}

输出:
        数据库驱动加载成功
        数据库连接成功

4.2 向数据库发送SQL语句

4.3 处理查询结果

4.4 顺序查询

4.5 模糊查询

4.6 预处理语句

4.7 添加、修改、删除记录

你可能感兴趣的:(Java,java,数据库,开发语言,mysql,jdbc)