JDBC:Java与SQL数据库连接

JDBC是Java API的一种,用于执行SQL语句。它是Java标准库中规范程序如何访问数据库的接口。由于是接口,JDBC不能直接访问数据库,并且依赖于对应厂商提供的JDBC驱动,以实现JDBC规范。因此,编写程序操作数据库时一定要导入驱动包

JDBC的类和接口主要位于java.sql包中:

常用的类和接口

Driver接口

所有支持Java语言连接的类都会实现Driver接口,不同数据库有不同的驱动类名:

  • MySQL 5:com.mysql.jdbc.Driver

  • MySQL 8:com.mysql.cj.jdbc.Driver

DriverManager类

用于注册驱动和创建Java代码与数据库的连接。主要方法:

方法声明

描述

static void registerDriver(Drvier driver)

向DriverManager中注册JDBC驱动(建议不要使用)

static Connection getConnection(String url, String user, String password)

连接数据库并返回Connection接口对象。

加载数据库时通常使用Class类的静态方法forName()实现。

Connection接口

Connection接口代表一个Java程序和数据库的连接对象,Java程序通过这个连接对象访问和操作数据库。常用方法:

方法声明

描述

DatabaseMetaData getMetaData()

返回DatabaseMetaData接口对象(访问数据库元数据)

Statement createStatement

创建一个Statement接口对象(将一条SQL语句写入程序)

PreparedStatement prepareStatement(String sql)

创建一个PreparedStatement接口对象(将一条SQL语句写入程序)

`CallableStatement prepareCall(String sql)

创建一个CallableStatement接口对象(用于调用数据库中的存储过程)

Statement接口

用于执行静态SQL语句

方法声明

描述

int executeUpdate(String sql)

执行DML(操作)语句,返回受语句影响的记录条数

ResultSet executeQuery(String sql)

执行DQL(查询)语句,返回查询结果ResultSet接口对象

SQL语句分类

定义语句(DDL)
  • CREATE:创建数据库、表等

  • ALTER:修改表的定义

  • DROP:删除数据库、表等

操作语句(DML)
  • INSERT:插入数据

  • UPDATE:修改数据

  • DELETE:删除数据

查询语句(DQL)
  • SELECT:查询数据

控制语句(DCL)
  • GRANT:添加用户权限

  • REVOKE:收回用户权限

  • COMMIT:提交事务

  • ROLLBACK:回滚事务

PreparedStatement接口

PreparedStatement接口是Statement接口的子接口,用于执行预编译的SQL语句。该接口可以执行有参数的SQL语句,所以更推荐使用PreparedStatement接口

在PreparedStatement接口对象的SQL语句中,使用?占位符来代替参数,然后通过以下方法为参数赋值,其中prarmeterIndex表示SQL语句中?占位符的顺序。

方法声明

描述

void setInt(int parameterIndex, int x)

将参数设置为int类型值

void setDouble(int parameterIndex, double x)

将参数设置为double类型值

void setString(int parameterIndex, String x)

将参数设置为String类型值

void setDate(int parameterIndex, Date x)

将参数设置为java.sql.Date类型值

其他方法

方法声明

描述

int executeUpdate()

执行包含参数的DML(操作)语句和DDL(定义)语句,返回受语句影响的记录条数

ResultSet executeQuery()

执行包含参数的DQL(查询)语句,返回查询结果ResultSet接口对象

void setCharacterStream(int parameterIndex, java.io.Reader reader, int length)

将指定输入流写入数据库的文本字段

void setBinaryStream(int parameterIndex, java.io.InputStream x, int length)

将二进制输入流数据写入二进制字段

execute()方法


bool execute()

可以执行各种SQL语句。如果执行语句后产生了ResultSet对象,则返回true,可以用getResultSet()获取ResultSet对象;如果执行语句没有产生ResultSet对象,则返回false,可以用getUpdateCount()方法获取返回所影响的行数。

ResultSet接口

ResultSet接口封装了DQL(查询)语句返回的结果集。ResultSet接口对象初始化时,会有一个位于结果集第一行记录之前的指针,调用next()方法可以向下移动指针,所有在应用程序中常使用next()作为while循环的条件来迭代ResultSet结果集。


while (resultSet.next()) {
    intid=resultSet.getInt("id");
    System.out.println(id);
}

获取方法

columnIndex表示字段的索引(从1开始),columnName表示字段名

方法声明

描述

String getString(int columnIndex / String columnName)

获取指定字段的String类型值

int getInt(int columnIndex / String columnName)

获取指定字段的int类型值

Date getDate(int columnIndex / String columnName)

获取指定字段的Date类型值

操作指针

方法声明

描述

boolean next()

下移一行

boolean absolute(int row)

移动到指定行

void afterLast()

移动到末尾,即最后一行之后

void beforeFirst()

移动到开头,即第一行之前

boolean previous()

上移一行

boolean last()

移动到最后一行

JDBC编程

在了解JDBC常用的类和接口后,就可以编写JDBC程序操作数据库。

JDCB程序操作数据库的基本步骤是:

  1. 注册加载驱动

  1. 获取数据库连接

  1. 创建语句对象

  1. 执行语句

  1. 关闭资源

添加驱动包

以MySQL为例:

  1. 安装MySQL时会自动下载Java驱动包到C:\Program Files (x86)\MySQL\Connector J 8.0目录(默认安装路径)。

  1. 在IntelliJ IDEA中的项目下新建一个lib文件,将MySQL安装目录下的Java驱动程序复制到lib文件夹中。

  1. 在IntelliJ IDEA中依次点击File(文件)→Project Structure(项目结构)→Modules(模块),找到右侧的Dependencies(依赖),再单击➕,选择JARs or Directories(JARs或目录),在弹出的窗口选择刚才导入的驱动程序文件,点击OK(确定),然后点Apply(应用)。

导入sql类

新建Java类,在文件开头写入import java.sql.*;导入全部需要的sql接口和类。

注册加载驱动

加载MySQL数据库驱动代码如下:(会抛出异常ClassNotFoundException)


Class.forName("com.mysql.jdbc.Driver");

加载完数据库的驱动类后,Java会自动将驱动类的实例注册到DriverManagerDriverManager类

获取数据库连接

使用getConnection()会抛出异常SQLException


Connection connection = DriverManager.getConnection(String url, String user, String pwd);
  • MySQL的url书写格式是jdbc:mysql://hostname:port/databasename

  • user表示用户名,pwd表示密码

连接本地数据库中的demo数据库,代码如下:


Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/databasename", "root", "123456");

创建语句对象

这里使用PreparedStatement接口创建语句对象,会抛出异常SQLException


PreparedStatement preparedStatement = connection.prepareStatement("SQL语句");

在PreparedStatement接口对象的SQL语句中,使用?占位符来代替参数,然后通过PreparedStatement接口的方法为参数赋值。

执行语句

在创建语句对象后,使用对应接口的方法来执行语句。

方法声明

描述

int executeUpdate()

执行DML(操作)语句,返回受语句影响的记录条数

ResultSet executeQuery()

执行DQL(查询)语句,返回查询结果ResultSet接口对象

关闭资源

操作数据库会占用内存和外部数据库的资源,所以必须在方法调用结束后关闭数据库资源。为了保证在任何情况下都能关闭资源,应该将关闭操作对象名.close()放在try-catch语句的finally代码块中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值