首页 > 数据库 >java连接数据库的5种方式

java连接数据库的5种方式

时间:2023-04-26 17:24:39浏览次数:47  
标签:properties jdbc java String url 数据库 Driver 连接 final

方式一直接导入第三方库驱动类


这种加载方式在jdbc入门时已经用过,这个driver属于第三方库,。为静态加载,灵活性差,依赖性抢

方式二使用反射机制获取

方式一和方式二代码

package com.hsp.edu;

 import com.mysql.cj.jdbc.Driver;

 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.Properties;

//java获取连接的5种方式
public class JdbcConnect {
    public static void main(String[] args) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        connect01();
        connect02();

    }
    //方式一,直接导入第三方库驱动类
    public static void connect01() throws SQLException {

        //获取驱动
        Driver driver = new Driver();
        //获取连接
        String url = "jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC&useSSL=false&useSer" +
                "verPrepStmts=true&characterEncoding=utf-8&useSSL=false";
        //将用户名和密码放入到Properities对象中
        Properties properties = new Properties();
        properties.setProperty("user","root");//用户
        properties.setProperty("password","888888");//密码
        final Connection connect = driver.connect(url, properties);
        System.out.println(connect);
    }
    //方式二:使用反射加载Driver:动态加载,更加的灵活,减少依赖
    public static void connect02() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException, NoSuchMethodException, InvocationTargetException {
        //获取Driver类的字节码文件对象
        final Class<?> clazz = Class.forName("com.mysql.cj.jdbc.Driver");
        //注意:在用字节码文件对象获取Driver对象时,直接newInstance被idea提示已经弃用
        final Constructor<?> Constructor = clazz.getDeclaredConstructor();
        final Driver driver = (Driver)Constructor.newInstance();
        String url = "jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC&useSSL=false&useSer" +
                "verPrepStmts=true&characterEncoding=utf-8&useSSL=false";
        //将用户名和密码放入到Properities对象中
        Properties properties = new Properties();
        properties.setProperty("user","root");//用户
        properties.setProperty("password","888888");//密码
        final Connection connect = driver.connect(url, properties);
        System.out.println(connect);

    }
}

连接方式三:使用DriverManager类

//方式三:使用DriverManager替换Driver
    public static void connect03() throws SQLException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException, ClassNotFoundException {
        //DriverManager类支持更好的获取连接的方法,可以直接将用户和密码作为参数,而不用存储到Properities
        final Class<?> clazz = Class.forName("com.mysql.cj.jdbc.Driver");
        final Constructor<?> constructor = clazz.getDeclaredConstructor();
        final Driver driver =(Driver)constructor.newInstance();
        //创建url和user和password
        String url = "jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC&useSSL=false&useSer" +
                "verPrepStmts=true&characterEncoding=utf-8&useSSL=false";
        String user = "root";
        final String password = "888888";
      DriverManager.registerDriver(driver);//注册Driver驱动
        final Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);

    }

连接方式四:在加载Driver类时自动完成驱动注册(以此简化代码)


Driver类的底层源码

静态代码块:在类加载的时候会执行一次
从上面的Driver类的源码可以看出,在加载Driver类的时候,其静态代码块,已经完成了驱动的注册

//方式四:加载Driver时自动完成注册(这种方式使用的最多,推荐使用)
    public static void connect04() throws ClassNotFoundException, SQLException {
        //使用反射加载了Driver类
        //在加载 Driver类时,完成注册
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC&useSSL=false&useSer" +
                "verPrepStmts=true&characterEncoding=utf-8&useSSL=false";
        String user = "root";
        String password="888888";
        final Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);

    }

连接方式五:将信息写入到配置文件

一个疑问:为什么不写`Class.forName("com.mysql.cj.jdbc.Driver");也可以获取到连接?


在驱动文件中META-INF下面的services有个com.mysql.cj.jdbc.Driver文件里面已经记录了加载的全类名。我们的程序将会直接按照文件中的内容进行加载


使用配置文件,当我们需要修改的时候就不用修改代码,只用修改配置文件即可

解惑:Properties类和properties文件没有直接关系(以前认为如果创建了一个properies文件,就已经存在了一个Properties对象)

Properties类只是和properties文件存储的格式一样(以键值对的形式存储),但是在使用的时候还是需要将文件中的数据读取到程序中

  • 配置文件目录
//方式五:进一步优化,将信息写入到配置文件
    public static void connect05() throws IOException, ClassNotFoundException, SQLException {
        //通过Properties对象获取配置文件信息
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\mysql.properties"));//此时已经将配置文件的信息读取到了Properties中
        //获取相关信息
        final String user = properties.getProperty("user");//用户
        final String password = properties.getProperty("password");//密码
        final String url = properties.getProperty("url");//url
        final String driver = properties.getProperty("driver");
         Class.forName(driver);//注册驱动
        final Connection connection = DriverManager.getConnection(url, user, password);//获取连接
        System.out.println(connection);


    }

标签:properties,jdbc,java,String,url,数据库,Driver,连接,final
From: https://www.cnblogs.com/swtaa/p/17355729.html

相关文章

  • Java程序部署成Windows服务
    大多数时候部署Java程序时,都是简单弄一个控制台,一是简单,二是能很方便监测运行是否正常。但如果是在服务器上部署这种模式就不可取,假设服务器重启了,重启之后不登录到远程桌面的话,即使把启动命令放到启动项,也不会自动运行。另一个问题就是,针对WindowsServer2008以后的操作系统,控制......
  • Java中关于String类以及字符串拼接的问题
    String类部分源码//被final修饰不可被继承publicfinalclassStringimplementsjava.io.Serializable,Comparable<String>,CharSequence{//String维护char[]所以不可修改privatefinalcharvalue[];创建String对象的方式str1它首先会去方法区的常量池......
  • Java通过反射给final对象赋值(代码库)
    直接赋值会报错Methodthrew'java.lang.UnsupportedOperationException'exception.给没有set方法的类如下赋值publicstaticvoidsetFieldValue(Objectobj,StringfieldName,Objectval){if(isEmpty(obj)||isEmpty(fieldName))return;ClasssuperClas......
  • 测试Java初学者建议
    作为测试工程师,我们需要具备扎实的编程技能,能够熟练掌握至少一门编程语言。因为测试工作本身就需要编写测试脚本、开发自动化测试工具和测试框架等,这些工作离不开编程语言的支持。同时,编程语言的不断更新和变化也要求我们不断学习和提升。选择一门适合自己的编程语言学习,可以帮助......
  • Android进阶之路 - Java 单元测试
    在此之前,我在单元测试的时候,往往会单独创建一个Demo去进行功能实现,这俩天正好闲下来,所以快速的掌握了一下这个知识点,挺简单的,下面看图说话,看完你就出师了Lookhere~:此文讲的并不高深,扩展也有限,我的目的仅仅是初步且快速的掌握单元测试使用方式,从而提升自己的开发效率~单元......
  • 打卡4(java)
    importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);inta=sc.nextInt(),b=sc.nextInt();intc=sc.nextInt(),d=sc.nextInt();intx=a*60+b,y=c*60+d;......
  • Android结构优化 - Java、Kotlin项目结构分包
    随着Android中Java、Kotlin的混编开发场景越来越多,其中大多人都会将java文件和kt文件放在同一个资源文件夹下,在项目越来越大的情况下,我们进行代码查询、项目重构、优化都不太便捷,所以本篇主要记录通过kotlin分包、java分包来区分、整合java类和kotlin类因为目前项目为......
  • python与java 对应的加密算法
    python与java对应的加密算法1.gzip加密java的gzip加密:importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.util.Arrays;importjava.util.zip.GZIPInputStream;importjava.util.zip.GZIPOutputStream;publicclassHello{......
  • 通过晶体数据库下载cif文件(转摘)
    1.7个晶体数据库下载cif文件的介绍——摘自:https://mbd.baidu.com/ug_share/mbox/4a83aa9e65/share?product=smartapp&tk=b345140e38a063d8d34015a16117c5d1&share_url=https%3A%2F%2F7dapi7.smartapps.baidu.com%2Fpages%2Farticle%2Farticle%3F_swebfr%3D1%26eid%3Dc1a3101e0346......
  • JAVA笔记1
    Java的基础技术包括以下内容:Java语言基础:Java语言是一种面向对象的编程语言,具有丰富的数据类型、控制结构、类和对象等基本特性。Java程序员需要熟练掌握Java语法和语义规则,以便能够编写出正确、高效的代码。Java集合框架:Java集合框架是Java中用于管理和操作数据集合的一组A......