javaweb第九天 JDBC

文章目录

  • 一,JDBC简介
  • 二,JDBC操作
  • 三,statement 和 Preparedstatement的区别
  • 四,练习

一,JDBC简介

一,JDBC的概念
JDBC:java database connectivity java数据库连接。(通过java对数据库进行操作)
JDBC的本质:其实就是提供了一些方法与接口(规范),实现是由数据库的厂商来实现 (驱动包)

如下图所示:
javaweb第九天 JDBC_第1张图片

二,JDBC操作

一,JDBC连接数据库的步骤
1.导入jar包
2.通过反射来加载驱动
3.得到连接对象 connection
4.得到发送sql 对象(交通工具)
5.得到返回的结果
6.关闭资源 从下往上进行关闭
注意点:所有的jar包都是导入的是 java.sql.*

二,JDBC的详细解释
1, Class.forName(“com.mysql.jdbc.Driver”); 通过反射来加载驱动 Driver =>驱动类

2,DriverManager 驱动管理对象来获取连接对象

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/user?characterEncoding=utf-8", "root", "root");

url : 表示连接数据库的地址 jdbc:mysql://localhost:3306/数据库的库名?characterEncoding=utf-8 || jdbc:mysql:///day03_db 只支持本地连接
jdbc : 表示主的协议=>也就是使用jdbc来连接数据库
mysql : 表示子协议=>也及时使用mysql数据库
localhost: : 表示本机的ip地址
3306 : 表示mysql数据库的端口号,端口号后是数据库的库ming
? : 后 都是表示设置的参数 characterEncoding=utf-8 ==>设置其编码格式
username :表示数据库的用户名
password :表示数据库 密码

3,conn.createStatement(); ==>表示通过连接对象来获取执行sql 的对象Statement(交通工具)

4,sta.executeQuery(sql) 发送sql语句,数据库返回一个结果集 ResultSet

5,关闭资源(从下往上关闭)

6,?表示占位符号

三,JDBC操作中出现的常见错误
1,nknown database ‘us’ :数据库不存在

2,Access denied for user ‘root’@‘localhost’ (using password: YES) :用户名与密码不正确

3,You have an error in your SQL syntax :sql 异常

四,unit 测试
主要是用于测试 使用的步骤
1.导包 添加依赖
2.编写一个测试方法(不是main) 注意点:1.需要使用public void 2.这个方法没有返回值 3.这个方法没有参数
3.在方法加注解 @Test
4.直接运行 绿色表示没有错误 红色表示产生了错误

五,jdbcUtils工具类的封装
1.加载驱动(只需要加载一次,写在静态代码块)
2.获取连接对象写成一个方法 (三个参数写成常量)
3.增删改
4.查询
5.关闭资源

三,statement 和 Preparedstatement的区别

一,区别
Statement 产生的问题:1.sql注入,不安全,每次直接拼
PreparedStatement
①,他是 Statement 对象的一个子类
②,可以防止sql注入,保证sql语句的安全
③,预编译检验sql是否正确 =>效率高 =>替换Statement
④,避免sql语句的拼写

四,练习

javaweb第九天 JDBC_第2张图片
封装数据库基类 BaseDao
用jdbc 增加一个宠物
根据 id修改宠物信息
删除 id为2的宠物
分页查询前五条信息
使用模糊查询 宠物名字为花的宠物

工具类代码:

package com.offic.day09homework;

import javax.xml.transform.Result;
import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class JDBCBase {
     
    //定义常量
    final static String DRIVER = "com.mysql.jdbc.Driver";
    final static String URL = "jdbc:mysql://localhost:3306/user?characterEncoding=utf-8";
    final static String UID = "root";
    final static String UPWD = "root";

    static {
     
        try {
     
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
     
            e.printStackTrace();
        }
    }

    //定义创建Connection对象的方法
    public static Connection getCon() {
     
        try {
     
            Connection conn = DriverManager.getConnection(URL, UID, UPWD);
            return conn;
        } catch (SQLException e) {
     
            e.printStackTrace();
        }
        return null;
    }

    //定义增删改的方法
    public static int change(String sql, Object[] obj) {
     
        Connection conn = null;
        PreparedStatement ps = null;
        int num = -1;
        try {
     
            conn = getCon();
            ps = conn.prepareStatement(sql);
            if (obj != null && obj.length > 0) {
     
                for (int i = 0; i < obj.length; i++) {
     
                    ps.setObject(i + 1, obj[i]);
                }
            }
            num = ps.executeUpdate();
        } catch (SQLException e) {
     
            e.printStackTrace();
        }finally {
     
            close(null, ps, conn);
        }
        return num;
    }

    //定义查询的方法
    public static List<Pet> search(String sql, Object[] obj) {
     
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        List<Pet> list = new ArrayList<>();
        try {
     
            conn = getCon();
            ps = conn.prepareStatement(sql);
            if (obj != null && obj.length > 0) {
     
                for (int i = 0; i < obj.length; i++) {
     
                    ps.setObject(i + 1, obj[i]);
                }
            }
            rs = ps.executeQuery();
            while (rs.next()) {
     
                Pet p = new Pet();
                p.setHealth(rs.getInt("Health"));
                p.setId(rs.getInt("Id"));
                p.setLove(rs.getInt("Love"));
                p.setName(rs.getString("Name"));
                p.setStrain(rs.getString("Strain"));
                list.add(p);
            }
        } catch (SQLException e) {
     
            e.printStackTrace();
        } finally {
     
            close(rs, ps, conn);
        }
        return list;
    }

    //定义关闭流的方法
    public static void close(ResultSet rs, PreparedStatement ps, Connection conn) {
     
        try {
     
            if (rs != null) {
     
                rs.close();
            }
            if (ps != null) {
     
                ps.close();
            }
            if (conn != null) {
     
                conn.close();
            }
        } catch (SQLException e) {
     
            e.printStackTrace();
        }
    }
}

测试类代码:

package com.offic.day09homework;

import org.junit.Test;
import java.sql.Connection;
import java.util.List;

public class test {
     
    public static void main(String[] args) {
     
//        用jdbc 增加一个宠物
        String sql = "insert into pet(name,health,love,strain)values(?,?,?,?)";
        Object[] obj = {
     "小白",90,90,"泰迪"};
        int num = JDBCBase.change(sql,obj);
        if (num > 0){
     
            System.out.println("添加成功");
        }else{
     
            System.out.println("添加失败");
        }

    }

    @Test
    public void bb() {
     
        //        根据 id修改宠物信息
        String sql = "update pet set name=?,health=?,love=?,strain=? where id=?";
        Object[] obj = {
     "小黑", 95, 95, "中华田园犬",3};
        int num = JDBCBase.change(sql, obj);
        if (num > 0) {
     
            System.out.println("修改成功");
        } else {
     
            System.out.println("修改失败");
        }
    }
    @Test
    public void cc() {
     
        //        删除 id为2的宠物
        String sql = "delete from pet where id=?";
        Object[] obj = {
     2};
        int num = JDBCBase.change(sql, obj);
        if (num > 0) {
     
            System.out.println("删除成功");
        } else {
     
            System.out.println("删除失败");
        }
    }

    @Test
    public  void dd() {
     
        //        分页查询前五条信息
        String sql = "select * from pet limit ?,?";
        Object[] obj = {
     0,5};
        List<Pet> list = JDBCBase.search(sql, obj);
        for(Pet p : list){
     
            System.out.print(p.getHealth());
            System.out.print(p.getId());
            System.out.print(p.getLove());
            System.out.print(p.getName());
            System.out.print(p.getStrain());
            System.out.println();
        }
    }

    @Test
    public  void ee(){
     
        //       使用模糊查询 宠物名字为花的宠物
        String sql = "select * from pet where name like ?";
        Object[] obj = {
     "%花%"};
        List<Pet> list = JDBCBase.search(sql, obj);
        for(Pet p : list){
     
            System.out.print(p.getHealth());
            System.out.print(p.getId());
            System.out.print(p.getLove());
            System.out.print(p.getName());
            System.out.print(p.getStrain());
            System.out.println();
        }
    }
}

Pet类代码:

package com.offic.day09homework;

import java.io.Serializable;

public class Pet implements Serializable {
     
    private int id;
    private String name;
    private int health;
    private int love;
    private String strain;

    public int getId() {
     
        return id;
    }

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

    public String getName() {
     
        return name;
    }

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

    public int getHealth() {
     
        return health;
    }

    public void setHealth(int health) {
     
        this.health = health;
    }

    public int getLove() {
     
        return love;
    }

    public void setLove(int love) {
     
        this.love = love;
    }

    public String getStrain() {
     
        return strain;
    }

    public void setStrain(String strain) {
     
        this.strain = strain;
    }
}

你可能感兴趣的:(javaweb,java,jdbc)