Java的JDBC编程(以JAVA为例)

目标:
数据库驱动
JDBC 的概念及作用
掌握 JDBC 的工作原理
掌握 JDBC 中几个常用接口和类
掌握基于数据库的应用程序开发流程

1.数据库编程的必备的条件

编程语言,如 Java C C++ Python
数据库,如 Oracle MySQL SQL Server
数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如: MySQL
供了 Java 的驱动包 mysql-connector-java ,需要基于 Java 操作 MySQL 即需要该驱动包。同样的,
要基于 Java 操作 Oracle 数据库则需要 Oracle 的数据库驱动包 ojdbc。

 接下来我们说一说怎么添加库

第一下载库:

中央仓库maven网站网址:https://mvnrepository.com/

下载好之后:

在ieda软件里面 

这样就可以了。

 2. Java的数据库编程:JDBC

JDBC ,即 Java Database Connectivity java 数据库连接。是一种用于执行 SQL 语句的 Java API ,它是 Java中的数据库连接规范。这个 API java.sql.*,javax.sql.* 包中的一些类和接口组成,它为 Java开发人员操作数据库提供了一个标准的API ,可以为多种关系数据库提供统一访问。

3. JDBC工作原理

JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问 API 的一种高级抽象,它主要包含一些通用的接口类。
JDBC访问数据库的层次结构:

JDBC优势:

Java 语言访问数据库操作完全面向抽象接口编程开发数据库应用不用限定在特定数据库厂商的API程序的可移植性大大增强。

4. JDBC使用

4.1 JDBC开发案例

准备数据库驱动包,并添加到项目的依赖中:
在项目中创建文件夹 lib ,并将依赖包 mysql-connector-java-5.1.47.jar 复制到 lib 中。再配置该 jar
包到本项目的依赖中:右键点击项目 Open Module Settings ,在 Modules 中,点击项目,配置 Dependencies,点击 + JARS or Directories ,将该 lib 文件夹配置进依赖中,表示该文件夹下的
jar 包都引入作为依赖。

1.建立数据库连接

填写参数:

第一个解释:填写服务器所在位置

 2.连接服务器

 测试一下,连接成功

 3.构造sql语句

PreparedStatement对象的解释

但是这样就写死了sql语句了,能不能让用户输入捏?当然可以

 

执行结果:

还有一种,最主流的的 

4.sql语句发送到服务器上执行

Connection对象里面有两个常用的函数

 

我们执行一下

 对了,别忘记释放资源了。

 最终的代码:

package com.cdm;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class Demo11 {
    public static void main(String[] args) throws SQLException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入id:");
        int id = sc.nextInt();
        System.out.println("请输入名字:");
        String name = sc.next();
        //创建数据库源对象
        DataSource dataSource = new MysqlDataSource();
        //给对象设置属性
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");//服务器所在位置
        ((MysqlDataSource)dataSource).setUser("root");//服务器用户名
        ((MysqlDataSource)dataSource).setPassword("111111");//服务器密码

        //和服务器建立网络连接
        Connection connection = dataSource.getConnection();

        //程序构造sql语句
//        String sql = "insert into student values("+ id +", '"+ name +"')";
        String sql = "insert into student values(?, ?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);

        //把sql语句发送到服务器上,并让服务器执行
        int n = statement.executeUpdate();//返回值是影响到多少行

        //资源的释放
        statement.close();
        connection.close();
    }
}

同理,查询也是同样的道理

代码:

package com.cdm;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Demo12 {
    public static void main(String[] args) throws SQLException {
        //创建数据库源对象
        DataSource dataSource = new MysqlDataSource();
        //给对象设置属性
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");//服务器所在位置
        ((MysqlDataSource)dataSource).setUser("root");//服务器用户名
        ((MysqlDataSource)dataSource).setPassword("111111");//服务器密码

        //和服务器建立网络连接
        Connection connection = dataSource.getConnection();

        //创建sql语句,预处理
        String sql = "select*from student";
        PreparedStatement statement = connection.prepareStatement(sql);//预处理

        //执行sql语句
        ResultSet resultSet =  statement.executeQuery();//返回的是数集合

        //遍历结果
        while(resultSet.next()) {
            System.out.print("id:" + resultSet.getInt("id"));
            System.out.println("名字:" + resultSet.getString("name"));
        }

        //释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

 解释

 执行结果:

 也可以严谨一点的释放资源:

// 关闭连接命令
if ( connection != null ) {
   
try {
       
        connection . close ();
 
   } catch ( SQLException e ) {
       
        e . printStackTrace ();
   }
}

4.2 JDBC使用步骤总结

1. 创建数据库连接 Connection
2. 创建操作命令 Statement
3. 使用操作命令来执行 SQL
4. 处理结果集 ResultSet
5. 释放资源

5. JDBC常用接口和类 

5.1 JDBC API

Java JDBC 编程中对数据库的操作均使用 JDK 自带的 API 统一处理,通常与特定数据库的驱动类是完全 解耦的。所以掌握Java JDBC API (位于 java.sql 包下) 即可掌握 Java 数据库编程。

5.2 数据库连接Connection

Connection 接口实现类由数据库提供,获取 Connection 对象通常有两种方式:

种是通过DriverManager(驱动管理类)的静态方法获取:

// 加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection = DriverManager.getConnection(url);

 1种是通过DataSource(数据源)对象获取。实际应用中会使用DataSource对象:

也就是我上面写的这一种

以上两种方式的区别是:  

1. DriverManager 类来获取的 Connection 连接,是无法重复利用的,每次使用完以后释放资源时,通过connection.close() 都是关闭物理连接。
2. DataSource 提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接 是可以复用的,每次使用完数据库连接,释放资源调用connection.close() 都是Conncetion连接对象回收。

5.3 Statement对象  

Statement 对象主要是将 SQL 语句发送到数据库中。 JDBC API 中主要提供了三种 Statement 对象。

实际开发中最常用的是PreparedStatement对象,以下对其的总结:

 主要掌握两种执行SQL的方法:

  1. executeQuery() 方法执行后返回单个结果集的,通常用于select语句。
  2. executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于updateinsertdelete语句。

5.4 ResultSet对象 

ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供了对这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使ResultSetnext()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。

6.课堂总结

JDBC 使用步骤:
1. 创建数据库连接 Connection
        DriverManager创建
        DataSource获取
2. 创建操作命令 Statement
        PreparedStatement
3. 使用操作命令来执行 SQL
// 查询操作
preparedStatement . executeQuery ();
// 新增、修改、删除操作
preparedStatement . executeUpdate ();

 4. 处理结果集ResultSet

while ( resultSet . next ()) {
   
        int xxx = resultSet . getInt ( "xxx" );
   
        String yyy = resultSet . getString ( "yyy" );
        ...
}

5. 释放资源

try {
   
        if ( resultSet != null ){
       
                resultSet . close ();
          }
   
        if ( preparedStatement != null ){
       
                preparedStatement . close ();
          }
   
        if ( connection != null ){
       
                connection . close ();
          }
} catch ( SQLException e ) {
   
        e . printStackTrace ();
   
        throw new RuntimeException ( " 数据库错误 " );
}

好了今天就到这里了。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再无B~U~G

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值