Java JDBC操作MySQL

article/2025/8/21 5:58:25

DBMS里有多个数据库,每个库中又有多张表。
客户端有命令终端(DoS)、SQLyog、Java等。
Mysql数据库、普通表的本质仍然是文件。
表的一行称为一条记录,对应Java中的一个对象。

SQL语句的分类为
1、DDL数据定义语言 create 表、库
2、DML 数据操作语言 insert、delete、update
3、DQL 数据查询语言 select
4、DCL 数据控制语言 管理数据库 grant revoke(撤销权限)

备份数据库

备份数据库命令行为:在DoS中执行
mysqldump -u 用户名 -p -B数据库1 数据库2 数据库n > 文件名.sql

恢复数据库:需要进入MySQL命令行再执行
Source 文件名.sql(路径名) 例如D:\\back.sql

备份数据库中的表
mysqldump -u 用户名 -p -数据库 表1 表n > 文件名.sql(路径 例如:D:\\back.sql)

JDBC

JDBC是为了访问不同数据库提供了统一的接口,Java程序员可以使用JDBC连接任何提供了JDBC驱动程序的数据库系统,完成对数据库的操作。不同的数据库厂商编写不同的实现类。这些实现类也叫做数据驱动jar包。

java程序不直接操作数据库,只跟JDBC接口编程。不同的数据库厂商针对这些接口,实现不同的需求。相关类的接口主要在java.sql和javax.sql包中。

JDBC程序编写的步骤是
1、注册驱动 加载Driver类
2、获取连接 得到Connection
3、执行增删改查 发送SQL命令,给MySQL执行。
4、释放资源 关闭相关连接。
前置工作
首先需要在项目路径下,新建libs文件夹,用于存放jar包,然后右击jar包,选择最后一个选项。
在这里插入图片描述

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class JDBC_02 {// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URLstatic final String JDBC_DRIVER = "com.mysql.jdbc.Driver";static final String DB_URL = "jdbc:mysql://localhost:3306/demo";static final String USER = "root";static final String PASS = "123456";public static void main(String[] args) throws Exception{Class.forName(JDBC_DRIVER);//注册驱动 mysql5之后的驱动jar包可以省略这个步骤 Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);String sql = "insert into actor values(null,'刘德华','男','1970-11-11','110')";Statement statement = conn.createStatement();int i = statement.executeUpdate(sql);//i表示 如果是DML语句,则为影响的行数if (i>0){System.out.println("添加成功");}else {System.out.println("添加失败");}//关闭连接statement.close();conn.close();}
}
  • DriverManager数据库驱动管理对象 有两个功能1、注册驱动 2、获取数据库连接。
  • Connection数据库连接对象 1、获取执行sql的statement对象 2、管理事务
    开启事务 setAutoCommit 调用该方法,设置参数为false,即开启事务。
    提交事务 commit方法
    回滚事务 rollback方法
  • Statement执行sql的对象 方法 execute()方法 执行任意sql语句,不常用。 executeUpdate()执行DML语句、DDL语句,执行DML语句返回一个int值,表示影响的行数。(常用于判断DML语句是否执行成功,大于0则成功)。 executeQuery()执行DQL查询语句,返回一个结果集对象
import java.sql.*;
import java.sql.DriverManager;public class JDBC_01 {// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URLstatic final String JDBC_DRIVER = "com.mysql.jdbc.Driver";static final String DB_URL = "jdbc:mysql://localhost:3306/demo";static final String USER = "root";static final String PASS = "123456";public static void main(String[] args) {Statement stmt = null;//提升作用域Connection conn = null;//提升作用域try {Class.forName(JDBC_DRIVER);try {conn = DriverManager.getConnection(DB_URL,USER,PASS);String sql = "insert into actor values(null,'Mary','女','1999-11-11','220')";stmt = conn.createStatement();int i = stmt.executeUpdate(sql);//影响的的行数if (i>0){System.out.println("添加成功");}else {System.out.println("添加失败");}} catch (SQLException e) {e.printStackTrace();}} catch (ClassNotFoundException e) {e.printStackTrace();}finally {if (stmt != null){//防止空指针异常try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
}
  • ResultSet结果集对象
    next()游标向下移动一行。默认为表头行。返回一个bool值,判断当前行是否为最后一行末尾。如果是末尾,则返回false。
    getXxx(参数)为获取数据,Xxx为数据类型例如int、String等。参数可以为int,代表列的编号,从1开始,也可以为String,列的名称
import java.sql.*;
import java.sql.DriverManager;public class JDBC_03 {// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URLstatic final String JDBC_DRIVER = "com.mysql.jdbc.Driver";static final String DB_URL = "jdbc:mysql://localhost:3306/demo";static final String USER = "root";static final String PASS = "123456";public static void main(String[] args) {Statement stmt = null;//提升作用域Connection conn = null;//提升作用域ResultSet resultSet = null;try {Class.forName(JDBC_DRIVER);try {conn = DriverManager.getConnection(DB_URL,USER,PASS);String sql = "select * from actor";stmt = conn.createStatement();resultSet = stmt.executeQuery(sql);while (resultSet.next()){int anInt = resultSet.getInt(1);String string = resultSet.getString(2);System.out.println(anInt+" "+string);}} catch (SQLException e) {e.printStackTrace();}} catch (ClassNotFoundException e) {e.printStackTrace();}finally {if (resultSet != null){try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if (stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

案例:查询表中的数据,然后将其封装成对象(使用hashMap),返回。

import java.sql.*;
import java.sql.DriverManager;
import java.util.HashMap;public class JDBC_03 {// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URLstatic final String JDBC_DRIVER = "com.mysql.jdbc.Driver";static final String DB_URL = "jdbc:mysql://localhost:3306/demo";static final String USER = "root";static final String PASS = "123456";public static void main(String[] args) {Statement stmt = null;//提升作用域Connection conn = null;//提升作用域ResultSet resultSet = null;try {Class.forName(JDBC_DRIVER);try {conn = DriverManager.getConnection(DB_URL,USER,PASS);String sql = "select * from demo1";stmt = conn.createStatement();resultSet = stmt.executeQuery(sql);HashMap hashMap = new HashMap();while (resultSet.next()){int anInt = resultSet.getInt(1);String string = resultSet.getString(2);hashMap.put(anInt,string);}System.out.println(hashMap);} catch (SQLException e) {e.printStackTrace();}} catch (ClassNotFoundException e) {e.printStackTrace();}finally {if (resultSet != null){try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if (stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

抽取JDBC工具类JDBCUtils,作用减少代码的冗余度。

import java.io.FileReader;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;public class JDBCUtils {private static String url;private static String user;private static String password;private static String driver;static {//静态代码块,随着类的加载只执行一次,实现文件的读取操作。Properties pro = new Properties();try {pro.load(new FileReader("src/jdbc.properties"));url = pro.getProperty("url");user = pro.getProperty("user");password = pro.getProperty("password");driver = pro.getProperty("driver");try {Class.forName(driver);} catch (ClassNotFoundException e) {e.printStackTrace();}} catch (IOException e) {e.printStackTrace();}}//获取连接的工具包public static Connection getConnection() throws Exception{//不传递参数,使用配置文件的方法来解决。return DriverManager.getConnection(url,user,password);}//释放资源的方法public static void close(Statement stmt, Connection conn){if (stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}//方法的重载public static void close(Statement stmt, Connection conn, ResultSet res){if (stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}if (res != null){try {res.close();} catch (SQLException e) {e.printStackTrace();}}}
}

在这里插入图片描述

import java.sql.*;
import java.sql.DriverManager;
import java.util.HashMap;public class JDBC_04 {// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URLstatic final String JDBC_DRIVER = "com.mysql.jdbc.Driver";static final String DB_URL = "jdbc:mysql://localhost:3306/demo";static final String USER = "root";static final String PASS = "123456";public static void main(String[] args) {Statement stmt = null;//提升作用域Connection conn = null;//提升作用域ResultSet resultSet = null;try {try {conn = JDBCUtils.getConnection();String sql = "select * from demo1";stmt = conn.createStatement();resultSet = stmt.executeQuery(sql);HashMap hashMap = new HashMap();while (resultSet.next()){int anInt = resultSet.getInt(1);String string = resultSet.getString(2);hashMap.put(anInt,string);}System.out.println(hashMap);} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}} finally {JDBCUtils.close(stmt, conn, resultSet);}}
}

案例:键盘录入用户名和密码,判断用户是否登录成功

 java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;public class JDBC_05 {public static void main(String[] args) {Statement stmt = null;Connection conn = null;ResultSet res = null;try {conn = JDBCUtils.getConnection();stmt = conn.createStatement();Scanner scanner = new Scanner(System.in);String name = scanner.next();int pwd = scanner.nextInt();String sql = "select * from my_class where name = '"+name+"'and id = '"+pwd+"' ";res = stmt.executeQuery(sql);if (res.next()){System.out.println("登陆成功");}else {System.out.println("登陆失败");}} catch (Exception e) {e.printStackTrace();}finally {JDBCUtils.close(stmt,conn,res);}}
}
  • PreparedStatement

sql注入问题:在拼接sql时,有一些sql的特殊关键字(and、or)参与字符串的拼接,会造成安全性问题。解决的方法是使用PreparedStatement对象。

预编译的sql:参数使用?作为占位符。


http://chatgpt.dhexx.cn/article/3v8PARcv.shtml

相关文章

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

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

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

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

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

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

在Java中操作MySQL(JDBC)

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

java操作mysql数据库

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

用Java操作MySQL

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

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

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

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

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

如何对接身份证OCR?

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

实名二代身份证OCR识别

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

Opencv实现身份证OCR识别

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

身份证OCR实名认证接口

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

身份证OCR识别SDK

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

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

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

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

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

离线身份证OCR识别

离线身份证ocr识别简介 离线身份证ocr识别SDK可支持Android、iOS主流移动操作系统,android平台提供jar包,ios提供静态库.a文件。APP集成离线身份证ocr识别SDK后,用户采用手机、平板电脑对身份证进行拍摄识别即可自动识别身份证信息。 离线身…

身份证OCR识别

本文章来源于自己的学习图像处理以及识别过程中的一些经验,开发了一个OCR识别身份证程序,此程序虽不够完美但有一定的参考价值,CSDN上本人也将提供源代码,对身份证OCR识别整个过程的一个梳理。 程序依赖库,OpenCV3.20…

4款堪称手机神器的APP,每个都可以玩转手机,尤其是第三个

每个人的手机中都会一到两个永远不会卸载的APP,有些APP可以让你在工作中事半功倍,有些可以让你打发时间,并且还可以学习到不同的知识。下面就为大家介绍几个即可以娱乐还可以学习的APP。 一周计划 对于记忆力不好的小伙伴,可以在…

安卓手机软件开发_安卓最牛的下载神器,快收藏起来自己偷偷用

小编一直在想,有木有一款安卓手机电影下载神器让用户在一个手机 App 软件里,既能播放 BT 文件,又能下载网盘文件呢? 谁又不想要一个迅雷百度云网盘资源网站,三合一的手机电影下载神器呢? 其实小编很早就注意…

电脑复制手机粘贴神器-快贴使用方法

首先电脑下载快贴:https://home.clipber.com/index.html?styleorange 然后手机应用市场下载app:快贴(安卓苹果都可以下载) 回到电脑上把下载的软件安装好,用邮件注册登录,设置: 第二步点右下角任务栏 快…