IDEA使用JDBC连接数据库

本文深入解析了Java数据库连接技术(JDBC),介绍了其体系结构、API接口及驱动管理,演示了如何使用JDBC进行数据库连接、执行SQL语句并处理结果集,同时探讨了PreparedStatement在避免SQL注入风险方面的优势。
JDBC
  • Java DataBase ConnectivityJava数据库连接技术(一个接口),即用Java操作数据库
  • Java DataBase Connectivity:是一个独立于特定数据库的管理系统,通用的SQL数据库存取和操作的公共接口,定义了一组标准,为访问不同数据库提供了统一的途径
    在这里插入图片描述
JDBC体系结构

JDCB接口包括两个层面

  • JDBC API:面向应用的API,供程序员调用
  • JDBC Driver Manager:面向数据的API,供厂商开发数据库的驱动程序
    在这里插入图片描述
JDBC API
  • 提供者:Java官方
  • 内容:供开发者调用的接口

java.sqljavax.sql

  • DriverManager
  • Connection接口
  • Statement接口
  • ResultSet接口
DriverManager
  • 提供者:Java官方
  • 作用:管理不同的JDBC驱动
JDBC驱动
  • 提供者:数据库厂商
  • 作用:负责连接不同的数据库
JDBC的使用
  • 加载数据库驱动,Java程序和数据库之间的桥梁
  • 获取Connection,Java程序与数据库的一次连接
  • 创建Statement对象,由Connection产生,执行SQL语句
  • 如果需要接受返回值,创建ResultSet对象,保存Statement执行之后所查询到的结果
实际操作
  • 在Mysql下载jar包(或利用maven添加依赖)
  • 在IDEA中引入jar
    在这里插入图片描述
  • 创建一个lib把jar包复制过来
    在这里插入图片描述
  • 如图
    在这里插入图片描述
  • 可以找到Driver-导入成功
    在这里插入图片描述
  • 创建一个包zhi.test
    在这里插入图片描述
  • 创建一个类
    在这里插入图片描述
  • 加载驱动(手动加载):Driver(获取运行实类)
        try {
            //加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
  • IDEA连接mysql数据库
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 如果报错时间
set global time_zone = '+8:00';
  • 可以通过写sql语句来选表
use text;
select * from t_user

在这里插入图片描述

            //获取连接
            String url = "jdbc:mysql://localhost:3306/+访问数据库";
            //?useUnicode=true&characterEncoding=UTF-8可用来处理乱码
            //String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
  • 验证是否连接成功
            System.out.println(connection);

验证sql语句

            //获取连接
            String url = "jdbc:mysql://localhost:3306/dbtest01?useUniode=true&characterEncoding=UTF-8";
            String user = "root";
            String password = "yxz10010";
            Connection connection = DriverManager.getConnection(url,user,password);
            String sql = "insert into students(number,name,sex,age) values('1005','金生',1,30)";//添加字段
            System.out.println(sql);
            //注意这里添加data类型的字段是特殊的需要用+ new data(until) +
  • 具体代码
package zhi.test;

import java.sql.*;
import java.util.Date;

public class Test {
    public static void main(String[] args) {
        try {
            //加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //获取连接
            String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
            String user = "zhijiaxin";
            String password = "yxz10010";
            Connection connection = DriverManager.getConnection(url,user,password);
            /*添加语句
            String sql = "insert into student(name,score,birthday) values('张三',78.5,'2019-01-01')";
            Statement statement = connection.createStatement();
            statement.executeUpdate(sql);
            */
            /*更新语句
            String sql = "update student set name = '李四';
            Statement statement = connection.createStatement();
            statement.executeUpdate(sql);*/
            /*删除语句
            String sql = "delete from student";
            Statement statement = connection.createStatement();
            statement.executeUpdate(sql);
            */
            String sql = "select * from student";
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
            while(resultSet.next()){
                int id = resultSet.getInt("id");
                String name = resultSet.getString(2);
                Double score = resultSet.getDouble(3);
                Date date = resultSet.getDate(4);//注意这里的方法重载可以通过字段也可以通过index
                System.out.println(id+"-"+name+"-"+score+"-"+date);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e){
            e.printStackTrace();
        }
    }
}

PreparedStatement
  • Statement的子类,提供了SQL占位符的功能
  • 使用Statement进行开发有两个问题:
  • 需要频繁拼接String字符串,出错率较高
  • 存在SQL注入的风险
  • SQL注入:利用某些系统没有对用户输入的信息进行充分检测,在用户输入的数据中注入非法的SQL语句,从而利用系统的SQL引擎完成恶意行为的做法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值