java语言连接数据库

一、什么是JDBC,为什么使用JDBC?

  • JDBC(Java DataBase Connectivity):java语言连接数据库。

  • JDBC是SUN公司定义的一套接口(interface)。
    接口都有调用者和实现者。
    面向接口调用、面向接口写实现类,这都属于面向接口(抽象)编程。
    面向接口编程降低程序的耦合度,提高程序的扩展能力。
    多态机制是非常典型的面向抽象编程。(不要面向具体编程)
    Animal a = new Cat();
    Animal a = new Dog();
    Public void feed (Animal a){}

  • 思考:为什么SUN公司要指定一套JDBC接口呢?
    因为每一个数据库的底层实现原理不一样。
    Oracle数据库有自己的原理。
    MySQL数据库也有自己的原理、
    MS SqlServer数据库也有自己的原理。

    每一个数据库都有自己独特的实现原理。
    java语言连接数据库_第1张图片


    二、JDBC编程6步

    1. 注册驱动
    2. 获取连接
    3. 获取数据连接对象
    4. 执行sql语句
    5. 处理查询结果集
    6. 释放资源

    1. 注册驱动(告诉java程序,即将要连接的是哪个品牌的数据库)

  • 方式一(不常用):

Driver driver = new com.mysql.cj.jdbc.Driver();//,多态,父类型引用指向子类型对象。
DriverManager.registerDriver(driver);

java语言连接数据库_第2张图片

  • 方式二(常用):
//不需要接收返回值,因为我们只想用它的类加载动作
	Class.forName("com.mysql.jdbc.Driver");

Driver类的源代码中有一个静态代码块。
Class.forName会导致类加载异常:ClassNotFoundException e
java语言连接数据库_第3张图片

2. 获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程间的通信,重量级的,使用完之后一定要关闭)

String url = "jdbc:mysql://localhost:3306/1147?serverTimezone=UTC&user=true&characterEncoding=UTF-8";
            String  user = "root";
            String password ="root";
            Connection conn = DriverManager.getConnection(url,user,password);
            System.out.println("数据库连接对象"+conn);

java语言连接数据库_第4张图片
3. 获取数据库操作对象(专门执行sql语句的对象)
java.sql
Interface Statement:用于执行静态SQL语句并返回其生成的结果的对象。

Statement stmt = conn.createStatement();

java语言连接数据库_第5张图片
4. 执行SQL语句(DQL、DML)

 String sql = "SELECT * FROM band";
 rs = stmt.executeQuery(sql);

java语言连接数据库_第6张图片
5.处理查询结果集(只有当第四步执行的是select语句的时候,才有这第五步的查询结果集)

String sql = "insert into band(name,remark) values('软件工程5班','666')";
            int result = stmt.executeUpdate(sql);
            if (result == 1){
                System.out.println("添加成功");
            }else {
                System.out.println("添加失败");
            }
 String sql = "SELECT * FROM band";
rs = stmt.executeQuery(sql);
            //5.处理查询结果集,循环查出每一行
            while (rs.next()){//光标指向的行有数据
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String remark = rs.getString("remark");
                System.out.println(id+","+name+","+remark);
            }

java.sql
Interface ResultSet

:next() :将光标从当前位置向前移动一行。
:将光标从当前位置向前移动一行。 ResultSet光标最初位于第一行之前; 第一次调用方法next使第一行成为当前行; 第二个调用使第二行成为当前行,依此类推。
:true如果新的当前行(光标指向的当前行)有效(有数据); false如果当前行(光标指向的当前行)无效(没有有数据)

getString(String columnLabel) :以列名的形式获取数据(健壮),要以查询结果的列名为准(假设有as别名,要用别名)
getString(int columnIndex) :以第几列(1,2,3)的形式获取数据 ,具体要以查询语句中列名的顺序(不健壮)
getInt(String columnLabel):以数据库底层的数据为准,去出来,可以直接拿来运算
getDouble(String columnLabel):以数据库底层的数据为准,去出来,可以直接拿来运算
java语言连接数据库_第7张图片
在这里插入图片描述在这里插入图片描述
6.释放资源(使用完资源之后一定要关闭资源。java和数据库属于进程间通信,开启之后一定要关闭)
//为了保证资源一定释放,在finallly语句块中关闭资源。
//并且要遵循从小到大依次关闭(正序创建,逆序关闭)
//分别对其try–catch
rs.close;关闭数据库查询结果集
stmt.close();关闭数据库操作对象
conn.close();关闭数据库连接对象

finally {
//6.释放资源(使用完资源之后一定要关闭资源。java和数据库属于进程间通信,开启之后一定要关闭)
            //为了保证资源一定释放,在finallly语句块中关闭资源。
            //并且要遵循从小到大依次关闭
            //分别对其try--catch
            if (stmt != null) {
                try {
                    stmt.close();

                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

代码

public class JDBCProperties {
    //1.注册驱动
    //2.获取连接
    //3.获取数据库操作对象
    //4.执行sql语句
    //5.处理sql结果集
    //6.释放资源
    public static void main(String[] args) {
        //使用资源绑定器绑定属性配置文件
        ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
        String driver = bundle.getString("driver");
        String username = bundle.getString("username");
        String pwd = bundle.getString("pwd");
        String url = bundle.getString("url");
        Connection conn = null;
        Statement stmt = null;
        try{
//1.注册驱动
//            Driver driver = new com.mysql.cj.jdbc.Driver();
//            DriverManager.registerDriver(driver);
                Class.forName(driver);

//2.获取连接
            conn = DriverManager.getConnection(url,username,pwd);
//3.获取数据库操作对象
            stmt = conn.createStatement();
//4.执行sql语句
            String sql = "insert into band(name,remark) values('软件工程5班','666')";
            int result = stmt.executeUpdate(sql);
            if (result == 1){
                System.out.println("添加成功");
            }else {
                System.out.println("添加失败");
            }
            //SQL异常和类加载异常
        }catch (SQLException|ClassNotFoundException e){
            e.printStackTrace();
        }finally {
//6.释放资源
            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

             if(conn != null){
                 try {
                     conn.close();
                 } catch (SQLException e) {
                     e.printStackTrace();
                 }
             }
        }
    }
}

package cn.edu.mju.JDBC;

import java.sql.*;
import java.util.ResourceBundle;

/**
 * @author 友人A
 * @描述 功能说明:
 * @date 2020/5/8
 */
public class JDBCSelect {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        ResourceBundle bundle= ResourceBundle.getBundle("jdbc");
        String url = bundle.getString("url");
        String username = bundle.getString("username");
        String pwd = bundle.getString("pwd");
        try{
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接
            conn = DriverManager.getConnection(url,username,pwd);
            //3.获取数据库操作对象
            stmt = conn.createStatement();
            //4.执行sql语句
            String sql = "SELECT * FROM band";
            rs = stmt.executeQuery(sql);
            //5.处理查询结果集,循环查出每一行
            while (rs.next()){//光标指向的行有数据
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String remark = rs.getString("remark");
                System.out.println(id+","+name+","+remark);
            }
            //5.处理查询结果集
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //6.释放资源
            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();
                }
            }
        }
    }
}

你可能感兴趣的:(JAVA)