【无标题】

文章介绍了JDBC的基本概念和工作原理,包括DriverManager、Connection、Statement和ResultSet等关键接口的作用。详细展示了数据库连接的步骤,以及如何通过PreparedStatement防止SQL注入。此外,还提到了BaseDao类的封装,用于管理和操作数据库。
摘要由CSDN通过智能技术生成

JDBC

1.什么是jdbc(Java Database Conectivity)

Java数据库连接技术的简称,提供连接各种常用数据库的能力

2.JDBC的工作原理

与数据库建立连接、执行SQL 语句、处理结果

DriverManager类:管理各种不同的JDBC驱动

Connection接口:负责连接数据库并担任传送数据的任务

Statement接口:由 Connection 产生、负责执行SQL语句

ResultSet接口:负责保存Statement执行后的查询结果

3.开发步骤

//1、导入jar包 [mysql-connector-java-8.0.16.jar]
//2、加载绑定jar包
//3、加载驱动
//4、连接数据库
public static void main(String[] args) {
        try {
            //加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("驱动加载完成!");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //创建连接
        Connection conn = null;
        //中国标准时 UTC+08:00
        String URL = "jdbc:mysql://localhost:3306/hospital?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT-8";
        String user = "root";
        String pwd = "root";
        try {
            conn=DriverManager.getConnection(URL,user,pwd);
            System.out.println("数据库连接成功!");
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(null!=conn){
                try {
                    conn.close();
                    System.out.println("数据库关闭连接!");
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

4.数据库连接字符串

jdbc:数据库://ip:端口/数据库名称[连接参数=参数值]

String URL = “jdbc:mysql://localhost:3306/hospital?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT-8”;

5.Connection创建数据库连接

常用方法:

createStatement(): 创建一个Statement对象将SQL语句发送到数据库

prepareStatement(String sql):创建一个PreparedStatement对象,将参数化的SQL语句发送到数据库

close():立即释放此Connection对象的数据库和JDBC资源

6.Statement接口

Java执行数据库操作的一个重要接口

Statement对象:执行不带参数的简单SQL语句

PreparedStatement对象:执行带或不带In参数的预编译SQL语句

常用方法:

executeQuery(String sql):查询并获取ResultSet对象

executeUpdate(String sql):增删改获取受影响的行数

execute(String sql):可以执行任意SQL语句,如果结果为 ResultSet 对象,则返回 true;如果其为更新计数或者不存在任何结果,则返回false

7.关闭释放资源

关闭顺序是后创建的对象要先关闭释放资源

8.ResultSet接口

常用方法:

next():将游标从当前位置向下移动一行

void close():关闭ResultSet 对象

getString、getInt、getfloat…(列名/列下标(从1开始)):当前行指定列号值

采用列名来标识列可读性强,且不容易出错

9.SQL注入攻击

10.PreparedStatement接口

避免SQL注入的隐患

PreparedStatement接口 (预编译的 SQL 语句) 提高SQL语句执行的性能

11.封装BaseDao

package com.dong.util;

import org.apache.log4j.Logger;

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

/**
 * @author xiaoDong
 * @version 1.0.0
 * @ClassName DBHelp.java
 * @Description TODO
 * @createTime 2022年11月10日 14:53:00
 */
public class BaseDao {
    private static final Logger logger = Logger.getLogger(DBHelp.class.getName());
    private static String DRIVER = null;
    //数据库连接地址
    private static String URL = null;
    private static String USER = null;
    private static String PWD = null;
    //连接数据库对象
    private static Connection conn = null;
    //操作指令对象
    private static PreparedStatement pstms = null;


    static {
        //资源放置在resources文件夹中,将该文件夹设置为资源文件夹
        String configFile = "database.properties";
        //获取配置文件写入到流中
        InputStream is = DBHelp.class.getClassLoader().getResourceAsStream(configFile);
        //读取配置文件
        Properties params = new Properties();
        try {
            params.load(is);
            //读取驱动
            DRIVER = params.getProperty("driver");
            //读取数据库地址
            URL = params.getProperty("url");
            USER = params.getProperty("user");
            PWD = params.getProperty("pwd");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //加载驱动
        try {
            Class.forName(DRIVER);
            logger.debug("驱动加载成功!");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 打开数据库
     */
    private static void openConn() {
        try {
            conn = DriverManager.getConnection(URL, USER, PWD);
            logger.debug("数据库连接成功!");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 返回结果集
     *
     * @param sql
     * @param params
     * @return
     */
    public static ResultSet getResult(String sql, Object[] params) {
        openConn();
        //对指令进行预编译
        try {
            pstms = conn.prepareStatement(sql);
            if (null != params) {
                for (int i = 0; i < params.length; i++) {
                    pstms.setObject(i + 1, params[i]);
                }
            }
            logger.debug("操作指令:" + sql);
            return pstms.executeQuery();

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 增删改
     *
     * @param sql
     * @param params
     * @return
     */
    public static int getRows(String sql, Object[] params) {
        openConn();
        try {
            pstms = conn.prepareStatement(sql);
            if (null != params) {
                for (int i = 0; i < params.length; i++) {
                    pstms.setObject(i + 1, params[i]);
                }
            }
            logger.debug("操作指令:" + sql);
            return pstms.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return -1;
    }

    /**
     * 释放资源
     *
     * @param rs
     */
    public static void closedAll(ResultSet rs) {
        try {
            if (null != rs) {
                rs.close();
            }
            if (null != pstms) {
                pstms.close();
            }
            if (null != conn) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值