MySQL 之JDBC编程

目录

JDBC的概述

JDBC的配置

安装驱动包

创建项目

JDBC的使用

1.创建并初始化数据源

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

3.构造SQL语句

4.执行SQL语句

5.释放必要的资源

6.优化构造SQL语句

7.JDBC修改操作

8.JDBC删除操作

9.JDBC查询操作


JDBC的概述

JDBC: JDBC(Java DataBase Connectivity Java数据库连接)就是使用java语言操作关系型数据库的一套API.

实际开发中, sql很少是手动去的输入的, 绝大多数的sql都是通过代码自动执行的, 这就需要我们使用其他编程语言来操作数据库服务器.在之前的文章中,我们是通过MySQL客户端访问MySQL服务器的,通过JDBC我们可以在 idea 上访问操作MySQL数据库或者其他任意的数据库,无需再打开数据库客户端

如果我们想要进行数据库开发,在项目中导入对应数据库的驱动包后,即可编写代码

JDBC的配置

安装驱动包

地址:Maven Repository: mysql » mysql-connector-java (mvnrepository.com)

电脑上安装的MySQL数据库是多少版本,就选择相同的版本号,此处我选择 5 版本

第二步,下载

下载完成

创建项目

打开idea新建项目,并创建好 lib 目录,将jar包粘贴进去

右键jar包,将其添加为库   Add as Library

点击确定,此时jar包就可以被idea解析了

JDBC的使用

书写JDBC的固定步骤

1.创建并初始化数据源

创建一个dataSource对象,此处实现了向上转型

DataSource dataSource = new MysqlDataSource();

 为了能够调用方法,需重新向下转型为MysqlDataSource

然后设置 唯一资源定位符,用户名,MySQL密码

        //  1.创建并初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl
                ("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

此时我们数据源创建的操作, 只是去描述了下服务器在那里, 访问哪个数据库, 编码方式是什么, 登陆账号密码是什么等等, 但还没有真正进行连接访问, 下面进行的连接操作, 是真正开始通过网络进行通信.

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

        //  2.和数据库服务器建立连接
        Connection connection = dataSource.getConnection();

创建好数据源DataSource对象后, 调用该对象的getConnection()方法, 获取java.sql.Connection对象, 此时就可以与数据库建立连接了.

3.构造SQL语句

//  3.构造SQL语句
String sql = "insert into jdbc values(1,'王五')";  //  写入SQL语句
      //  预处理sql语句
      //  对SQL语句进行预解析,减少服务器负荷
PreparedStatement statement = connection.prepareStatement(sql);

statement = connection.prepareStatement(sql);

connection 对象通过 prepareStatement(sql) 方法将 SQL 语句包装成 prepareStatement 对象,再用statement 来接收.

4.执行SQL语句

        //  4.执行SQL语句
        int ret = statement.executeUpdate();   //  返回一个int类型,表示受到影响的行数
        System.out.println("ret = " + ret);

如果要执行的sql语句操作是 insert  delete  update  则使用executeUpdate()方法,返回值为受到影响的行数

如果要执行的sql语句是 select  则使用 executeQuery方法执行,返回值是一个ResultSet结果表对象, 其中储存了查询到的的结果, 我们可以通过遍历该结果表来获取查询到的数据.

5.释放必要的资源

        //  5.释放必要的资源
        statement.close();
        connection.close();

释放资源, 我们执行完毕sql语句后需要及时地将资源释放, 在JDBC编程中, 最常见需要释放的类或接口有三个, 分别是Connection,   PreparedStatement,   ResultSet, 要注意的是释放资源的顺序和开启资源的的顺序是相反的, 也就是先开启的要后释放

完整代码及运行结果

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.sql.Statement;

public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        //  JDBC  需要通过以下步骤来完成开发
        //  1.创建并初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl
                ("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        //  2.和数据库服务器建立连接
        Connection connection = dataSource.getConnection();
        //  3.构造SQL语句
        String sql = "insert into jdbc values(1,'王五')";  //  写入SQL语句
            //  预处理sql语句
        PreparedStatement statement = connection.prepareStatement(sql);  //  对SQL语句进行预解析,减少服务器负荷
        //  4.执行SQL语句
        int ret = statement.executeUpdate();   //  返回一个int类型,表示受到影响的行数
        System.out.println("ret = " + ret);
        //  5.释放必要的资源
        statement.close();
        connection.close();
    }
}

6.优化构造SQL语句

在第四点构造SQL语句中,我们是把SQL语句写死的,

在实际情况中我们是需要让用户自己输入的,是不确定具体哪些值的,因此需要进行优化

读取用户键盘输入的信息:

我们可以将SQL语句中的值都替换为  ,  ?  是占位符    如下

然后再通过statement里的各自 setXXXX方法  来逐个设置占位符的内容

参数1表示第几个占位符,参数2表示设置的内容

最后也可打印出SQL语句查看是否正确

最终结果:

完整代码:

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.sql.Statement;
import java.util.Scanner;

public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        //  JDBC  需要通过以下步骤来完成开发
        //  1.创建并初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl
                ("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        //  2.和数据库服务器建立连接
        Connection connection = dataSource.getConnection();
        //  3.构造SQL语句
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入id: ");
        int id = scanner.nextInt();
        System.out.println("请输入名字: ");
        String name = scanner.next();

        String sql = "insert into jdbc values(?,?)";  //  写入SQL语句
            //  预处理sql语句
        PreparedStatement statement = connection.prepareStatement(sql);  //  对SQL语句进行预解析,减少服务器负荷
        statement.setInt(1,id);
        statement.setString(2,name);
        System.out.println("sql: " + statement);
        //  4.执行SQL语句
        int ret = statement.executeUpdate();   //  返回一个int类型,表示受到影响的行数
        System.out.println("ret = " + ret);
        //  5.释放必要的资源
        statement.close();
        connection.close();
    }
}

7.JDBC修改操作

修改数据只需要修改SQL语句即可,整体代码与插入操作一致

如图:  为id = 2 的同学改名

8.JDBC删除操作

删除数据同样只需要修改SQL语句即可,整体代码与插入操作一致

删除 id = 2 的同学的数据

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.sql.Statement;
import java.util.Scanner;

public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        //  JDBC  需要通过以下步骤来完成开发
        //  1.创建并初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl
                ("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        //  2.和数据库服务器建立连接
        Connection connection = dataSource.getConnection();
        //  3.构造SQL语句
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入id: ");
        int id = scanner.nextInt();
        System.out.println("请输入名字: ");
        String name = scanner.next();

        String sql = "delete from jdbc where id = ?";  //  写入SQL语句
            //  预处理sql语句
        PreparedStatement statement = connection.prepareStatement(sql);  //  对SQL语句进行预解析,减少服务器负荷
        statement.setInt(1,id);
        //statement.setString(1,name);
        System.out.println("sql: " + statement);
        //  4.执行SQL语句
        int ret = statement.executeUpdate();   //  返回一个int类型,表示受到影响的行数
        System.out.println("ret = " + ret);
        //  5.释放必要的资源
        statement.close();
        connection.close();
    }
}

9.JDBC查询操作

其余步骤一致,区别在于第四个步骤

在增,删,改操作中,我们使用的是 statement.executeUpdate() 方法

而在查询操作中,我们使用的是 statement.executeQuery() 方法,返回的是一个 ResultSet 对象,我们可以把它想象成一个表格,因此我们要实例化一个 resultSet 来接收它

同时这个表格里会有一个光标,停留在表格第一行数据的上一行,当我们使用next()方法后,光标就会指向下一行数据(第一行数据),存在内容,就开始读取,直到下一行为null,因此通过while循环来实现

然后再通过resultSet.getXXXX()方法获取每一行中的每一列的数据,参数就是数据库表的列名

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 JDBCSelect {
    public static void main(String[] args) throws SQLException {
        //1.创建并初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl
                ("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        //2.与数据库服务器建立连接
        Connection connection = dataSource.getConnection();
        //3.构造SQL语句
        String sql = "select * from jdbc";
        PreparedStatement statement = connection.prepareStatement(sql);
        //4.获取查询结果
        ResultSet resultSet = statement.executeQuery();
        while (resultSet.next()){
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = " + id + " name = " + name);
        }
        //5.释放资源
        resultSet.close();
        connection.close();
        statement.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值