首页 > 数据库 >JDBC连接mysql进行curd操作

JDBC连接mysql进行curd操作

时间:2024-11-02 09:48:18浏览次数:7  
标签:JDBC String connection resultSet System curd mysql println out

使用JDBC连接mysql数据库

一.JDBC是什么

JDBC(Java Database Connectivity) Java 连接数据库的规范(标准),可以使用 Java 语言连接数据库完成 CRUD 操作。

二.导入maven依赖

<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.29</version>
</dependency>

三.注册驱动

注册驱动就是将sql语句的运行环境加载到jvm

mysql8.0及8.0之后

Class.forName("com.mysql.cj.jdbc.Driver");

mysql8.0之前

Class.forName("com.mysql.jdbc.Driver");

四.获取数据库连接对象

通过DriverManager对象的getConnection方法获取Connection对象,即数据库连接对象

url:数据库链接地址

username:数据库用户名

password:数据库密码

String url = "jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "1234";
Connection connection = DriverManager.getConnection(url, username, password);

五.获取SQL语句执行对象

通过Connection对象的createStatement方法获取Statement对象,用来访问数据库

Statement statement = connection.createStatement();

六.执行SQL语句

1.增删改操作

使用Statement对象的executeUpdate方法执行

 String sql = "insert into tb_user values('3','Sethos','123456','1234','2020-01-01',200000,2)";
 statement.executeUpdate(sql);

关流

statement.close();
connection.close();

完整代码

 public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
            String username = "root";
            String password = "1234";
            connection = DriverManager.getConnection(url, username, password);
            statement = connection.createStatement();
            String sql = "insert into tb_user values('3','Sethos','123456','1234','2020-01-01',200000,2)";
            statement.executeUpdate(sql);
        } catch (SQLException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                statement.close();
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }

2.查询操作

创建ResultSet结果集,使用Statement对象的executeQuery方法执行SQL语句,返回ResultSet类型

String sql = "select * from tb_user where id = " + 1; 
ResultSet resultSet = statement.executeQuery(sql);

ResultSet提供了几个方法

boolean next():判断集合是否有下一行数据

int getInt(String columnLabel):取出int类型数据

double getDouble(String columnLabel):取出double类型数据

Date getDate(String columnLabel):取出Date类型数据

String getInt(String columnLabel):取出String类型数据

获取查询的数据

 while (resultSet.next()){
        int id = resultSet.getInt("id");
        String user = resultSet.getString("username");
        String pass = resultSet.getString("password");
        String phone = resultSet.getString("phone");
        Date createTime = resultSet.getDate("create_time");
        double money = resultSet.getDouble("money");
        int sex = resultSet.getInt("sex");
        System.out.println("id = " + id);
        System.out.println("user = " + user);
        System.out.println("pass = " + pass);
        System.out.println("phone = " + phone);
        System.out.println("createTime = " + createTime);
        System.out.println("money = " + money);
        System.out.println("sex = " + sex);
        System.out.println("---------------------------");
}

关流

resultSet.close();
statement.close();
connection.close();

完整代码

public static void main(String[] args) {
    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
        String username = "root";
        String password = "1234";
        connection = DriverManager.getConnection(url, username, password);
        statement = connection.createStatement();
        String sql = "select * from tb_user where id = " + 1;
        resultSet = statement.executeQuery(sql);
        while (resultSet.next()){
            int id = resultSet.getInt("id");
            String user = resultSet.getString("username");
            String pass = resultSet.getString("password");
            String phone = resultSet.getString("phone");
            Date createTime = resultSet.getDate("create_time");
            double money = resultSet.getDouble("money");
            int sex = resultSet.getInt("sex");
            System.out.println("id = " + id);
            System.out.println("user = " + user);
            System.out.println("pass = " + pass);
            System.out.println("phone = " + phone);
            System.out.println("createTime = " + createTime);
            System.out.println("money = " + money);
            System.out.println("sex = " + sex);
            System.out.println("---------------------------");
        }
    } catch (ClassNotFoundException | SQLException e) {
        throw new RuntimeException(e);
    } finally {
        try {
            resultSet.close();
            statement.close();
            connection.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

七.SQL注入

之前的条件查询语句存在一个隐患,如果用户输入 or 1=1

String sql = "select * from tb_user where username = " + 1 + " and password = " + 1 + " or 1=1";

那么执行结果就是

id = 1
user = Sigewinne
pass = 123456
phone = 1111
createTime = 2000-01-01
money = 100.0
sex = 2
---------------------------
id = 3
user = Sethos
pass = 123456
phone = 1234
createTime = 2020-01-01
money = 200000.0
sex = 2
---------------------------
id = 7
user = Kachina
pass = 123456
phone = null
createTime = null
money = 0.0
sex = 0
---------------------------

因此即使用户输入的用户名和密码是错误的也可以登录进去,如果用户输入了删库语句等会造成更加严重的后果

避免SQL注入可以使用预编译处理

八.预编译处理

使用PreparedStatement进行预编译处理

先写SQL语句,使用?代替原来拼接参数的地方

String sql = "select * from tb_user where username = ? and password = ?";

使用PreparedStatement预编译处理SQL语句

PreparedStatement preparedStatement = connection.prepareStatement(sql);

为占位符传递参数值,需要传什么类型的参数,就使用对应的方法,(setInt,setString等)

preparedStatement.setString(1,"Sigewinne");
preparedStatement.setString(2,"123456");

执行SQL语句

resultSet = preparedStatement.executeQuery();

关流

resultSet.close();
preparedStatement.close();
connection.close();

完整代码

public static void main(String[] args) {
    Connection connection = null;
    Statement statement = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
        String username = "root";
        String password = "1234";
        connection = DriverManager.getConnection(url, username, password);
        statement = connection.createStatement();
        String sql = "select * from tb_user where username = ? and password = ?";
        preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,"Sigewinne");
        preparedStatement.setString(2,"123456");
        resultSet = preparedStatement.executeQuery();
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String user = resultSet.getString("username");
            String pass = resultSet.getString("password");
            String phone = resultSet.getString("phone");
            Date createTime = resultSet.getDate("create_time");
            double money = resultSet.getDouble("money");
            int sex = resultSet.getInt("sex");
            System.out.println("id = " + id);
            System.out.println("user = " + user);
            System.out.println("pass = " + pass);
            System.out.println("phone = " + phone);
            System.out.println("createTime = " + createTime);
            System.out.println("money = " + money);
            System.out.println("sex = " + sex);
            System.out.println("---------------------------");
        }
    } catch (ClassNotFoundException | SQLException e) {
        throw new RuntimeException(e);
    } finally {
        try {
            resultSet.close();
            preparedStatement.close();
            connection.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

使用预编译处理同样可以进行增删改操作,增删改同样使用executeUpdate方法执行SQL语句

标签:JDBC,String,connection,resultSet,System,curd,mysql,println,out
From: https://blog.csdn.net/qq_38930254/article/details/143446307

相关文章

  • 如何在 MySQL 中创建一个完整的数据库备份?
    在MySQL数据库中创建一个完整的数据库备份通常不是通过编程语言直接实现的,而是借助MySQL提供的命令行工具mysqldump来完成。作为Java开发者,我们可以编写脚本来调用这些工具,从而实现自动化备份。下面我们将详细介绍如何使用Java来调度mysqldump工具进行数据库备份。创建数据......
  • Mysql的行锁,改一行锁一行
    目录标题前言行级锁1.共享锁(SharedLock)2.排他锁(ExclusiveLock)行级锁中的死锁(DeadLock)现象行级锁虽好,但有时候会升级成表级锁第一种情况,当未命中索引时,行级锁会升级成表级锁。......
  • 面试官:通过Mysql查询的时候,为什么有时候即使查询一条数据也很慢呢?
    目录标题1.明明现在执行得很快,为什么还是会被慢日志所记录呢?一、flush数据(底层架构讲起)......
  • 一文搞懂JDBC全流程(含MySQL安装和JDK下载)
    前言:1.了解问题1:什么是JDBC?JDBC全称:JavaDatabaseConnectivity,即Java数据库连接JDBC是Java提供的一组独立于任何数据库管理系统的API。Java提供接口规范,由各个数据库厂商提供接口的实现,厂商提供的实现类封装成jar文件,也就是数据库驱动jar包。学习JDBC,充分体现了面向接口......
  • Java项目实战II基于Java+Spring Boot+MySQL的工程教育认证的计算机课程管理平台(源码+
    目录一、前言二、技术介绍三、系统实现四、文档参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着工程教育认证的深入发展,对计算机课程......
  • Java项目实战II基于Java+Spring Boot+MySQL的植物健康系统(开发文档+数据库+源码)
    目录一、前言二、技术介绍三、系统实现四、文档参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言基于Java、SpringBoot和MySQL的植物健康......
  • 零基础3分钟快速入门MYSQL关系数据库1
    MySQL的语法规范1.不区分大小写,但建议关键字大写,表名、列名小写2.每条命令最好用分号结尾3.每条命令根据需要,可以进行缩进或换行4.注释ctrl+/单行注释:#注释文字  单行注释:--注释文字  多行注释:/*注释文字*/1.安装mysql、安装navicat2.navicat连接mysql(1)打......
  • 零基础3分钟快速入门MYSQL关系数据库2【1-6见上篇】
    1-6点此链接→  零基础3分钟快速入门MYSQL【1-6】7、数据操作1、插入数据:insertinto表名(字段名1,字段名2....) values(字段对应的值1,字段对应的值2,.......),(字段对应的值1,字段对应的值2,.......);2、修改数据:update表名set 字段名1=新的数据值,字段......
  • Mysql学习笔记4--用户权限
    Mysql学习笔记4--用户权限新建用户root登陆ssh登陆服务器,然后以root账户登陆Mysql。sudomysql-uroot-p创建新用户CREATEUSER'John_Lennon'@'%'IDENTIFIEDBY'Beatles!666';创建一个新用户John_Lennon,密码为Beatles!666。其中@后面的%代表可以从任意IP登陆此账......
  • 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现四
    一、前言介绍:1.1项目摘要随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势。传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速、便捷需求。这些问题不仅影响了快递服务的效率,也增加了快递员和消费者的不便。在这样的背景下,快递柜......