2021-11-04 JDBC获取数据库连接

这篇博客详细介绍了如何使用Java进行数据库连接,包括JDBC的步骤、三种不同的连接方式,以及如何从配置文件读取连接参数。还强调了使用PreparedStatement来避免SQL注入问题,提升了代码的安全性和效率。
摘要由CSDN通过智能技术生成

JDBC: Java数据库连接(Java DataBase Connectivity)
总体过程:

  • 注册驱动
  • 建立连接Connection
  • 创建执行SQL语句
  • 执行语句
  • 处理执行结果ResultSet
  • 释放资源

一、获取数据库连接

import org.junit.Test;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class ConnectionTest {
    @Test

    public void testConnection1() throws SQLException {
        //获取连接:方式一
        Driver driver=new com.mysql.jdbc.Driver();
        //jdbc:mysql://localhost:3306/dbname
        String url ="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";
        //将用户名和密码封装在properties里面
        Properties info=new Properties();
        info.setProperty("user","root");
        info.setProperty("password","123456");

        Connection conn = driver.connect(url, info);
        System.out.println(conn);

    }

    //方式二:方式一的迭代  反射获取driver的对象 在如下的程序中不出现第三方的api,使得程序具有更好的可移植性
    @Test
    public void testConnection2() throws IllegalAccessException, InstantiationException, ClassNotFoundException, SQLException {
        //1.获取Driver实现类对象:使用反射
        Class cl = Class.forName("com.mysql.jdbc.Driver");
        Driver driver=(Driver)cl.newInstance();
        //2.提供要连接的数据库
        String url ="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";
        //3.提供连接需要的用户名和密码
        Properties info=new Properties();
        info.setProperty("user","root");
        info.setProperty("password","123456");

        //4.获取连接
        Connection conn = driver.connect(url, info);
        System.out.println(conn);

        ;
    }
    //方式三:使用DriverManager替换Driver
    @Test
    public void testConnection3() throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException {
        //注册驱动
        Class cl = Class.forName("com.mysql.jdbc.Driver");
        Driver driver=(Driver)cl.newInstance();
        DriverManager.registerDriver(driver);
        //方法四:可以一行代码:Class.forName("...")  省略手动注册驱动... static
        //还可以全省略了..对于mysql来说

        //提供另外三个连接的基本信息
        String url ="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";
        String user="root";
        String password="123456";
        //最终版本:要将数据库连接需要的4个基本信息声明在配置文件中
        

        //获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);


    }

}

最终版本:要将数据库连接需要的4个基本信息声明在配置文件中
配置文件:

user=root
password=123456
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
driverClass=com.mysql.jdbc.Driver
 public void testConnection4() throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException, IOException {
        InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.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");
        //加载驱动
        Class.forName(driverClass);

        //获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);


    }

好处:

  1. 实现了数据与代码的分离,实现了解耦
  2. 如果需要修改配置文件信息,可以避免程序重新打包

二、使用PreparedStatement实现CRUD操作

在java.sql包中有3个借口分别定义了对数据库的调用的不同方式:

  • Statement:用于执行静态SQL语句,并返回它所生成结果的对象
  • PreparedStatement:SQL语句被预编译并存储在此对象中,可以使用此对象多次高效地执行该语句
  • CallableStatement:用于执行SQL存储过程

Statement弊端

  1. 拼串操作
  2. 存在sql注入

解决方法就是换成PreparedStatement

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值