Java-web_Jdbc

Jdbc

1.概念

Java DataBase Connectivity Java 数据库连接, Java语言操作数据库

JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
在这里插入图片描述
有关的类都在java.sql和javax.sql(扩展包)下

在这里插入图片描述

2.快速入门

2.1步骤

	1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
		1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
		2.右键-->Add As Library
	2. 注册驱动
	3. 获取数据库连接对象 Connection
	4. 定义sql
	5. 获取执行sql语句的对象 Statement
	6. 执行sql,接受返回结果
	7. 处理结果
	8. 释放资源

2.2 代码实现

在这里插入图片描述

	  	//1. 导入驱动jar包
        //2.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //3.获取数据库连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
        //4.定义sql语句
        String sql = "update account set balance = 500 where id = 1";
        //5.获取执行sql的对象 Statement
        Statement stmt = conn.createStatement();
        //6.执行sql
        int count = stmt.executeUpdate(sql);
        //7.处理结果
        System.out.println(count);
        //8.释放资源
        stmt.close();
        conn.close();

3. 详解各个对象

3.1 使用 JDBC 开发使用到的包

会使用到的包 说明
java.sql 所有与 JDBC 访问数据库相关的接口和类
javax.sql 数据库扩展包,提供数据库额外的功能。如:连接池
数据库的驱动 由各大数据库厂商提供,需要额外去下载,是对 JDBC 接口实现的类

3.2 JDBC 的核心 API

接口或类 作用
DriverManager 类 1) 管理和注册数据库驱动
2) 得到数据库连接对象
Connection 接口 一个连接对象,可用于创建 Statement 和 PreparedStatement 对象
Statement 接口 一个 SQL 语句对象,用于将 SQL 语句发送给数据库服务器。
PreparedStatemen 接口 一个 SQL 语句对象,是 Statement 的子接口
ResultSet 接口 用于封装数据库查询的结果集,返回给客户端 Java 程序

4.导入驱动jar包

在这里插入图片描述

在这里插入图片描述

4. 加载和注册驱动

在这里插入图片描述

public class Demo1 {
 public static void main(String[] args) throws ClassNotFoundException {
4 / 21 
 //抛出类找不到的异常,注册数据库驱动
 Class.forName("com.mysql.jdbc.Driver");
 } } 

com.mysql.jdbc.Driver 源代码:
// Driver 接口,所有数据库厂商必须实现的接口,表示这是一个驱动类。

public class Driver implements java.sql.Driver {
 public Driver() throws SQLException {
 }
 static {
 try {
 DriverManager.registerDriver(new Driver()); //注册数据库驱动
 } catch (SQLException var1) {
 throw new RuntimeException("Can't register driver!");
 }
 }
 }

5.DriverManage

5.1DriverManage作用

  1. 管理和注册驱动
  2. 创建数据库的连接

5.2类中的方法

在这里插入图片描述

5.3 使用 JDBC 连接数据库的四个参数

在这里插入图片描述

5.4 连接数据库的 URL 地址格式

5.4.1 MySQL 写法

在这里插入图片描述

5.4.2 MySQL 中可以简写

jdbc:mysql:///database

省略localhost和端口号

5.4.3 乱码问题

可以指定参数:characterEncording=utf8

jdbc:mysql:///数据库?characterEncording=utf8

5.5 插入实例

public class jdbc_Demo01 {
    public static void main(String[] args) throws Exception {
        //1.导入jar包
        //注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //mysql5之后的不需要注册驱动jar包
        //获取数据库的链接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1","root","root");
        //定义sql语句
        String sql = "update user1 set age = 13 where name = \"zhangsan\"";
        Statement stmt = conn.createStatement();
        int count = stmt.executeUpdate(sql);
        System.out.println(count);
        stmt.close();
        conn.close();


    }
}

插入一条数据
结果返回1则插入成功一条数据,如果返回的为0的话则插入不成功
count返回的是插入成功的数目

6. Connection接口

6.1 Connection接口作用

具体的实现类由数据库的厂商实现,代表一个连接对象

6.2 Connection方法

在这里插入图片描述

7. Statement接口

7.1 Jdbc访问数据库的步骤

在这里插入图片描述

在这里插入图片描述

7.2 Statement作用

代表了一条语句对象,用于发送SQL语句给服务器,用于执行静态SQL语句并返回它所生成结果的对象。

7.3 Statement方法

在这里插入图片描述

7.4 释放资源

1.ResultSet结果集,Statement语句,Connection连接
2.先开后关的原则
3.放在finally中释放
4.判断有无再释放

7.5 执行DML操作

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class jdbc_Demo02 {
    public static void main(String[] args) {
        Statement stmt = null;
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String sql = "insert into user1 values(\"lisi\",11)";
            conn = DriverManager.getConnection("jdbc:mysql:///db1","root","root");
            stmt = conn.createStatement();
            int count = stmt.executeUpdate(sql);
            if(count > 0){
                System.out.println("添加成功");
            }else {
                System.out.println("添加失败");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

结果
添加成功

在这里插入图片描述

7.6 执行DQL操作

import java.sql.*;

public class jdbc_Demo3 {
    public static void main(String[] args) {
        Statement stmt = null;
        Connection conn = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String sql = "select * from user1";
            conn = DriverManager.getConnection("jdbc:mysql:///db1","root","root");
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);
            rs.next();
            String name = rs.getString("name");
            int age = rs.getInt(2);
            System.out.println(name + "--------" + age);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

结果
zhangsan--------13

改版的DQL:可以取出全部的数据
主要还是判断next()是否为空通过while判断

import java.sql.*;

public class jdbc_Demo04 {
    public static void main(String[] args) {

            Statement stmt = null;
            Connection conn = null;
            ResultSet rs = null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                String sql = "select * from user1";
                conn = DriverManager.getConnection("jdbc:mysql:///db1","root","root");
                stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);
                while(rs.next()) {
                    String name = rs.getString("name");
                    int age = rs.getInt(2);
                    System.out.println(name + "--------" + age);
                }

            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                if(rs != null){
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if(stmt != null){
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if(conn != null){
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
发布了193 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43141726/article/details/104622700