Java 的 JDBC 编程

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

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

2. Java 的数据库编程:JDBC

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

3. mysql-connector

3.1 下载三种途径

1. 官网(Oracle 官网);2. github;3. maven 中央仓库

方法3详解:

1. 中央仓库

2. 搜索 mysql-connector

3. 下载版本

 

4. 正式下载

3.2 导入方式(简单粗暴的方式,适合初学者)

1. 先在项目中创建一个目录,名字随便起,但不能带有中文/特殊字符

2. 把下载好的 jar 包拷贝到 lib 目录中

3. 右键刚才的 lib 目录,add as library(告诉 idea 这个 lib 目录是一个“库”目录)

4. JDBC 使用

1. 创建数据源

还需要给这个对象设置必要的属性:

1) 数据库服务器在哪里

2) 访问服务器的账户

3) 访问服务器的密码

tip:这几部分都是子类具有的, DataSource 本身没有相关的方法和属性

其中的 URL 称为“唯一资源定位符”用来描述一个网络上资源的位置,而数据库也可以理解为一种网络资源

User 和 Password 

上面这些设置只是针对数据源对象进行初始化(“准备工作”),并没有真正和数据库服务器进行任何的网络通信

2. 与数据库服务器建立网络连接

3. 程序构造 sql 语句

方法有很多种,最主流的一种是通过 PreparedStatement(“预编译的语句”) 来构造

正常来说,在 cmd 敲的 sql 是把 sql 发送到 mysql 服务器,mysql 服务器负责解析,解析完成之后执行

解析检查 sql 是否有语法错误,具体要完成什么工作...这种解析工作需要消耗系统资源

由于 mysql 服务器同一时刻可能要同时给多个客户端提供服务,解析工作积少成多,就会更消耗资源

因此往往可以把解析工作放到客户端来完成(自己写的代码),客户端发送 sql 之前先解析好,先把一些能做的工作做好,这样服务器就可以降低一些工作量


tip:编程习惯

类名,一般是名词

方法名,一般是动词/动宾短语

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

5. 释放资源

建立连接/创建语句的时候,就需要消耗一定的 内存/硬盘/网络 等资源

这些资源都是跟随这个连接来走的

如果连接不再使用,就要包这些资源释放掉

整体代码:

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

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

public class TestJDBC {
    public static void main(String[] args) throws SQLException {
        //1. 创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/db_test?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("111111");

//        MysqlDataSource dataSource = new MysqlDataSource();
//        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/db_test?characterEncoding=utf8&useSSL=false");
//        dataSource.setUser("root");
//        dataSource.setPassword("111111");

        //2. 与数据库服务器建立网络连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);

        //3. 构造 sql 语句
        String sql = "insert into student values(1,'张三')";
        PreparedStatement statement = connection.prepareStatement(sql);

        //4. 把 sql 语句发送到服务器上,让服务器执行
        int n = statement.executeUpdate();
        System.out.println(n);

        //5. 释放上述资源
        statement.close();
        connection.close();
    }
}

运行结果:

补充:让用户通过控制台手动插入记录

方法一:拼接字符串

缺点:

1) 代码看起来比较乱,容易写错

2) 可能会引起“sql 注入攻击”(有人输入时,故意输入错误,就可能会使 sql 执行的时候产生一定的“负面影响”

方法二:使用占位符

select 操作

select 操作和上述操作相比,多了一个步骤:遍历结果集合

整体代码:

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

public class TestJDBC {
    public static void main(String[] args) throws SQLException {
        //1.创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/db_test?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("111111");

        //2.建立连接
        Connection connection = dataSource.getConnection();

        //3.构建 sql
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        //4.执行 sql
        ResultSet resultSet = statement.executeQuery();

        //5.遍历结果集合
        while(resultSet.next()) {
            //循环里针对这一行处理
            System.out.println(resultSet.getInt("id"));
            System.out.println(resultSet.getString("name"));
        }

        //6.关系对应的资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

运行结果:

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值