JDBC编程

JDBC编程

  • 1.程序是怎么操作数据库的?
  • 2.什么是JDBC?
    • 2.1JDBC定义
    • 2.2JDBC工作原理
  • 3.JDBC使用
    • 3.1创建项目并添加MySQL驱动
    • 3.2使用代码操作数据库
      • 3.2.1获取数据源
      • 3.2.2获得连接
      • 3.2.3获得执行器
      • 3.2.4执行SQL
      • 3.2.5关闭资源
    • 3.3使用DriverManager实现查询
  • 4.添加实现
  • 5.修改实现
  • 6.删除实现
  • 7.查询实现

1.程序是怎么操作数据库的?

1.使用程序之所以能操作数据库,主要是因为数据厂商提供了操作的API,也就是数据库驱动,驱使数据库行动起来,就是数据库驱动,不光是程序,向我们之所以能通过命令行操作MySQL,也
是因为MySQL的数据库驱动,对于操作界面而言,数据库驱动就是:
JDBC编程_第1张图片
输入的命令就是MySQL数据驱动的一部分,数据库驱动包含了数据库操作API,它们的关系如下:
JDBC编程_第2张图片

2.什么是JDBC?

1.不同数据库厂商提供数据库驱动不一样,提供了不同的API接口,那么java程序要怎么实现,针对一个数据库写一套调用方法太麻烦,解决上面问题的办法就是使用JDBC.
JDBC编程_第3张图片

2.1JDBC定义

1.JDBC即java DataBase Connectivity,java数据库连接,是一种用于执行SQL语句的javaAPI,它是java中的数据库连接规范。目的是用这套规范(JDBC)实现不同数据库之间的统一访问。

2.2JDBC工作原理

1.jdbc为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。
jdbc访问数据库层次结构:
JDBC编程_第4张图片
2.JDBC优势
(1)java语言访问数据库操作完全面向抽象接口编程。
(2)开发数据库应用不用限定在特定数据库厂商的API。
(3)程序的可移植性大大增加。

3.JDBC使用

3.1创建项目并添加MySQL驱动

1.创建一个java项目(创建项目的目录里面一定不要包含中文路径,不然后面会有问题),并添加MySQL驱动(mysql-connector-java-5.1.47.jar),需要注意不同的数据库版本要对应相应的驱动包。

JDBC编程_第5张图片
JDBC编程_第6张图片
JDBC编程_第7张图片
JDBC编程_第8张图片

3.2使用代码操作数据库

1.操作数据库MySQL提供了两种操作API:
(1)DriverManager
(2)DataSource(推荐使用)
2.使用DataSource来实现操作数据库,使用代码操作数据分为五个步骤:
(1)获取数据源(准备工作,点击MySQL连接工具,并输入用户名、密码)
(2)获取连接(敲击回车试图建立客户端和服务端的连接)
(3)获取执行器(连接到服务器并切换到数据库)
(4)查询或操作数据库(输入命令并得到结果)
(5)关闭连接(关闭客户端)

3.2.1获取数据源

1.数据源是MysqlDataSource,获取方式如下,需要输入数据连接的MySQL服务器地址、用户名和密码:
JDBC编程_第9张图片

//1.创建数据源
MysqlDataSource dataSource=new MysqlDataSource();
//1.1设置连接的MySQL服务器
dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true");
//1.2设置用户名
dataSource.setUser("root");
//1.3设置密码
dataSource.setPassword("123456");

3.2.2获得连接

连接对象是connection,注意此步骤容易出错,一定是com.mysql.jdbc包下的Connection对象:
JDBC编程_第10张图片

3.2.3获得执行器

1.执行器是用来执行SQL命令的,执行器有三种:
(1)Statement:
用于执行不带参数的简单SQL语句。
(2)PreparedStatement:
用于执行带或者不带参数的SQL语句。
SQL语句会编译在数据库系统。
执行速度快与Statement.
(3)CallableStatement:
用于执行数据库存储过程的调用。
2.实际开发中最常用的PreparedStatement对象,它的优点有:
(1)参数化SQL查询
(2)性能比Statement高
(3)SQL预编译
(4)阻止常见SQL注入攻击
(5)占位符:? 下标从1开始
(6)占位符不能使用多值。
3.具体实现:
在这里插入图片描述

// 1.创建数据源
MysqlDataSource dataSource = new MysqlDataSource();
// 1.1 设置连接的 MySQL 服务器
dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?
characterEncoding=utf8&useSSL=true");
// 1.2 设置⽤户名
dataSource.setUser("root");
// 1.3 设置密码
dataSource.setPassword("12345678");
// 2.创建连接
Connection connection = (Connection) dataSource.getConnection();
//3.获得执行器
PreparedStatement statement=connection.prepareStatement("select * from student where username=?");
//3.1占位符赋值
statement.setString(1,"王五");

JDBC编程_第11张图片

4.PreparedStatement有两种重要的方法:
(1)executeQuery():方法执行后返回单个结果集,通常用于select语句。
(2)executeUpdate():方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete语句。

3.2.4执行SQL

int result=statement.executeUpdate();//返回受影响的行数
System.out.println("受影响的行数:"+result);

3.2.5关闭资源

关闭数据库连接时为了不浪费MySQL服务器端的资源。

//5.关闭资源(从小到大)
statement.close();//关闭执行器
connection.clase();//关闭连接

JDBC编程_第12张图片

3.3使用DriverManager实现查询

1.使⽤ DriverManager 只是获取 Connection 之前的两步代码不⼀样:

// 1.加载JDBC驱动程序:反射,这样调⽤初始化com.mysql.jdbc.Driver类,即将该类加载到
JVM⽅法区,并执⾏该类的静态⽅法块、静态属性。
Class.forName("com.mysql.jdbc.Driver");
// 2.创建数据库连接
Connection connection =
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java33?
user=root&password=12345678&characterEncoding=UTF-8&useSSL=true");

4.添加实现

1.代码:

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class AddCity {
    public static void main(String[] args) throws SQLException {
        //1.获得数据源 DataSource(设置mysql的服务器地址)
        MysqlDataSource dataSource=new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true");//设置mysql服务器地址
        dataSource.setUser("root");// 设置连接mysql的用户名
        dataSource.setPassword("123456");//设置mysql的密码
        //2.获得连接Connection
        Connection  connection=(Connection) dataSource.getConnection();
        //3.得到执行器,组装SQL(
        String insertSQL="insert into city(id,name) values(?,?)";//组装SQL,使用占位符?
        PreparedStatement statement=connection.prepareStatement(insertSQL);
        //填充占位符
        statement.setInt(1,4);
        statement.setString(2,"深圳");
        //4.执行SQL
        int result=statement.executeUpdate();//返回一个受影响的行数
        System.out.println("受影响的行数:"+result);
        //5.关闭资源
        statement.close();//关闭执行器
        connection.close();//关闭连接
    }
}

2.运行结果:
(1)
JDBC编程_第13张图片
(2)数据库:
JDBC编程_第14张图片

5.修改实现

1.代码:

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class UpCity {
    public static void main(String[] args) throws SQLException {
        //1.获得数据源
        MysqlDataSource dataSource=new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true");
        dataSource.setUser("root");
        dataSource.setPassword("123456");
        //2.获得连接
        Connection connection= (Connection) dataSource.getConnection();

        //3.获得执行器,组装SQL
        String updateSql="update city set name=? where id=?";
        PreparedStatement statement=connection.prepareStatement(updateSql);
        statement.setString(1,"长沙");
        statement.setInt(2,3);
        //4.执行SQL
        int result=statement.executeUpdate();
        System.out.println("受影响的行数:"+result);
        //5.关闭资源
        statement.close();
        connection.close();;
    }
}

2.实现结果:
(1)
JDBC编程_第15张图片
(2)
JDBC编程_第16张图片

6.删除实现

1.代码:

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DelCity {
    public static void main(String[] args) throws SQLException {
        //1.获得数据源
        MysqlDataSource dataSource=new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true");
        dataSource.setUser("root");
        dataSource.setPassword("123456");
        //2.获得连接
        Connection connection= (Connection) dataSource.getConnection();
        //3.获得执行器,组装SQL
        String delSql="delete from city where id=?";
        PreparedStatement statement=connection.prepareStatement(delSql);
        statement.setInt(1,2);
        //4.执行SQL
        int result=statement.executeUpdate();
        System.out.println("受影响的行数为:"+result);
        //5.关闭资源
        statement.close();
        connection.close();

    }
}

2.实现结果:
(1)
JDBC编程_第17张图片
(2)
JDBC编程_第18张图片

7.查询实现

1.代码:
SelCity.java:

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class SelCity {
    public static void main(String[] args) throws SQLException {
        //1.获得数据源
        MysqlDataSource dataSource=new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true");
        dataSource.setUser("root");
        dataSource.setPassword("123456");
        //2.得到连接Connection
        Connection connection= (Connection) dataSource.getConnection();
        //3.获得执行器
        String sql="select * from city where id ;
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setInt(1,10);
        //4.执行SQL,打印查询结果
        ResultSet resultSet=statement.executeQuery();//得到结果集
        while(resultSet.next()){
            City city=new City();
            city.setId(resultSet.getInt("id"));//查询当前行中列名为id的值
            city.setName(resultSet.getString("name"));
            //打印city对象
            System.out.println(city);
        }
        //5.关闭资源
        resultSet.close();
        statement.close();
        connection.close();

    }
}

City.java:

public class City {
    private int  id;
    private String name;
    
    public int getId() {
        return id;
    }

    @Override
    public String toString() {
        return "City{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public void setId(int id) {
        
        this.id = id;
    }

    public void setName(String name) {
        
        this.name = name;
    }

    public String getName() {
        
        return name;
    }
}

2.运行结果:
(1)
JDBC编程_第19张图片
(2)
JDBC编程_第20张图片

你可能感兴趣的:(数据库,数据库,mysql,java)