MySQL--JDBC编程

目录

1.JDBC概念

2.驱动包

2.1 下载驱动包

2.2 将jar包导入项目

3.JDBC的使用步骤

3.1 创建DataSource

3.2 建立数据库与服务器之间的连接

3.3 构造sql

3.4 执行sql

3.4.1 写操作的sql执行方式

3.4.2 读操作的sql执行方式

3.5 释放资源,关闭连接

4.结果示例

4.1 写操作示例

4.2 读操作示例


1.JDBC概念

JDBC是通过Java代码操作MySQL数据库,数据库编程是需要服务器提供API接口(Application Programming Interface)给程序员进行调用的。

Oracle、MySQL、SQL Server……提供的API各有不同,这样的话学习成本就会很高,苦了程序员,此时Java就出来统一规范了,Java提供了一套数据库API的规范接口,让程序员只要学习Java的API接口就可以调用多种数据库的API接口。Java这套API接口就称为JDBC。

2.驱动包

2.1 下载驱动包

要想在程序中操作MySQL就需要先安装驱动程序(驱动包),并将驱动包引入到项目里。

安装第三方程序包,可以有以下途径:

  • 官网
  • GitHub
  • 中央仓库

官网下载可能会比较麻烦,推荐使用中央仓库进行下载。

中央仓库网址:mvnrepository.com

此处有两个版本,新版本的数据库驱动包第一个里,旧版本的数据库驱动包在第二个里。

我们以MySQL5.7为例,选择的是第二个。进入之后选择5.版本,MySQL是哪个版本就要用哪个版本的驱动包。

此处我们选择5.1.49版本的驱动包。进入之后按jar进行下载。jar包是Java中常见的后缀类型,Java写的程序,有很多的类,一个类又对应一个.class文件,如果要将程序发布给别人,就要把这些.class文件打包成一个.jar包,然后把jar包发给别人。

2.2 将jar包导入项目

如何将jar包导入到项目中呢?分成两步:

1、先把jar复制到项目目录中。

创建一个新目录,目录名可以随便填,一般填lib,因为一般引入的第三方包都会起lib这个名字。

将下载好的jar包复制,然后选中lib目录,直接ctrl v就可以导入了。

2、把该目录标记成库。

此时就成功将jar包导入,就可以使用jar包进行操作代码了。

3.JDBC的使用步骤

先创建一个表,准备对该表进行操作。

3.1 创建DataSource

在Java中创建一个DataSource类“数据源头”,表示数据库服务器所在的位置。

此处的javax.sql就是JDBC对应的包。

第一种方式是先向上转型,再向下转型。这样做的意义是为了这个类名不要扩散到代码的其他地方,后续如果要修改数据库为别的数据库,代码改动比较小,这样就会使MySQL和程序之间的耦合度降低。

第二种方式没有第一种方式的优点,只是代码更简洁。

setUrl();方法中的url是计算机中很重要的概念,表示网络上的位置,通俗来说就是网址。

DataSource光设置url还不够,只是能找到MySQL服务器,还要输入数据库的用户名和密码。这样才能访问到数据库。

root表示“管理员”,MySQL默认的自带用户。密码是数据库密码。

3.2 建立数据库与服务器之间的连接

建立连接是为了给后续的“请求--相应”交互的进行做铺垫。

调用dataSource中的getConnection方法,connection表示“连接”的意思。

此处会抛出一个异常,直接alt+shift+enter将异常加到方法签名上就行了,后面如果执行sql或数据库操作有问题,一般都会出现这个异常。

这个方法的返回值是Connection,此处会出现很多个Connection,要选择下面这个

3.3 构造sql

3.4 执行sql

3.4.1 写操作的sql执行方式

返回值是整数,表示影响到的行数。

3.4.2 读操作的sql执行方式

此时statement.executeQuery()的返回值是ResultSet类型的,这种类型表示的是一张临时表,此时就需要将表遍历打印显示出来。

这张表的遍历时从有效数据的上一个位置开始的,经过next得到有效数据就可以对每一行进行操作了。直到指向空行。

3.5 释放资源,关闭连接

释放顺序是后申请的资源先释放。

4.结果示例及代码

4.1 写操作示例

修改和删除均与下列示例操作相似,此处以插入为例。

示例1:直接在代码中填入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;

public class Main {
    public static void main(String[] args) throws SQLException {
        //1、创建DataSource
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
//        MysqlDataSource dataSource1 = new MysqlDataSource();
//        dataSource1.setUrl();
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("0000");

        //2、建立数据库与服务器之间的连接
        Connection connection = dataSource.getConnection();

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

        //4、把sql语句发给服务器
        int n =  statement.executeUpdate();
        System.out.println("n = " + n);

        //5、释放资源,关闭连接
        statement.close();
        connection.close();
    }
}

控制台:

MySQL:

示例2:可供用户自行输入id和name,对表进行插入

代码:

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 Main {
    public static void main(String[] args) throws SQLException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学号:");
        int id = sc.nextInt();
        System.out.println("请输入姓名:");
        String name = sc.next();

        //1、创建DataSource
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
//        MysqlDataSource dataSource1 = new MysqlDataSource();
//        dataSource1.setUrl();
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("0000");

        //2、建立数据库与服务器之间的连接
        Connection connection = dataSource.getConnection();

        //3、构造sql
        String sql = "insert into student values("+ id +",'"+ name +"')";
        PreparedStatement statement = connection.prepareStatement(sql);

        //4、把sql语句发给服务器
        int n =  statement.executeUpdate();
        System.out.println("n = " + n);

        //5、释放资源,关闭连接
        statement.close();
        connection.close();
    }
}

控制台:

MySQL:

但是这样的方式不安全,可能会被注入恶意代码遭到攻击。

PreparedStatement提供了另一种方式

示例3:示例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 Main {
    public static void main(String[] args) throws SQLException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学号:");
        int id = sc.nextInt();
        System.out.println("请输入姓名:");
        String name = sc.next();

        //1、创建DataSource
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
//        MysqlDataSource dataSource1 = new MysqlDataSource();
//        dataSource1.setUrl();
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("0000");

        //2、建立数据库与服务器之间的连接
        Connection connection = dataSource.getConnection();

        //3、构造sql
        String sql = "insert into student values(?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        statement.setString(2, name);

        //4、把sql语句发给服务器
        int n =  statement.executeUpdate();
        System.out.println("n = " + n);

        //5、释放资源,关闭连接
        statement.close();
        connection.close();
    }
}

控制台:

MySQL:

4.2 读操作示例

示例1:全列查询

代码:

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

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

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

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

        //3、构造sql
        String sql = "select * from student";
        Statement statement = connection.createStatement();

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

        //5、遍历表
        while(resultSet.next()){
            //针对该行进行操作
            //取出每列的数据
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id:" + id + " name:" + name);
        }

        //6、关闭连接
        statement.close();
        resultSet.close();
    }
}

控制台:

数据库:

JDBC因为操作太繁琐了,所以一般在工作中不会直接使用,有大佬将JDBC的API进一步封装成数据库操作的框架,比如MyBatis、JPA……这些框架也被称为ORM框架,把数据库的表映射到对象,削弱了上述流程的繁琐性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值