【数据库 JDBC】用 Java 程序连接数据库

初识 JDBC

应用程序不能直接连接数据库,需要通过数据库驱动进行连接,JDBC 就是 sun 公司为了简化开发人员的对数据库统一的操作,提供了一个 Java 操作数据库的规范,也就是 JDBC

准备工作

下载 jdbc 包,版本自己选择

链接: https://mvnrepository.com/artifact/mysql/mysql-connector-java

第一个 JDBC 程序

1、创建测试数据库和Java普通项目

2、导入数据库驱动

  • 新建一个 lib 目录
  • 将 .jar 拷贝到lib 目录中
  • 右击选择 add as library

3、编写测试连接

package jdbc;
import java.sql.*;

/**
 * @Title:
 * @Package
 * @Description: 我的第一个 jdbc 程序
 * @author: maze
 * @date 2020/11/11上午 10:37
 */
public class test1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.加载驱动
        Class.forName("com.mysql.jdbc.Driver"); // 固定写法
        //2. 用户连接信息
        /*  请注意:不建议在没有服务器身份验证的情况下建立SSL连接。
            根据MySQL 5.5.45+、5.6.26+和5.7.6+的要求,如果不设置显式选项,则必须建立默认的SSL连接。
            您需要通过设置useSSL=false显式地禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任存储
        */
        String url = "jdbc:mysql://localhost:3306/db-stu?useUnicode=true&characterEncoding=utf-8&useSSL=false";
        String username = "root";
        String password = "123456";
        //3,连接成功,数据库对象
        Connection connection = DriverManager.getConnection(url, username, password);
        //4. 执行 SQL 对象
        Statement statement = connection.createStatement();

        //5. 执行 SQL 对象去执行 SQL,可能存在结果,查看返回结果
        String sql ="SELECT * FROM t_student";
        ResultSet resultSet = statement.executeQuery(sql); //返回的结果集

        // 输出结果
        while(resultSet.next()){
            System.out.print("id="+resultSet.getObject("stuId")+" ");
            System.out.print("name="+resultSet.getObject("stuName")+" ");
            System.out.print("password="+resultSet.getObject("passWord")+" ");
            System.out.print("gender="+resultSet.getObject("gender")+" ");
            System.out.println();
        }
        //6. 释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }
}

步骤总结

  1. 加载驱动
  2. 连接数据库 DiverMarager
  3. 获取执行 SQL 的对象 Stame
  4. 获得返回的结果集
  5. 释放连接

JDBC 中对象解释

DriverManager

Class.forName("com.mysql.jdbc.Driver"); 
Connection connection = DriverManager.getConnection(url, username, password);
// connection 代表的是数据库 

connection.commit(); // 提交
connection.rollback(); // 回滚
connection.setAutoCommit(); // 自动提交      

URL

String url = "jdbc:mysql://localhost:3306/db-stu?useUnicode=true&characterEncoding=utf-8&useSSL=false"; 

statement 执行 SQL 对象

//4. 执行 SQL 对象
Statement statement = connection.createStatement();
//5. 执行 SQL 对象去执行 SQL,可能存在结果,查看返回结果
String sql ="SELECT * FROM t_student";
ResultSet resultSet = statement.executeQuery(sql); //返回的结果集

statement.executeQuery(); //查询操作返回集
statement.executeUpdate(); //更新、插入、删除、都是用这个,返回受影响的行数
statement.execute(); // 执行任何 SQL 语句

ResultSet : 查询的结果集,封装了所有的查询结果

获得指定的数据类型

resultSet.getObject(); // 在不知道类型的情况下使用
resultSet.getString(); //
resultSet.getInt(); // 
resultSet.getFloat(); //
resultSet.getDate(); // 

遍历、指针

resultSet.beforeFirst();//移动到最前面
resultSet.afterLast();//移动到最后面
resultSet.next();//移动到下一个数据
resultSet.previous();//移动到前一行
resultSet.absoulte(row);//移动到指定行

Statement 对象详解

封装了增删查改接口,对数据库进行操作

在这里插入图片描述

package jdbc;
import JavaSE.oop.Test;

import java.sql.*;

/**
 * @Title:
 * @Package
 * @Description: 我的第一个 jdbc 程序
 * @author: maze
 * @date 2020/11/11上午 10:37
 */
public class test1 {
    private String url;
    private String username;
    private String password;
    private Connection connection; // 连接对象
    private Statement statement; // 执行对象

    // 构造方法
    public test1() throws Exception {
        Class.forName("com.mysql.jdbc.Driver"); // 固定写法
        url = "jdbc:mysql://localhost:3306/db-stu?useUnicode=true&characterEncoding=utf-8&useSSL=false";
        username = "root";
        password = "123456";
        //3,连接成功,数据库对象
        connection = DriverManager.getConnection(url, username, password);
        //4. 执行 SQL 对象
        statement = connection.createStatement();
    }

    public static void main(String[] args) throws Exception {
        // 1.查询 new test1().select();

        // 2. 插入信息 new test1().insert("安琪拉","121415hfs","女");

        //3. 删除信息, 指定 stuId 号 new test1().delete(14);

        //4. 修改信息, 指定 stuId 号,进行修改
        //new test1().update(7,"叶剑","12896d","男");

    }
    public void update(int id,String name,String password,String gender) throws SQLException {
        // 1.拼装修改语句
        String sql = "UPDATE t_student SET stuName='"+name+"',`password`='"+password+"',gender='"+gender+"'  WHERE stuId="+id+";";
        //2.发送 sql
        int num = statement.executeUpdate(sql);
        //3、处理返回结果
        if(num > 0) {
            System.out.println("修改成功");
        }
        //4、关闭连接资源
        statement.close();
        connection.close();
    }
    public void delete(int id) throws Exception {
        // 1.拼装语句
        String sql = "DELETE FROM t_student WHERE stuId="+id+";";
        //2.发送sql
        int num = statement.executeUpdate(sql);
        //3、处理返回结果
        if(num > 0) {
            System.out.println("删除成功");
        }
        //5、关闭连接资源
        statement.close();
        connection.close();
    }

    // 增加学生信息
    public void insert(String name,String password,String gender) throws Exception {
        // 1.拼装语句
        String sql = "INSERT INTO t_student (stuName,`passWord`,gender) VALUES"+
               "('"+name+"','"+password+"','"+gender+"');";

        //2.操作 sql
        int num = statement.executeUpdate(sql);
        //4、处理返回结果
        if(num > 0) {
            System.out.println("添加成功");
        }
        //5、关闭连接资源
        statement.close();
        connection.close();
    }

    // 查询所有学生信息
    public void select() throws Exception{
        //1. 执行 SQL 对象去执行 SQL,可能存在结果,查看返回结果
        String sql ="SELECT * FROM t_student";
        ResultSet resultSet = statement.executeQuery(sql); //返回的结果集

        //2.输出结果
        while(resultSet.next()){
            System.out.print("id="+resultSet.getObject("stuId")+" ");
            System.out.print("name="+resultSet.getObject("stuName")+" ");
            System.out.print("password="+resultSet.getObject("passWord")+" ");
            System.out.print("gender="+resultSet.getObject("gender")+" ");
            System.out.println();
        }
        //3. 释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }
}

提取工具类

提取工具类其实和封装差不多,封装是把经常写的代码封装到一个类或者方法中,提取工具类是把用户信息写到文件中,然后利用 IO 流去读取信息

步骤1:配置文件 db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db-stu?useUnicode=true&characterEncoding=utf-8&useSSL=false
username=root
password=123456

步骤2:封装工具类

package jdbc.utils;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
/**
 * @Title:
 * @Package
 * @Description: 读取配置文件 db.properties
 * @author: maze
 * @date 2020/11/12上午 9:12
 */
public class Jdbcutils {
    private static String driver = null;
    private static String url = null;
    private static String username = null;
    private static String password = null;
    static{
        try{
            InputStream inputStream = Jdbcutils.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
            properties.load(inputStream);
            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");
            // 加载驱动
            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 获取链接
    public static Connection getConnect() throws SQLException {
        return DriverManager.getConnection(url, username, password);
    }
    // 释放资源
    public static void release(Connection co, Statement st, ResultSet rs) throws Exception {
        if(rs != null) {
            rs.close();
        }
        if(st != null){
            st.close();
        }
        if(co != null){
            co.close();
        }
    }
}

步骤3:测试案例

插入数据

package jdbc.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * @Title:
 * @Package
 * @Description: 插入测试
 * @author: maze
 * @date 2020/11/12上午 9:44
 */
public class TestInsert {
    public static void main(String[] args) throws Exception {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultset = null;

        try{
            // 建立连接,获取 sql 执行对象
            connection = Jdbcutils.getConnect();
            statement = connection.createStatement();
            String sql="INSERT INTO t_student(stuName,`passWord`,gender) VALUES ('马泽','312421798','男');";
            int num = statement.executeUpdate(sql);
            if(num > 0){
                System.out.println("插入成功");
            }
            else{
                System.out.println("插入失败");
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            Jdbcutils.release(connection,statement,resultset);
        }
    }
}

删除数据

package jdbc.utils;

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

/**
 * @Title:
 * @Package
 * @Description:
 * @author: maze
 * @date 2020/11/12上午 11:06
 */
public class TestDelete {
    public static void main(String[] args) throws Exception {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultset = null;
        try{
            // 建立连接,获取 sql 执行对象
            connection = Jdbcutils.getConnect();
            statement = connection.createStatement();
            String sql="DELETE FROM t_student WHERE stuId=10";
            int num = statement.executeUpdate(sql);
            if(num > 0){
                System.out.println("删除成功");
            }
            else{
                System.out.println("删除失败");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            Jdbcutils.release(connection,statement,resultset);
        }
    }
}

查询数据

package jdbc.utils;

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

/**
 * @Title:
 * @Package
 * @Description: 查询数据库的数据
 * @author: maze
 * @date 2020/11/12上午 11:12
 */
public class TestSelect {
    public static void main(String[] args) throws Exception {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultset = null;
        try{
            // 建立连接,获取 sql 执行对象
            connection = Jdbcutils.getConnect();
            statement = connection.createStatement();
            // 查询语句
            String sql ="SELECT * FROM t_student";
            ResultSet resultSet = statement.executeQuery(sql); //返回的结果集
            // 输出结果
            while(resultSet.next()){
                System.out.print("id="+resultSet.getObject("stuId")+" ");
                System.out.print("name="+resultSet.getObject("stuName")+" ");
                System.out.print("password="+resultSet.getObject("passWord")+" ");
                System.out.print("gender="+resultSet.getObject("gender")+" ");
                System.out.println();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            Jdbcutils.release(connection,statement,resultset);
        }
    }
}

修改数据

package jdbc.utils;

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

/**
 * @Title:
 * @Package
 * @Description: 修改数据库的数据
 * @author: maze
 * @date 2020/11/12下午 14:09
 */
public class TestUpdate {
    public static void main(String[] args) throws Exception {

        Connection connection = null;
        Statement statement = null;
        ResultSet resultset = null;
        try{
            // 建立连接,获取 sql 执行对象
            connection = Jdbcutils.getConnect();
            statement = connection.createStatement();
            String sql = "UPDATE t_student SET stuName='马泽',`password`='fjslk214i',gender='男' WHERE stuId=1";
            int num = statement.executeUpdate(sql);
            if(num > 0){
                System.out.println("修改成功");
            }
            else{
                System.out.println("修改失败");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            Jdbcutils.release(connection,statement,resultset);
        }
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序猿的温柔香

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值