java JDBC操作Mysql解析

article/2025/8/21 5:46:21

一. 概念:

Java DataBase Connectivity Java 数据库连接, Java语言操作数据库。JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

二.操作步骤:

            1. 导入驱动jar包
            2. 注册驱动
            3. 获取数据库连接对象 Connection
            4. 定义sql
            5. 获取执行sql语句的对象 Statement
            6. 执行sql,接受返回结果
            7. 处理结果
            8. 释放资源

三.代码实现:(查询)

package JDBC;import java.sql.*;public class my1 {public static void main(String[] args) throws ClassNotFoundException, SQLException {
//        注册驱动(musql5之后可以不写)Class.forName("com.mysql.cj.jdbc.Driver");
//        获取数据库链接对象Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/day17","用户名","密码");
//        定义SQLString sql="select * from user";
//获取执行对象Statement statement=connection.createStatement();
//        执行SQL
//        int i=statement.executeUpdate(sql);ResultSet re=statement.executeQuery(sql);
//        处理结果while (re.next()){int id=re.getInt(1);String name= re.getNString("name");String address= re.getNString("address");System.out.println(id+"---"+name+"---"+address);}
//        释放资源connection.close();statement.close();}
}

查询结果展示

四. 详解各个对象:

1. DriverManager:驱动管理对象
            * 功能:
                1. 注册驱动:告诉程序该使用哪一个数据库驱动jar
                    static void registerDriver(Driver driver) :注册与给定的驱动程序 DriverManager 。 
                    写代码使用:  Class.forName("com.mysql.jdbc.Driver");
                    通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块
                     static {
                            try {
                                java.sql.DriverManager.registerDriver(new Driver());
                            } catch (SQLException E) {
                                throw new RuntimeException("Can't register driver!");
                            }
                        }

                    注意:mysql5之后的驱动jar包可以省略注册驱动的步骤。
                2. 获取数据库连接:
                    * 方法:static Connection getConnection(String url, String user, String password) 
                    * 参数:
                        * url:指定连接的路径
                            * 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
                            * 例子:jdbc:mysql://localhost:3306/db3
                            * 细节:如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
                        * user:用户名
                        * password:密码 
        2. Connection:数据库连接对象
            1. 功能:
                1. 获取执行sql 的对象
                    * Statement createStatement()
                    * PreparedStatement prepareStatement(String sql)  
                2. 管理事务:
                    * 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
                    * 提交事务:commit() 
                    * 回滚事务:rollback() 
        3. Statement:执行sql的对象
            1. 执行sql
                1. boolean execute(String sql) :可以执行任意的sql 了解 
                2. int executeUpdate(String sql) :执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句
                    * 返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败。
                3. ResultSet executeQuery(String sql)  :执行DQL(select)语句
            2. 练习:
                1. account表 添加一条记录
                2. account表 修改记录
                3. account表 删除一条记录

                代码:
                    Statement stmt = null;
                    Connection conn = null;
                    try {
                        //1. 注册驱动
                        Class.forName("com.mysql.jdbc.Driver");
                        //2. 定义sql
                        String sql = "insert into account values(null,'王五',3000)";
                        //3.获取Connection对象
                        conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
                        //4.获取执行sql的对象 Statement
                        stmt = conn.createStatement();
                        //5.执行sql
                        int count = stmt.executeUpdate(sql);//影响的行数
                        //6.处理结果
                        System.out.println(count);
                        if(count > 0){
                            System.out.println("添加成功!");
                        }else{
                            System.out.println("添加失败!");
                        }
            
                    } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }finally {
                        //stmt.close();
                        //7. 释放资源
                        //避免空指针异常
                        if(stmt != null){
                            try {
                                stmt.close();
                            } catch (SQLException e) {
                                e.printStackTrace();
                            }
                        }
            
                        if(conn != null){
                            try {
                                conn.close();
                            } catch (SQLException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                
        4. ResultSet:结果集对象,封装查询结果
            * boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
            * getXxx(参数):获取数据
                * Xxx:代表数据类型   如: int getInt() ,    String getString()
                * 参数:
                    1. int:代表列的编号,从1开始   如: getString(1)
                    2. String:代表列名称。 如: getDouble("balance")
            
            * 注意:
                * 使用步骤:
                    1. 游标向下移动一行
                    2. 判断是否有数据
                    3. 获取数据

                   //循环判断游标是否是最后一行末尾。
                    while(rs.next()){
                        //获取数据
                        //6.2 获取数据
                        int id = rs.getInt(1);
                        String name = rs.getString("name");
                        double balance = rs.getDouble(3);
        
                        System.out.println(id + "---" + name + "---" + balance);
                    }

            * 练习:
                * 定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回。
                    1. 定义Emp类
                    2. 定义方法 public List<Emp> findAll(){}
                    3. 实现方法 select * from emp;
                        
        5. PreparedStatement:执行sql的对象
            1. SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题
                1. 输入用户随便,输入密码:a' or 'a' = 'a
                2. sql:select * from user where username = 'fhdsjkf' and password = 'a' or 'a' = 'a' 

            2. 解决sql注入问题:使用PreparedStatement对象来解决
            3. 预编译的SQL:参数使用?作为占位符
            4. 步骤:
                1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
                2. 注册驱动
                3. 获取数据库连接对象 Connection
                4. 定义sql
                    * 注意:sql的参数使用?作为占位符。 如:select * from user where username = ? and password = ?;
                5. 获取执行sql语句的对象 PreparedStatement  Connection.prepareStatement(String sql) 
                6. 给?赋值:
                    * 方法: setXxx(参数1,参数2)
                        * 参数1:?的位置编号 从1 开始
                        * 参数2:?的值
                7. 执行sql,接受返回结果,不需要传递sql语句
                8. 处理结果
                9. 释放资源

            5. 注意:后期都会使用PreparedStatement来完成增删改查的所有操作
                1. 可以防止SQL注入
                2. 效率更高

五,抽取JDBC工具类 :

* 目的:简化书写
    * 分析:
        1. 注册驱动也抽取
        2. 抽取一个方法获取连接对象
            * 需求:不想传递参数(麻烦),还得保证工具类的通用性。
            * 解决:配置文件
                jdbc.properties
                    url=
                    user=
                    password=
        3. 抽取一个方法释放资源


http://chatgpt.dhexx.cn/article/LSd5Kl6A.shtml

相关文章

java对mysql的简单操作——增加数据

java连接mysql5.1教程&#xff08;含代码&#xff09; 查询数据 下面是数据添加片段的代码 Connection conn null; Statement stmt null; PreparedStatement psnull;try{// 注册 JDBC 驱动Class.forName(JDBC_DRIVER);// 打开链接//连接数据库conn DriverManager.getConne…

Java和MySQL的连接和操作(JDBC)

一、数据库的连接 1. 引入JDBC驱动程序 1.1 如何获取驱动程序 驱动程序由数据库提供商提供下载。 MySQL 的驱动下载地址&#xff1a;http://dev.mysql.com/downloads/ 依次点击 Connector/J -> Platform Independent &#xff0c;如然后下载下面那个 1.2 如何在Java …

Java连接MySQL数据库具体操作

一&#xff0c;主要分为5个步骤 1&#xff0c;获取驱动 首先下载自己mysql版本的jar包 下载地址&#xff1a;MySQL :: Download Connector/J 将下载好的jar包复制到jdk的安装目录下的jre下的lib下的ext目录下 mysql.5及以下的版本获取驱动是Class.forName("com.mysql.jdb…

MySQL学习(五)JDBC 使用java操作数据库

目录 1.JDBC基本原理 2.数据库驱动包的导入&#xff08;环境配置&#xff09; 3.JDBC的使用步骤 4.JDBC的常用接口和抽象类 5.核心小结&#xff1a; 1.JDBC基本原理 现在&#xff0c;要使用java操作数据库&#xff0c;则我们的项目的构建或者说代码的组成增加为了三方&…

Java JDBC操作MySQL

DBMS里有多个数据库&#xff0c;每个库中又有多张表。 客户端有命令终端(DoS)、SQLyog、Java等。 Mysql数据库、普通表的本质仍然是文件。 表的一行称为一条记录&#xff0c;对应Java中的一个对象。 SQL语句的分类为 1、DDL数据定义语言 create 表、库 2、DML 数据操作语言 in…

Java对MySQL数据库进行操作【java】

数据库几乎是每一个应用型的程序都会用到&#xff0c;学会如何高效操作数据库也是开发一个重点。今天我总结了具体的操作步骤以及注意点。Java访问数据库主要用的方法是JDBC&#xff0c;它是java语言中用来规范客户端程序如何来访问数据库的应用程序接口&#xff0c;提供了诸如…

Java 中使用 MySql以及一些Mysql 基本的命令

Linux mint 环境下配置 mysql 打开终端输入 sudo apt-get install mysql-server,回车即可安装 mysql&#xff0c;当然如果你想使用最新的 mysql&#xff0c;可以去官方下载并且配置&#xff0c;教程网上有很多&#xff0c;就不再赘述。 安装完成之后&#xff0c;在终端中输入…

【java对MySQL的操作详解】java学习之增查

文章目录 前言一&#xff0c;封装JDBC二&#xff0c;增2.1&#xff0c;UserDAO.java2,2&#xff0c;UserServier.java2,3&#xff0c;userUI.java添加用户 三&#xff0c;查3.1&#xff0c;UserUI伪iu3.2&#xff0c;UserServier.java3.3&#xff0c;UserDAO.java END 前言 具…

在Java中操作MySQL(JDBC)

准备工作 ideamysql 官方的 jdbc 驱动 先在 idea 中建立一个新的 java 工程 直到这一步之前&#xff0c;一直按下一步就行了 把名字改改直接 finish 在这个工程下面建立一个名字为 lib 的空文件夹 去官方下载依赖的包 https://dev.mysql.com/downloads/connector/j/ 选…

java操作mysql数据库

java操作mysql数据库 学习到数据库操作这一章&#xff0c;遇到了很多问题&#xff0c;只能说无论什么时候&#xff0c;用什么工具来操作数据库&#xff0c;都不是一件简单的事情。 简单记录一下 数据库连接 先看代码界面 要连接数据库&#xff0c;首先需要导入mysql依赖包&…

用Java操作MySQL

用Java操作MySQL目录 一、创建数据库1、建库2、建表 二、开始准备jdbc1、导入mysql驱动jar包2、开始写jdbc代码 三、那就运行吧附&#xff1a;最终代码DBUtilMaindb.properties 一、创建数据库 打开Navicat&#xff08;我用的是DataGrip&#xff09;的查询控制台 1、建库 sq…

c++ opencv 身份证OCR识别:前期数据训练库准备(tesseractOCR)

前言&#xff1a;本文已经在个人博客更新排版和讲解【传送门】 整个教程已经在有道云写好了&#xff0c;在博客要重新把每个图片再上传一次有点累&#xff0c;先截了图直接看吧&#xff01;如果有需要有提供word版本可以下载 https://download.csdn.net/download/stopping5/11…

身份证正反面识别,身份证扫描识别,二代身份证OCR识别,OCR极速识别身份证所有信息正反面均可。离线无需联网,极速秒扫。

项目说明 极速识别二代身份证、驾驶证、护照 (无需联网&#xff0c;离线秒扫&#xff0c;极速识别)身份证所有信息, 包含姓名、性别、出生年月、详细地址&#xff0c;正反面。不需要联网即可离线识别身份证所有信息包括新疆少数民族身份证&#xff0c;识别速度快&#xff0c;识…

如何对接身份证OCR?

【身份证OCR文字识别】身份证OCR识别-身份证识别-身份证-OCR文字-身份证OCR文字-身份证OCR-身份证OCR图像识别【最新版】_图像识别_身份证识别_OCR-云市场-阿里云 身份证OCR免费体验 Java代码如下 public static void main(String[] args) {String host "https://idcar…

实名二代身份证OCR识别

在银行、信用社、航空、保险、电信等部门单位办理手续或证件时&#xff0c;常需要身份证件&#xff0c;但业务人员手工录入速度慢、办公效率太低是一大亟需解决的问题&#xff0c;通常要先通过扫描或拍照&#xff0c;来获取身份证上面的头像&#xff0c;然后再手工填写用户的身…

Opencv实现身份证OCR识别

Opencv 配置IDEA可参考&#xff1a;https://blog.csdn.net/zwl18210851801/article/details/81075781 opencv位置&#xff1a; OpencvUtil类&#xff1a; package com.x.common.utils;import org.opencv.core.*; import org.opencv.core.Point; import org.opencv.imgcodecs.…

身份证OCR实名认证接口

人工智能&#xff0c;身份证&#xff0c;OCR实名验证 一、接口介绍 自动识别及快速提取二代居民身份证正反面所有字段&#xff0c;包括姓名、性别、民族、出生日期、住址、身份证号、签发机关、有效期限&#xff0c;实时联网核查校验是否一致。对URL网络图片或base64信息进行…

身份证OCR识别SDK

一、身份证OCR识别SDK应用背景 随着Android、IOS智能手机的普及&#xff0c;5G通信技术的发展&#xff0c;移动互联迎来了爆发式增长&#xff0c;越来越多的公司都推出了自己的移动APP、小程序等应用。这些应用多数都涉及到个人身份证信息的输入认证&#xff08;即实名认证&…

阿里云智能身份证OCR文字识别

智能身份证OCR文字识别 做的项目里面涉及到了身份证识别输入的真实姓名与身份证号码是否匹配功能&#xff0c;于是在阿里云接了智能身份证OCR文字识别API&#xff0c;登录阿里云找到对应的产品&#xff0c;如下图 购买使用然后生成对应的APPcode。 使用的demo有蛮多&#xff0c…

如何用 身份证OCR 接口进行快速开发

最近公司项目有一个身份证文字识别的小需求&#xff0c;想着如果用现成的API就可以大大提高开发效率&#xff0c;在网上的API商店搜索了一番&#xff0c;发现了 APISpace&#xff0c;它里面的身份证OCR非常符合我的开发需求。 身份证OCR&#xff0c;传入身份证照片&#xff0c…