java数据库建立连接(JDBC)

目录

一.关于JDBC

[1.JDBC(java DataBase Connectivity)](#1.JDBC(java DataBase Connectivity))

2.JDBC的本质:

3.为什么要使用JDBC

二.连接步骤

1.在项目添加jar文件

[2.加载驱动类 Class.forName("com.mysql.cj.jdbc.Driver");](#2.加载驱动类 Class.forName("com.mysql.cj.jdbc.Driver");)

3.建立与数据库的连接,获得连接对象

4.发送sql

三.实现及分析

[PreparedStatement和Statement 区别](#PreparedStatement和Statement 区别)

关闭与数据库连接


一.关于JDBC

1.JDBC(java DataBase Connectivity)

java语言连接数据库。

2.JDBC的本质:

JDBC是一套接口(面向接口写实现类,能够解耦合,提高代码的扩展力,因为每个数据库底层的实现原理是不同的,如果没有接口 访问不同数据库就要不同的代码。

jdbc驱动: 所有的数据库连接的驱动都以 jar包存在(里面是.class) ,有很多的 .class文件他们是对JDBC接口的实现类 由数据库厂商提供连接相应的数据库 官网下载 。

3.为什么要使用JDBC

有了JDBC,java开发人员只需要编写一次程序,就可以访问不同的数据库.
J a v a A P I 中 提 供 了 操 作 数 据 库 的 标 准 接 口 , 最 终 由 不 同 的 数 据 库 开 发 商 实 现 这 些 标 准 接 口 来 对 数 据 库 操 作 . Java定义者制定了JDBC规范,数据库开发商实现接口, 程序员。

二.连接步骤

1.在项目添加jar文件

2.加载驱动类 Class.forName("com.mysql.cj.jdbc.Driver");

3.建立与数据库的连接,获得连接对象

String url = "jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
String user = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url,user,password);

4.发送sql

Statement st = connection.createStatement();
st.executeUpdate("INSERT INTO student(NAME,num,gender,birthday,phone,address,reg_time,majorid)" +
"VALUES('"+name+"','"+gender+"','"+birthday+"','"+phone+"','"+address+"',now(),"+majorid+")");
PreparedStatement ps = connection.prepareStatement("delete from student where num=?");
ps.setObject(1,num);
ps.executeUpdate();

举例:

java 复制代码
import java.sql.*;
import java.util.Collection;

public class Demo1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
       // 加载驱动类
        Class.forName("com.mysql.cj.jdbc.Driver");

        //建立与数据的链接
        String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";
        String user="root";
        String account="root";
        Connection connection= DriverManager.getConnection(url,user,account);
         //发送
        Statement statement=connection.createStatement();
        statement.executeUpdate("insert into course(name) values ('数学')");
                    
        statement.close();
        connection.close();
    }
}

使用此代码实现向mysql的course表的名称中插入数学数据

三.实现及分析

java 复制代码
import java.sql.*;

public class Demo2 {
    public static void main(String[] args)  {
       Demo2 demo2=new Demo2();
        try {
            try {
                //demo2.send("力宏","女","2002-05-06","11111111111","汉中","now()",3);
                demo2.updete("李洪","男","西安");
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    public void send(String name,String gender,String birthday,String phone,String address,String reg_time,int id) throws ClassNotFoundException, SQLException {
      // 加载驱动类
        Class.forName("com.mysql.cj.jdbc.Driver");
        //建立连接
        String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";
        String user="root";
        String account="root";
        Connection connection= DriverManager.getConnection(url,user,account);
        //发送
        Statement statement=connection.createStatement();
        statement.executeUpdate("insert into student(name,gender,birthday,phone,address,reg_time,id)values('"+name+"','"+gender+"','"+birthday+"','"+phone+"','"+address+"',now()),'"+3+"'");
    }
    public  void updete(String name,String gender,String address) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");

        String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";
        String user="root";
        String account="root";
        Connection connection= DriverManager.getConnection(url,user,account);

        Statement statement=connection.createStatement();
        statement.executeUpdate("update student set name='"+name+"',gender='"+gender+"',address='"+address+"'");
        connection.close();
        statement.close();
    }

}
java 复制代码
import java.sql.*;

public class Demo3 {
    public static void main(String[] args) {
        try {
            //update("朱磊","女",6);
            try {
                delete(1);
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    public static void update(String name,String gender,int num) throws ClassNotFoundException, SQLException {
        // 加载驱动类
        Class.forName("com.mysql.cj.jdbc.Driver");

        //建立与数据的链接
        String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";
        String user="root";
        String account="root";
        Connection connection= DriverManager.getConnection(url,user,account);
        //发送
        //预先编译
       PreparedStatement p=connection.prepareStatement("update student set name=?,gender=?where num=?");
       p.setObject(1,name);
       p.setObject(2,gender);
       p.setObject(3,num);

       p.executeUpdate();
        connection.close();
        p.close();
    }/*
    PreparedStatement与Statement区别
     PreparedStatement相比Statement简单,安全,先用?占位再用setObject方法赋值,不用拼接字符串,安全,在赋值时先进行检测
    */
    public static void delete(int num) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";
        String user="root";
        String account="root";
        Connection connection=DriverManager.getConnection(url,user,account);
        PreparedStatement p=connection.prepareStatement("delete from student where num=?");
         p.setObject(1,num);
         p.executeUpdate();

         connection.close();
         p.close();
    }
}

使用Statement发送sql要拼接字符串不安全,所以大多数使用PreparedStatement

PreparedStatement和Statement 区别

相同点: 都是向数据库发送sql
Statement: 将参数直接拼接到sql中, 要拼接字符串,写起来麻烦, 安全性差, 可以在参数中拼接 or 1=1

PreparedStatement : 先用?占位, 然后通过setObject方法赋值, 写起来不用拼接字符串, 安全可靠的, 在赋值时进行检测,可以防止sql注入攻击。

关闭与数据库连接

rs.close();

ps.close();

connection.close();

相关推荐
阿里云大数据AI技术25 分钟前
鹰角网络基于阿里云EMR Serverless StarRocks的实时分析工程实践
数据库·数据分析
久笙&39 分钟前
对象存储解决方案:MinIO 的架构与代码实战
数据库·python·架构
L2ncE44 分钟前
高并发场景数据与一致性的简单思考
java·后端·架构
武昌库里写JAVA1 小时前
使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程
java·vue.js·spring boot·sql·学习
小指纹1 小时前
河南萌新联赛2025第(六)场:郑州大学
java·开发语言·数据结构·c++·算法
叶~璃1 小时前
云计算:企业数字化转型的核心引擎
java
码luffyliu1 小时前
MySQL:MVCC机制及其在Java秋招中的高频考点
java·数据库·mysql·事务·并发·mvcc
程序员鱼皮1 小时前
这套 Java 监控系统太香了!我连夜给项目加上了
java·前端·ai·程序员·开发·软件开发
水涵幽树1 小时前
MySQL 时间筛选避坑指南:为什么格式化字符串比较会出错?
数据库·后端·sql·mysql·database
岁忧1 小时前
(nice!!!)(LeetCode 每日一题) 1277. 统计全为 1 的正方形子矩阵 (动态规划)
java·c++·算法·leetcode·矩阵·go·动态规划