今天的内容

JDBC

Java DataBase Connectivity java 数据库连接

使用小黑屏或者可视化工具sqlyog去连接数据库,创建数据库,使用数据库。

然后对数据库里面的数据进行增删改查。这种开发的时候可以吗?不行。咱们今天要用java代码去连接咱们的数据库。去数据里面的数据进行增删改查。

JDBC是干嘛的?咱们得知道。

1.JDBC概述

规范!!!

Sun公司制定一套规则。通过java代码连接咱们数据库(mysql,oracle,SQLServer,DB2)的规范。而且要求数据库的厂商去解决连接和操作问题!!!

如果把sun公司比作一台电脑,然后电脑给你预留接口。这些数据库厂商就好比u盘。

如果电脑想要用鼠标功能,买个鼠标通过接口插到电脑上面,让电脑具有鼠标的功能。

sun公司制定的java代码,要符合市面上所有的数据库厂商。厂商不一样。sun公司说了。你想使用java代码去连接SQLServer(微软),sun公司和微软,哥们,你得给我封装一些类库,让我直接调用。如果你不封装,我就不用你的了!!!

JDK:

java.sql

javax.sql

如果想要连接数据库,必须要下载第三方的jar包。

sun公司给咱们封装一写类库,但是厂商需要自己封装一些类库,那这些类库是厂商的,被称为第三方的类库,不是java自己带的!!!

真正用的时候,需要导入第三方的jar包,在开发中。

要连接mysql数据库,需要下载一个jar包,mysql-connector-java-5.1.47.jar

如何下载第三方的jar:

最标准的模式就是去mysql官网去下载。

1.百度输入maven

2.打开网站https://mvnrepository.com/

3.输入mysql进入查询

4.选择要的版本进行下载

2.mysql连接数据库的参数

回顾小黑屏里面:

cmd> mysql -hlocalhost -uroot -p123456

1. mysql 需要确定连接哪一款数据库 mysql

2.hlocalhost 确定连接数据库在哪个服务器上面 本机

3.数据库的用户名

4.数据库的密码

java代码连接数据库的时候也是需要这几个参数的!!!

JDBC的URL=协议名+子协议名+数据源名。
a 协议名总是“jdbc”。
b 子协议名由JDBC驱动程序的编写者决定。
c 数据源名也可能包含用户与口令等信息;这些信息也可单独提供。
几种常见的数据库连接


-------------------------------oracle------------------
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
      port:端口号,默认是1521

-------------------------------mysql-------------------
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称;
      port:端口号,默认3306    

---------------------------SQL Server(微软)------------------
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://<machine_name><:port>;DatabaseName=<dbname>
注:machine_name:数据库所在的机器的名称;
      port:端口号,默认是1433

--------------------------DB2 (IBM)--------------------------
驱动:com.ibm.db2.jdbc.app.DB2Driver
URL:jdbc:db2://<machine_name><:port>/dbname
注:machine_name:数据库所在的机器的名称;
      port:端口号,默认是5000
-------------------------------------------------------

3.借助JDBC连接mysql数据库的入门案例

在项目中如何导包

1.在src的文件夹下面新建一个lib文件夹

2.将jar包复制到lib文件夹中

3.点击上jar包右键,add as library

package com.qfedu.a_mysql;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
public class Demo1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.准备url
        
        //useSSL 要么是true要么是false
        //你自己电脑的系统我不知有这个ssl协议的!!!
        //如果报一个错: javax.net.ssl.SSLHandshakeException:
        //true和false看自己情况来定的!!!!
        String url = "jdbc:mysql://localhost:3306/java2109?useSSL=false";
        //3.准备用户名和密码
        String user = "root";
        String password = "123456";
        //4.借助于一个java里面的类DriverManager 获取数据库连接对象
        Connection connection = DriverManager.getConnection(url, user, password);
        //
        System.out.println(connection);
        connection.close();
    }

}

4.JDBC核心的API

java.sql.DriverManager
    用来管理驱动的一个类
    static getConnection(String url, String user,String password);
        获取数据库连接对象   Connection
java.sql.Connection  接口
    Statement  createStatement();
    获取statement对象,将sql语句发送到数据库进行执行。
java.sql.Statement  接口
    用于执行静态SQL语句并返回其生成的结果的对象。
    int executeUpdate(String sql)
        执行给定的SQL语句,这可能是 INSERT , UPDATE ,或 DELETE语句,或者不返回任何内容,如SQL DDL语句的SQL语句。只能增删改

4.1向数据表增加一条数据

1.连上数据库

2.写sql语句

3.执行sql语句

package com.qfedu.b_statement;

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

/**
 * 向数据表中插入一条数据
 */
public class InertTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //添加一条数据到数据表中
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.准备url   user  password
        String url = "jdbc:mysql://localhost:3306/java2109?useSSL=false";
        String user = "root";
        String passwrod = "123456";
        //3.使用驱动管理器类DriverManager 去获取connection对象
        Connection connection = DriverManager.getConnection(url, user, passwrod);
        //4.通过connection对象获取statement对象,将sql语句放到咱们这个数据库上执行
        //statement  对象  sql语句搬运工,将sql语句搬运工到数据库中进行执行
        Statement statement = connection.createStatement();
        //5.准备sql语句
        //现在数据库中 java2109这个库有没有work表?没有需要自己手动建一个
        //sql  静态的sql语句
        String sql = "insert into work(name, age, info) values('老邢', 67, '大家见过老邢没,下阶段老邢带大家,长的是真丑')";
        //6.执行sql语句
        //executeUpdate() 只能增删改   这些sql语句
        int i = statement.executeUpdate(sql);
        System.out.println(i);//受影响的行数  打印1

        //7.关闭资源
        statement.close();
        connection.close();
    }

}

4.2数据表中删除一条数据

package com.qfedu.b_statement;

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

public class DeleteTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.准备url  user  password
        String url = "jdbc:mysql://localhost:3306/java2109?useSSL=false";
        String user = "root";
        //安装数据库mysql软件的时候,自己设置密码,在代码里面写你自己的
        String password = "123456";
        //3.获取connection对象
        Connection connection = DriverManager.getConnection(url, user, password);
        //4.通过connection对象获取搬运工对象
        Statement statement = connection.createStatement();
        //5.准备一个sql语句
        String sql = "delete from work where id = 1";
        //6.执行sql语句
        int i = statement.executeUpdate(sql);
        System.out.println(i);
        //7.关闭资源
        statement.close();
        connection.close();

    }
}

4.3数据表中修改一条数据

package com.qfedu.b_statement;

import javax.print.DocFlavor;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class UpdateTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/java2109?useSSL=false";
        String user = "root";
        String password = "123456";
        Connection connection = DriverManager.getConnection(url, user, password);
        Statement statement = connection.createStatement();
        String sql = "update work set name = '小邢',age=3,info='刚断奶'";
        int i = statement.executeUpdate(sql);
        System.out.println(i);
        statement.close();
        connection.close();
    }
}

4.4数据的查询【偏难,重要!!!】

package com.qfedu.b_statement;

import java.sql.*;
import java.util.ArrayList;

public class QueryTest1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/java2109?useSSL=false";
        String user = "root";
        String password = "123456";
        Connection connection = DriverManager.getConnection(url, user, password);
        //1.获取搬运工对象
        Statement statement = connection.createStatement();
        //2.准备sql语句
        String sql = "select * from work";
        //3.使用搬运工对象(statement)调用方法执行sql语句
        //result就是包含了咱们数据表的里面的额数据,字段等所有的
        ResultSet resultSet = statement.executeQuery(sql);
        //声明一个集合,这个集合存放的是work对象
        ArrayList<Work> works = new ArrayList<>();
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            int age = resultSet.getInt("age");
            String info = resultSet.getString("info");
            //每一次的循环都会出来四个数据,把这四个数据赋值给你一个对象
            //循环几次添加几次的work对象,每次添加的work对象的值都是不一样的!!!
            works.add(new Work(id, name, age, info));

        }
        //works这个集合里面有值了
        //能不能瞜一眼? iter
        for (Work work : works) {
            System.out.println(work);
        }
    }
}

我发现一个问题,发现获取connection对象还有close方法都是一样的!!!

被逼无奈的封装。

4.4被逼无奈的封装

1.写一个类,类下面有方法,封装一个获取connection对象方法。

封装一个close方法(增删改关闭两个,查关闭三个)