JDBC浅尝辄止——JAVA如何使用最朴素的方法连通数据库

写在前面

尽管现在各种框架层出不穷,完美的提供了更为便捷的操作数据库的API。
但是对于初学者用来练习SQL语法,或者掌握一点基础的JDBC的使用方法,应用于一些小型的自己做着玩的小型项目来说,JDBC都还是有学习的价值。
在这里插入图片描述

一、数据库统一接口JDBC

•JDBC(Java DataBase Connectivity), 即java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

JDBC核心组件:

  1. DriverManager:驱动管理者,根据连接标识和具体的数据库驱动匹配

  2. Driver:根据载入的Class信息,有管理者生成和调配,一般不直接使用

  3. Connection:表示和一个数据库具体连接的对象

  1. Statement:使用从此接口创建的对象将SQL语句提交到数据库

在这里插入图片描述

  1. ResultSet:在使用Statement对象执行SQL查询后,这些对象保存从数据库检索的数据

在这里插入图片描述

  1. SQLException:此类处理数据库应用程序中发生的任何错误

二、使用方法(主体部分)

  • 前期准备(这里注意需要导入mysql-connector-java库)

在这里插入图片描述

  • SQL执行

  • 文件目录和建表txt

在这里插入图片描述

三、代码

//文件IO
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
//sql支持
import java.sql.*;
//集合框架,List
import java.util.List;

public class MySQLDemo {

    //数据库连接基本信息
    //数据库驱动,提供对相应数据库操作支持
    //低版本去掉.cj
    static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    //数据库地址,用户名和密码
    static final String DB_URL = "jdbc:mysql://localhost:3306/MySQLDemoTest?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
    static final String USER = "root";
    static final String PASS = "123";

    public static void main(String[] args) {
        //使用url和用户名密码建立连接
        Connection conn = null;
        //Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句
        Statement stmt = null;

        Path pathCreat= Paths.get("src","MySQL","target","classes","CreatTable.txt");

        try{
            // 注册 JDBC 驱动;载入Class文件信息
            Class.forName(JDBC_DRIVER);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);

            //建立好连接后,获取当前连接的Statement对象
            System.out.println("实例化Statement对象...");
            stmt = conn.createStatement();

            //读取pathCreat目录下的文件内容,组成SQL语句
            StringBuffer sql=new StringBuffer();
            List<String> list=Files.readAllLines(pathCreat.toAbsolutePath());
            for(String m:list)
                sql.append(m);

            //通过Statement的对象执行String类型的SQL语句即可
            System.out.println("删除表...");
            stmt.executeUpdate("DROP TABLE IF EXISTS student;");

            System.out.println("新建表...");
            stmt.executeUpdate(sql.toString());

            System.out.println("插入...");
            for(int i=1;i<10;i++)
            stmt.executeUpdate("INSERT INTO student (name) VALUES('呆瓜"+i+"号')");

            System.out.println("查询...");
            ResultSet rs = stmt.executeQuery("SELECT * FROM student");

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                int id  = rs.getInt("id");
                String name = rs.getString("name");

                // 输出数据
                System.out.print("ID: " + id);
                System.out.print(", 姓名: " + name);

                System.out.print("\n");
            }

            System.out.println("删除...");
            for(int i=1;i<10;i++){
                if(i%2==0){
                    stmt.executeUpdate("DELETE FROM student\n" +
                            "WHERE id="+i+"; ");
                }
            }

            System.out.println("删除后查询...");
            rs = stmt.executeQuery("SELECT * FROM student");

            while(rs.next()){
                // 通过字段检索
                int id  = rs.getInt("id");
                String name = rs.getString("name");

                // 输出数据
                System.out.print("ID: " + id);
                System.out.print(", 姓名: " + name);
                System.out.print("\n");
            }

            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException se2){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        System.out.println("Goodbye!");
    }
}

四、其他介绍

数据库发展时期:

•无库时代 :没有专门的数据库,数据大多以文件形式存放

•层次状数据库 :使用层次状模型进行数据库设计和存放

•网状数据库 :使用网状模型进行数据库设计和存放

•关系型数据库 :使用关系型模型进行数据库设计和存放

•非关系型数据库:为适应水平扩展性和处理超大量的数据环境,近几年发展非常迅速的发展,衍生类型非常多

新的挑战和应用:

•尽管在当下的Web2.0时代——用户交互共建对数据库的读写提出了更高的要求,也产生了大量的数据需要保存,由此诞生了适用于不同领域的NoSQL类型数据库

•但是关系型数据库仍然占据主导地位,而且随着不断发展,博采众长,关系型数据库也将迎来更辉煌的新阶段——NewSQL

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码之狐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值