JDBC篇

目录

一、JDBC的本质

二、 JDBC 原生操作步骤

 三、jdbc工具类及属性列表

1、 提供jdbc.properties  -- 属性列表

2、 封装jdbc操作工具类

四、DDL、DML、DQL语句

 五、如何使用反射调用方法

六、将student表全部查询出来,将每一条学生的数据封装到Student实体类中, 然后多条学生信息,封装到List,将集合进行遍历!

实现步骤

1、创建学生类

2、针对学生数据库创建访问接口

三、数据访问实现层

四、测试类


一、JDBC的本质

jdbc的本质是能够实现sun公司提供的java.sql包下相关的接口实现类,数据库厂商提供一驱动jar包

二、 JDBC 原生操作步骤

1)在java项目下添加额外第三方jar包

        idea中 file----> project structure (ctrl+Alt+shift+s:默认快捷键_) ---model---->denpendies---->添加---jar包 ---将指定路径拿过来

2)注册驱动

        Class.forName("com.mysql.cj.jdbc.Driver");

3)获取数据库连接对象

        Connection connection = DriverManger.getConnection("jdbc:mysql://localhost:3306/mydb_01?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true", "root",

"123456"

)

4)准备sql语句

        String sql = " ....";

5)通过数据库连接对象创建执行对象Statement

        Statement stem = connection.creatStatement();

6)执行更新操作

        int count = stem.executeUpdate(sql);/ResultSet  rs = stem.executeQuery(sql);

7)释放资源

        stem.close();

        connection.close();

 三、jdbc工具类及属性列表

1、 提供jdbc.properties  -- 属性列表

url=jdbc:mysql://localhost:3306/day_35?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
driverClass=com.mysql.cj.jdbc.Driver
user=root
password=root

2、 封装jdbc操作工具类

package com.qf.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/***
 * jdbc.properties  -- 属性列表
 *
 * url=jdbc:mysql://localhost:3306/day_35?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
 * driverClass=com.mysql.cj.jdbc.Driver
 * user=root
 * password=root
 */

public class jdbcUtils {

    private static String url = null;
    private static String driverClass = null;
    private static String user = null;
    private static String password = null;
    //构造方法私有
    private jdbcUtils(){}
    //添加静态代码块
    static {
        try {
        //创造属性列表
        Properties prop = new Properties();
        //添加到流中,
        InputStream inputStream = jdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
            //将流中的内容添加属性列表中
            prop.load(inputStream);
            System.out.println(prop);
            //通过key获取value
            url = prop.getProperty("url");
            driverClass = prop.getProperty("driverClass");
            user = prop.getProperty("user");
            password = prop.getProperty("password");
            //注册驱动
            Class.forName(driverClass);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
    //获取数据库连接对象
    public static Connection getconnertion(){
        Connection con = null;
        try {
            con = DriverManager.getConnection(url, user, password);
            return con;
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            return null;
        }
    }

    //关闭资源
    //DQL语句---->ResultSet对象,Statement对象和Connection
    public static void close(ResultSet rs, Statement stem ,Connection con){
        try {
            if (rs!=null){
                rs.close();
            }
            if (stem!=null){
                stem.close();
            }
            if (con!=null){
                con.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //DDL语句或者DML语句----->Statement对象和Connection
    public static void close( Statement stem ,Connection con){
        close(null,stem,con);
    }

    //测试
    public static void main(String[] args) {
        Connection getconnertion = jdbcUtils.getconnertion();
        System.out.println(getconnertion);
    }

}

四、DDL、DML、DQL语句

DDL:表的操作            ----   executeUpdate

DML:insert into、update 、delete        ----   executeUpdate

DQL:select * from                         --------executeQuary

 五、如何使用反射调用方法

 Class   clazz   =  Class.forName("类的权限定名称")    -------->Class   clazz

创建当前类的实例      Object  obj =   clazz.newInstance()  ; ------------> Object  obj

调用方法:公共的    Method   method  = clazz.getMethod("方法名",参数类型的Class);

调用方法:Object   reuslt =  method.invoke(obj,实际参数);

六、将student表全部查询出来,将每一条学生的数据封装到Student实体类中, 然后多条学生信息,封装到List<Student>,将集合进行遍历!

实现步骤

1、创建学生类

/**
 * @author Kuke
 * @date 2021/8/17
 * 学生类
 */
public class Student {

    private int id ; //编号
    private String name ;//姓名
    private String gender ;//性别
    private String email ; //邮箱

    public Student() {

    }

    public Student(int id, String name, String gender, String email) {
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.email = email;
    }

    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 String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

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

2、针对学生数据库创建访问接口

/**
 * @author Kuke
 * @date 2021/8/17
 * 针对学生的数据库访问接口
 */

public interface StudentDao {

     /**
     * 查询所有学生信息
     * @return 返回学生列表数据
     */

    List<Student> findAll() ;

    /**
     * /通过学生id学号查询某个学生信息
     * @param id 学号id
     * @return  返回的某个学生实体
     */
    Student findById(int id) ;

    /**
     * 添加学生信息
     * @param student 学生实体类
     */
    void add(Student student) ;

    /**
     * 更新学生信息
     * @param student
     */
    void updateStudent(Student student) ;

    /**
     * 通过学号删除学生
     * @param id 学生id号
     */
    void delete(int id) ;
}

三、数据访问实现层

import com.qf.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Kuke
 * @date 2021/8/17
 *
 * 数据库接口访问实现层
 */
public class StudentDaoImpl implements  StudentDao {
    @Override
    public List<Student> findAll() {
        Connection conn = null ;
        Statement stmt = null ;
        ResultSet rs = null ;
        //操作数据库
        try {
            //创建List集合对象
            List<Student> list = new ArrayList<>() ;
            //获取连接对象
             conn = JdbcUtils.getConnection();
            //准备sql语句
            String sql = "select * from student" ;
            //获取执行对象
            stmt = conn.createStatement();
            //执行查询

            rs = stmt.executeQuery(sql);
            //声明学生类型的变量student
            Student student = null ;
            while(rs.next()){
                //创建学生对象,并封装学生数据
                student = new Student() ;
                //查询一行,将这条学生信息封装到学生类中
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String gender = rs.getString("gender") ;
                String email = rs.getString("email");

                student.setId(id);
                student.setName(name);
                student.setGender(gender);
                student.setEmail(email);

                //将学生添加到集合中
                //返回集合List
                list.add(student) ;
            }
            return list ;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public Student findById(int id) {
        return null;
    }

    @Override
    public void add(Student student) {

    }

    @Override
    public void updateStudent(Student student) {

    }

    @Override
    public void delete(int id) {

    }
}

四、测试类

import java.lang.reflect.Method;
import java.util.List;


public class JdbcDemo2 {

    public static void main(String[] args) throws Exception {
        //接口多态方式
        //遍历集合,获取结果
       StudentDao sd = new StudentDaoImpl() ;
        List<Student> list = sd.findAll();
        for (Student student : list) {
            System.out.println(student);
            System.out.println(student.getId()+"\t"+student.getName()+"\t"+student.getGender()+"\t"+student.getEmail()); //toString()
        }
       
        
        //反射创建当前StudentDaoImpl的实例
        Class clazz = Class.forName("com.qf.jdbc_statment_03_jdbcutils.StudentDaoImpl");
        //创建当前类实例
        Object obj = clazz.newInstance(); //或者Constructor类对象
        //获取Method类对象
        Method method = clazz.getMethod("findAll");
        //调用
        Object result = method.invoke(obj); //toString()
        System.out.println(result);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彦登的登

动力来源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值