JDBC-数据库的几种连接方式(笔记)

Posted Vodka~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC-数据库的几种连接方式(笔记)相关的知识,希望对你有一定的参考价值。

package Connection;
import org.junit.Test;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**
 * @author Vodka
 * @date 2021/06//16:09
 */

public class ConnectionTest {

    方法一:
    //测试连接,并监督异常
    @Test
    public static void main(String args[]) throws SQLException{
        //创建驱动对象
        Driver driver = new com.mysql.cj.jdbc.Driver();
        //统一资源定位符,定位Mysql数据的端口 , jdbc:mysql:协议,  ip地址,mysql默认端口号,数据库名称
        String  url = "jdbc:mysql://localhost:3306/iot?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8";
        //将用户名和密码都封装在Properties中
        Properties info = new Properties();
        info.setProperty("user","Vodka");
        info.setProperty("password","6666666");

        Connection con  = driver.connect(url,info);

        System.out.println(con);

    }

    方法二:
 MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
static final String JdbcDriver = "com.mysql.cj.jdbc.Driver";
    static final String DbUrl = "jdbc:mysql://127.0.0.1:3306/iot";

    // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
    //static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    //static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";


    // 数据库的用户名与密码,需要根据自己的设置
    static final String USER = "vodka";
    static final String PASS = "666666";
public static void main(String[] args) {
    Connection conn = null;
    Statement stmt = null;
    try{
        // 注册 JDBC 驱动
        Class.forName(JdbcDriver);

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

        // 执行查询
        System.out.println(" 实例化Statement对象...");
        stmt = conn.createStatement();
        String sql;
        sql = "SELECT Sno, Sname FROM student";
        ResultSet rs = stmt.executeQuery(sql);

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

            // 输出数据
            System.out.print("Sno: " + Sno);
            System.out.print(", Sname: " + Sname);
            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 MySql!");
}

方式三:对方式一的迭代,这种方法不出现第三方的api,让程序有更好的移植性
    @Test
    public void testConnectionTwo() throws ClassNotFoundException, SQLException {
       1.使用Java反射机制,获取Driver实现类对象
         Class Pro = Class.forName("com.mysql.cj.jdbc.Driver");
         Driver driver = Pro.newInstance();    //该方法已经被弃用

        //2.提供数据库连接,后面要加上SSL,时区,以及字符编码
        String Url = "jdbc:mysql://localhost:3306/iot?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8";

        //3.提供连接需要的用户名和密码
        Properties UserInfo = new Properties();
        UserInfo.setProperty("user","vodka");
        UserInfo.setProperty("password","666666");

        //4.通过驱动,获取连接
        Connection conn = driver.connect(Url,UserInfo);
        System.outprinln(conn);
    }

方式四: 使用DriverManager 代替 Driver
    @Test
    public void ConnectionTestFour() throws ClassNotFoundException,SQLException{
        //1.先利用反射机制,获得驱动的实现类对象
        Class Pro = Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver = (Driver)Pro.newInstance();  //该方法已经被弃用

        //2.提供数据库连接,用户名称以及密码
        String Url = "jdbc:mysql://localhost:3306/iot?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8";
        String UserName = "vodka";
        String PassWord = "6666668";

        //3.注册驱动,获得连接
        DriverManager.registerDriver(driver);
        Connection conn = DriverManager.getConnection(Url,UserName,PassWord);
        System.out.println(conn);
    }

    方法五:对方法四的优化

    public static  void main(String args[]) throws ClassNotFoundException ,SQLException{
        //1.利用反射机制,动态获得驱动的实现类对象
        Class.forName("com.mysql.cj.jdbc.Driver");

        //2.提供数据库连接,用户名称以及密码
        String Url = "jdbc:mysql://localhost:3306/iot?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8";
        String User = "vodka";
        String PassWord = "66668888";

        //3.直接就可以通过驱动,获取数据库的连接,无须注册驱动,因为Mysql的实现类中驱动程序里已经注册驱动了,加载使用即可
        Connection conn = DriverManager.getConnection(Url,User,PassWord);
        System.out.println(conn);
    }

//    方式六:将连接数据库有关的信息写到配置文件中,要进行连接时,再进行读取,实现数据与配置代码的分离,降低了耦合性(解耦)
    public static  void main(String agrs[]) throws Exception{
        //1.利用反射获取实现类对象,再用实现类对象中的加载器的方法,读取相应文件的输入流
        InputStream IS  = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
        //利用Properties键值对,利用Properties实例对象来加载文件输入流,再读取相应属性的值
        Properties pros = new Properties();
        pros.load(IS);

        //读取相应属性值
        String User = pros.getProperty("User");
        String PassWord= pros.getProperty("PassWord");
        String Url = pros.getProperty("Url");
        String DriverClass = pros.getProperty("DriverClass");

        //2.利用反射获得实现类,加载驱动
        Class.forName(DriverClass);

        //3.通过驱动,建立连接
        Connection conn = DriverManager.getConnection(Url,User,PassWord);
        System.out.println(conn);
    }
}


以上是关于JDBC-数据库的几种连接方式(笔记)的主要内容,如果未能解决你的问题,请参考以下文章

JDBC 数据库的几种连接方式

JDBC 数据库的几种连接方式

spring in action学习笔记十六:配置数据源的几种方式

Oracle数据库连接的几种方式

Spring简介以及简单使用

JDBC连接数据库的几种方法与简单解析