JDBC-- 基础理解&&数据库连接

19 篇文章 0 订阅
9 篇文章 0 订阅
本文介绍了Java JDBC的基础知识,包括其概念、本质、入门程序流程和数据库连接方法。通过JDBC,开发者可以使用Java语言方便地与各种关系型数据库进行交互,无需关注具体数据库的差异。示例代码展示了如何执行DML(增删改)和DQL(查询)语句,以及如何通过配置文件管理数据库连接信息。使用配置文件可以实现代码与数据的分离,提高代码的可维护性和部署效率。
摘要由CSDN通过智能技术生成
1、概念
  • JDBC(Java Database Connectivity)是一种用于执行SQL语句的JavaAPI,可以为多种关系型数据库提供统一访问,他是由一组用Java语言编写的类和接口组成。
2、本质
  • java官方提供的一套规范,用于帮助开发人员快速实现不同关系型数据的连接。
    实际上就是SUN公司为了满足程序员便利,提供了很多供程序员使用来操作数据库的接口,而这些接口的具体实现则在每个数据库公司去单独实现。使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

如果没有JDBC,java程序调用数据库需要实现每个数据库的不同方法。
在这里插入图片描述
采用JDBC后:
在这里插入图片描述

3、入门程序流程
  1. 导入jar包
  2. 注册驱动 (告诉java程序,即将连接的是哪个品牌的数据库)
  3. 获取数据库连接 (表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级,使用完之后一定要关闭)
  4. 获取执行者对象 (专门执行sql语句的对象)
  5. 执行sql语句并返回结果
  6. 处理结果 (只有上一步执行的是select语句,才会处理数据)
  7. 释放资源 (java和数据库是进程间的通信)
4、连接
4.1 注册驱动

由 Driver接口实现:

  • java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。

  • 在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。

    • Oracle的驱动:oracle.jdbc.driver.OracleDriver

    • mySql的驱动: com.mysql.jdbc.Driver

具体代码实现:

下面这段代码写在了 Driver类的静态代码块中了,只需要让类加载即可以执行静态代码块,因此可以通过反射机制进行类的加载,即上面代码。 不需要返回值,只需要他的类加载动作。

//通过创建数据库驱动来实现Driver
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//通过反射机制加载类实现静态代码段
//Class.forName("com.mysql.cj.jdbc.Driver");
4.2 URL
  1. url: 统一资源定位符(网络中某个资源的绝对路径)
  2. URL包括: 协议 IP PORT 资源名
  3. http:// 通信协议 182.61.200.7 IP地址 80 端口号 index.html 服务器上的某个资源名
5、代码实现
5.1 实现DML语句(增 删 改)

没有返回结果集,stat调用的是 executeUpdate方法,返回的结果是对数据的进行DML操作的记录条数。count==1则表示对一条数据进行DML操作,返回3则是处理记录条数为3。

package com.java;

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

public class JdbcDemo {
    public static void main(String[] args) throws Exception {

        //1.导入jar包
        //2.注册驱动
        //Class.forName("com.mysql.cj.jdbc.Driver");
        //下面这段代码写在了 Driver类的静态代码块中了,只需要让类加载即可以执行静态代码块,因此可以通过反射机制
        //进行类的加载,即上面代码。 不需要返回值,只需要他的类加载动作。
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        //3.获取连接
        /*
         jdbc:mysql:// 协议
         127.0.0.1  localhost都是本机ip地址
         3306 mysql数据库端口号
         atguigudb 数据库名
         */
       Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/mytest1","root","root");
        //4.获取执行者对象 (数据库操作对象)
        Statement stat = con.createStatement();
        //5.执行sql语句
        String sql = "insert into user(id,name,age) values (20,'aaa',20)";
       // ResultSet rs=stat.executeQuery(sql);
        //处理结果
        int count = stat.executeUpdate(sql);
        if(count==1){
            System.out.println("保存成功");
        }

        stat.close();
        con.close();
    }
}

5.2 实现DQL语句 (查询语句)

执行的是 executeQuery方法,返回的是处理集,然后对处理集进行遍历,则可以列出数据。

package com.java;

import java.sql.*;

public class Jdbcselect {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stat = null;
        ResultSet rs = null;

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

         conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mytest1","root","root");

         stat = conn.createStatement();

         String sql = "select * from user";

         rs = stat.executeQuery(sql);

         while (rs.next()){
             //getString方法就是将获取到的数据全部转换为String类型
             //当然还有其他类型 getInt getDouble ==》可以直接对结果进行数据操作
             //通过列号获取不健壮
//             String id = rs.getString(1);//根据列号开始获取数据,JDBC列号从1开始
//             String name = rs.getString(2);
//             String age = rs.getString(3);
             //通过列名称获取数据,列名称是查询结果集的列名称
             String id = rs.getString("id");//
             String name = rs.getString("name");
             String age = rs.getString("age");
             System.out.println(id+" "+name+" "+age);
         }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //释放资源
            if(rs!=null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(stat!=null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}

5.3 优质方法—配置文集存放字符串

在对应的src下创建一个配置文件jdbc.properties其中的内容如下:


className=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mytest1
user=root
password=root

使用配置文件的好处:

  1. 实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码 ,解耦。
  2. 如果修改了配置信息,省去重新编译的过程。
  3. 编写的java程序在部署到服务器上时,需要打包。如果java代码修改过,就需要重新打包。使用配置文件的方式,如果配置信息修改,并没有导致代码的修改。所以不需要重写打包。
      Properties properties = new Properties();
        //加载资源的路径:默认为src下
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
        properties.load(is);
 
        String className = properties.getProperty("className");
        String url = properties.getProperty("url");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
 
        //加载驱动
        Class.forName(className);
 
        //获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
 
 
        System.out.println(connection);
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值