MySQL数据库JDBC编程详解流程

目录
  • 一、数据库编程的必备条件
  • 二、Java的数据库编程:JDBC
  • 三、JDBC工作原理
  • 四、JDBC开发步骤
  • 五、JDBC操作步骤
  • 六、优化JDBC的部分代码
    • 1.获取数据库连接对象
    • 2.操作命令对象Statement
    • 3.ResultSet对象
    • 4.总结

一、数据库编程的必备条件

编程语言: 如Java、C++、C、Python等

数据库: 如Oracle、MySQL、SQL Server等

数据库驱动包: 不同的数据库,要使用编程语言来操作时,就需要使用该数据库厂商提供的数据库驱动包。

如:MySQL提供了Java的驱动包mysql-connector-java,需要基于java操作MySQL即需要该驱动包。同样的,要基于java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。

二、Java的数据库编程:JDBC

JDBC,即Java Database Connectivity,java数据库连接,是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。 这个API由java.sql. *, javax.sql. * 包中的一些类和接口组成,它为java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

三、JDBC工作原理

JDBC为多种关系数据库提供了统一访问方式。作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。

JDBC访问数据库层次结构:

我们使用一套JDBC编码,在切换数据库之后,Java操作数据库的代码可以不动(几乎),数据库驱动包要调整,sql因为有标准sql的部分,还有数据库相关的关键字,如mysql中的limit等,这些也需要调整。

JDBC优势:

Java语言访问数据库操作完全面向抽象接口编程

开发数据库应用不用限定在特定的数据库厂商的API

为Java操作不同的数据库提供一种统一的规范,程序在不同数据库的可移植性大大增强

四、JDBC开发步骤

1.创建一个普通的Java项目

2.下载mysql的驱动包

下载驱动包网址

我用的是5.1.xx版本的,说明:不同版本的数据库驱动包,里边的类/接口可能不同

3.项目中添加数据库驱动包(依赖)

验证:写Java代码,可以使用mysql驱动包中的类/接口,才表示引入的依赖没有问题。

4.测试:连接数据库

注意:

1.一开始我们写入forName时会飘红,这里先不用管,直接抛出异常。 alt+enter出现以下的界面,点击第一个:

2.获取数据库连接:Connection接口,需要使用jdbc中的,不要使用mysql中的

3.MySQL数据连接的URL参数格式如下:

jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值

//加载JDBC驱动程序:反射的方式,这样调用初始化com.mysql.jdbc.Driver类,
//即将该类加载到JVM方法区,并执行该类的静态方法块,静态属性
//数据库驱动包就可以在这种操作下,执行对应的初始化工作(驱动)
Class.forName("com.mysql.jdbc.Driver");
//获取数据库连接:Connection接口,需要使用jdbc中的,不要使用mysql中的
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/kang?" +
                "user=root&password=010124&useUnicode=true&characterEncoding=UTF-8&useSSL=false");

五、JDBC操作步骤

1.获取数据库连接对象

Connection(jdbc中的接口)

2.使用数据库连接对象来创建一个操作命令对象Statement,该对象是进行sql操作的抽象出来的对象

//通过连接对象创建操作命令对象Statement(使用jdbc中的),该对象是用于操作sql的一个抽象的对象
Statement s=conn.createStatement();

3.调用操作命令对象的方法来执行sql 查询:executeQuery 更新操作(插入、修改、删除):executeUpdate,返回值int,表示执行成功了几条

//更新操作:调用executeUpdate方法,插入,修改,删除都是
int n=s.executeUpdate("update exam_result set math=60 where id=1");
System.out.println("修改成功的数量:"+n);

4.如果是查询操作,需要处理结果集对象 查询,返回ResultSet结果集对象,这个结果集对象类似于数据结构中List<Map<String,Object>>

//查询:
//(1)调用Statement操作命令对象的executeQuery(sql)
//(2)返回一个ResultSet结果集对象(查询sql执行的结果集)
ResultSet r=s.executeQuery("select id,name,chinese,math,english from exam_result where id>3");
//处理结果:结果集可能是多行数据,需要遍历来获取
//调用next就移动到下一行,返回true代表改行有数据,返回false代表该行没有数据
while(r.next()){//一直遍历到最后
    //进入循环,代表操作遍历的一行数据
    int id=r.getInt("id");
    String name=r.getString("name");
    int chinese=r.getInt("chinese");
    int math=r.getInt("math");
    int english=r.getInt("english");
    System.out.printf("id=%s,name=%s,chinese=%s,math=%s,english=%s\n"
    ,id,name,chinese,math,english);
        }

运行结果:

注解:

5.释放资源 无论jdbc操作成功,还是出现异常,都需要释放资源,要考虑出现异常对象还没有完成初始化,还是null的情况,需要反向释放资源。

public class JDBC {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Connection conn =null;
        Statement s=null;
        ResultSet r=null;
        try{
            //之前写过的所有程序放到try里边
        }finally{//无论如何,都要释放资源
            //释放资源:
            //(1)无论什么情况(异常)
            //(2)释放的顺序,和创建的顺序要相反
            //(结果集对象,操作命令对象,数据库连接对象)
            if(r!=null){
                r.close();
            }
            if(s!=null){
                s.close();
            }
            if(conn!=null){
                conn.close();
            }
        }
    }
}

六、优化JDBC的部分代码

1.获取数据库连接对象

Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:

1.一种是通过DriverManager(驱动管理类)的静态方法获取 也就是上面我们提到的方法。

2.一种是通过DataSourse(数据源/数据库连接池)对象获取。实际应用中会使用DataSourse对象。

//先创建数据库连接池,再通过连接池获取数据库连接对象
DataSource ds=new MysqlDataSource();
//创建数据库连接池:初始化时,就会创建一定数量的数据库连接,这些连接对象可以重复使用,效率更高
//整个url带参数可以只使用setURL方法,也可以用参数调用方法的方式来设置
((MysqlDataSource)ds).setURL("jdbc:mysql://localhost:3306/kang");
((MysqlDataSource)ds).setUser("root");
((MysqlDataSource)ds).setPassword("010124");
((MysqlDataSource)ds).setUseUnicode(true);
((MysqlDataSource)ds).setCharacterEncoding("UTF-8");
((MysqlDataSource)ds).setUseSSL(false);
conn = ds.getConnection();
System.out.println(conn);

两者区别:

1.DriverManager类来获取的Connection连接,是无法重复利用的,每次使用完以后释放资源时,通过Connection.close()都是关闭物理连接

2.DataSourse提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些链接是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将Connection连接对象回收。效率更高。

2.操作命令对象Statement

Statement对象主要是将SQL语句发送到数据库中,JDBC API中主要提供了三种Statement对象。

Statement: 用于执行不带参数的简单SQL语句(简单的操作命令对象)

PreParedStatement:(预编译的操作命令对象)

用于执行带或者不带参数的SQL语句

SQL语句会预编译在数据库系统

执行速度快于Statement对象

CallableStatement: 用于执行数据库存储过程的调用(存储过程的操作命令对象) 存储过程:就是写一段sql代码,里边可以写变量,循环,条件判断等等。

查询操作:

s = conn.createStatement();
//查询:模拟在页面上,输入学生姓名来搜索学生
//(1)调用Statement操作命令对象的executeQuery(sql)
//(2)返回一个ResultSet结果集对象(查询sql执行的结果集)
String queryName="孙权";//能正常查询的输入
//(1)调用Statement操作命令对象的executeQuery(sql)
//(2)返回一个ResultSet结果集对象(查询sql执行的结果集)
String sql="select id,name,chinese,math,english from exam_result where name='"+queryName+"'";
System.out.println(sql);
r = s.executeQuery(sql);
while (r.next()) {//一直遍历到最后
    //进入循环,代表操作遍历的一行数据
    int id = r.getInt("id");
    String name = r.getString("name");
    int chinese = r.getInt("chinese");
    int math = r.getInt("math");
    int english = r.getInt("english");
    System.out.printf("id=%s,name=%s,chinese=%s,math=%s,english=%s\n", id, name, chinese, math, english);
    }

输出结果:

但是这里有一个现象: 如果我们把这里的queryName改为“skdj’ or ‘1’='1”,在拼接sql字符串时,就可能出现安全问题。 输出结果为:

后面的‘1’=‘1’是一个恒为真的条件,所以就会造成整个or条件结果为真,输出所有成员。 要解决以上安全问题,需要调整以上操作命令对象那个为PreparedStatement,并且使用占位符。

//要解决以上安全问题,需要调整以上操作命令对象那个为PreparedStatement
String queryName="skeij' or '1'='1";
int queryId=6;
//准备一个带?占位符的sql
String sql="select id,name,chinese,math,english from exam_result where name=? or id=?";
ps=conn.prepareStatement(sql);//创建预编译的操作命令对象
//替换占位符:调用setXXX方法,第一个参数,表示第几个占位符(从1开始),第二个参数,表示要替换的值
ps.setString(1,queryName);//替换的值是什么类型,就调用setXXX方法
ps.setInt(2,queryId);

//执行sql,需要使用无参的方法
r=ps.executeQuery();

输出结果为:

插入操作:

int queryId=7;
String queryName="图图";
int chinese=60;
int math=98;
int english=79;
String sql="insert into exam_result values(?,?,?,?,?)";
ps=conn.prepareStatement(sql);
ps.setInt(1,queryId);
ps.setString(2,queryName);
ps.setInt(3,chinese);
ps.setInt(4,math);
ps.setInt(5,english);

//executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update,insert,delete语句。
int ret=ps.executeUpdate();
System.out.println(ret);

其余的删除,更新操作都与上面类似,这里不再过多演示。

3.ResultSet对象

ResultSet对象它被成为结果集,他代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供了对这些行中数据的访问。 ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据叫做当前数据行,我们只能来操作当前的数据行。如果想要取得某一条记录,就要使用ResultSet的next()方法,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。

//处理结果:结果集可能是多行数据,需要遍历来获取
//调用next就移动到下一行,返回true代表改行有数据,返回false代表该行没有数据
while (r.next()) {//一直遍历到最后
    //进入循环,代表操作遍历的一行数据
    int id = r.getInt("id");
    String name = r.getString("name");
    int chinese = r.getInt("chinese");
    int math = r.getInt("math");
    int english = r.getInt("english");
    System.out.printf("id=%s,name=%s,chinese=%s,math=%s,english=%s\n", id, name, chinese, math, english);
    }

4.总结

主要掌握两种执行SQL的方法:

1.executeQuery()方法执行后返回单个结果集的,通常用于select语句。

2.executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete语句。

PreparedStatement注意事项:

1.参数化SQL查询

2.占位符不能使用多值

3.占位符:?下标从1开始

4.阻止常见SQL注入攻击

5.SQL预编译

6.性能比Statement高

到此这篇关于MySQL数据库JDBC编程详解流程的文章就介绍到这了,更多相关MySQL JDBC内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Java使用JDBC连接MySQL数据库

    一:什么是数据库,为什么要有数据库? 数据,数据库,数据库管理系统和数据库系统是与数据库技术密切相关的四个基本概念. 数据库相信大家都耳熟能详了,其实数据库顾名思义就是存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的~ 可能有朋友就要打断我施法了,停停停,我们Java程序猿在IDEA里面和控制台你侬我侬,没有对象new个对象存储在内存JVM的堆上就行了,学数据库干啥啊? 这时候我们就需要了解到:内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运

  • Java连接MySQL8.0 JDBC的详细步骤(IDEA版本)

    一.导入jar包 1.下载jar包:https://dev.mysql.com/downloads/ 2.导入 在项目文件夹下新建一个名为lib的文件夹 将下载好的jar包放入lib文件夹,然后右击lib文件夹,选择Add as Library...,然后点击ok 二.代码部分 1.加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); 2.用户信息和url String url = "jdbc:mysql://localhost:33

  • JDBC以反射机制加载类注册驱动连接MySQL

    package test.jdbc; //JDBC注册驱动的另一种方式:(这种方式常用) /* 如何让一个类的静态代码块执行? 所以直接反射此处要学习到的这个类,class文件.这个类就会被加载进JVM,静态代码块在类加载时执行,所以就注册了 就是利用反射来加载Driver类,利用类中的静态代码块实现对驱动的注册 那么如何加载这个类? 非常简单:反射机制!   Class.forName("com.mysql.jdbc.Driver"); Class.forName(类名);  这个类

  • JDBC连接的六步实例代码(与mysql连接)

    JDBC的六步: 1.注册驱动 2.获取数据库的连接 3.获取数据库的操作对象 4.执行sql语句 5.处理查询结果集(如果执行的语句中没有select语句这一步不用写) 6.关闭资源 第一步:注册驱动 //异常一定是需要处理的 //根据版本不同书写的代码有一些变化,老版本是 DriverManager.register(new com.mysql.jdbc.Driver()); //或者 Class.forName("com.mysql.jdbc.Driver"); //新版本是 D

  • JDBC如何访问MySQL数据库,并增删查改

    导入驱动包,加载具体的驱动类 导包: 新建一个Java Project文件,在此文件夹下新建Folder文件命名lib(此文件夹下放一些导入的包) 将mysql-connector-java-xxxx.jar拖进来,右键Build Path→Add to Build Path:(这里我用的是mysql-connector-java-8.0.20.jar) 加载具体的驱动类: Class.forName("com.mysql.cj.jdbc.Driver"); 与数据库建立连接conne

  • MySQL数据库 JDBC 编程(Java 连接 MySQL)

    目录 1. 数据库编程的基础条件 2. Java 的数据库编程:JDBC 3. JDBC 访问数据库的层次结构 4. MySQL 数据库操作介绍 5. MySQL 驱动包的下载及添加到项目 6. JDBC 使用步骤 6.1 创建数据库源,连接 Connection 6.2 构造 SQL 语句,为执行的操作做准备 6.3 执行 SQL,并处理结果集 6.4 释放资源 6.5 JDBC 编程模板 7. JDBC 常用接口和类 7.1 DataSource 和 MysqlDataSource 7.2

  • Sharding-JDBC自动实现MySQL读写分离的示例代码

    目录 一.ShardingSphere和Sharding-JDBC概述 1.1.ShardingSphere简介 1.2.Sharding-JDBC简介 1.3.Sharding-JDBC作用 1.4.ShardingSphere规划线路图 1.5.ShardingSphere三种产品的区别 二.数据库中间件 2.1.数据库中间件简介 2.2.Sharding-JDBC和MyCat区别 三.Sharding-JDBC+MyBatisPlus实现读写分离 3.0.项目代码结构和建表SQL语句 3.

  • Java基础MAC系统下IDEA连接MYSQL数据库JDBC过程

    JDBC数据库连接 MySQL中建表 在终端使用命令mysql -u root -p打开数据库,在数据库操作环境下进行创建数据库,建表等等操作 建立数据库语句 create dababase 数据库名 建表语句 create table bookinfo( -> book_id int primary key auto_increment, -> book_name varchar(20) not null, -> price float(6,2) not null, -> pub

  • JDBC连接MySQL并实现模糊查询

    场景: 在学习JDBC的语言中,每次都执行通用的几步:即注册驱动,获取连接,创建操作,处理结果,释放资源 过于复杂,因此不妨将上述步骤封装成工具类,只对外提供方法! 描述: 这是不使用工具类的封装写出来的代码,比较冗余复杂 package com.zdx.JDBC; import java.sql.*; public class JAVA1129_5 { public static void main(String[] args) { //设置空对象,注册驱动,获取连接,创建操作,处理结果集,释

  • MySQL数据库JDBC编程详解流程

    目录 一.数据库编程的必备条件 二.Java的数据库编程:JDBC 三.JDBC工作原理 四.JDBC开发步骤 五.JDBC操作步骤 六.优化JDBC的部分代码 1.获取数据库连接对象 2.操作命令对象Statement 3.ResultSet对象 4.总结 一.数据库编程的必备条件 编程语言: 如Java.C++.C.Python等 数据库: 如Oracle.MySQL.SQL Server等 数据库驱动包: 不同的数据库,要使用编程语言来操作时,就需要使用该数据库厂商提供的数据库驱动包. 如

  • 在IntelliJ IDEA中使用Java连接MySQL数据库的方法详解

    一.下载MySQL数据库并进行安装和配置 下载地址:https://dev.mysql.com/downloads/installer/ 二.下载JDBC连接器 下载地址:mysql-connector-java-8.0.22 下载好压缩包并解压后找到mysql-connector-java-8.0.22.jar文件放在自己指定的路径下. 三.在项目中导入jar包 用于测试数据库连接的测试类Test.java代码: import java.sql.Connection; import java.

  • MySQL 数据库 source 命令详解及实例

    MySQL 数据库 source 命令详解及实例 MySQL 数据库 source 命令,该命令是数据库导入命令.source 命令的用法非常简单,首先你需要进入 MySQL 数据库的命令行管理界面,然后选择需要导入的数据库,执行 source 命令.如下图所示. MySql 数据库 source 命令 mysql> use test Database changed mysql> set names utf8; Query OK, 0 rows affected (0.00 sec) mys

  • 在windows上安装不同(两个)版本的Mysql数据库的教程详解

    1.起因: 需要导入一个sql文件,发现死活导不进去.当执行到这一句时,就有问题.经过一番搜索,原来是我的数据库版本(原先Mysql版本5.5)低了,而支持该语句的版本应该是至少要5.7.那我索性就去Mysql官网去下载了个最新版本的(8.0.15). `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP 2.过程: 那么问题来了:有两个解决方案.1.直接卸载掉5.5版本的Mysql,直接安装8.0.15版本的.2.在不卸

  • CentOS7安装调试Mysql数据库的步骤详解【实例】

    本实例要求下载并安装调试Mysql数据库. 第一步:下载Mysql数据库安装所需的全部软件. 我已提前下载好数据库软件,直接在服务器下载即可,如下: 通过scp直接下载: [root@agt20 ~]# scp root@192.168.122.10:/root/mysql* /root/ 软件如下图: [root@agt20 ~]# ls mysql-* mysql-5.7.17.tar mysql-community-client-5.7.17-1.el7.x86_64.rpm mysql-

  • Linux手动部署远程的mysql数据库的方法详解

    一.安装mysql 运行以下命令更新YUM源. rpm -Uvh  http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm 运行以下命令安装MySQL. yum -y install mysql-community-server 运行以下命令查看MySQL版本号. mysql -V 返回结果如下,表示MySQL安装成功. mysql  Ver 14.14 Distrib 5.7.31, for Linux (x86_

  • nodejs环境快速操作mysql数据库的方法详解

    github地址https://github.com/dmhsq/dmhsq-mysql-db 可用于腾讯云SCF以及云开发环境 错误处理尚未完善 错误参考mysql错误 引入依赖包 npm install dmhsq-mysql-db 效果如下 简化了mysql的使用 安装依赖 npm install dmhsq-mysql-db 使用示例 快速操作mysql 错误处理尚未完善 部分错误参考mysql错误 引入资源 const database = require("dmhsq-mysql-d

  • python中的mysql数据库LIKE操作符详解

    LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. 语法: SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern pattern这里就是放指定模板的地方,而这里就要用到" % ",也叫做通配符 %如果是放在条件前面,那就是查以...结尾的数据:例如:%李 %如果是放在条件后面,那就是查以...开头的数据:例如:李% %如果是在条件前后都存在,那就是查包含的数据:例如:%李% 小知识点: ER

  • MySQL数据库之索引详解

    目录 一.MySQL索引简介 二.MySQL五种类型索引详解 (一)普通索引 (二)唯一性索引 (三)主键索引 (四)复合索引 (五)全文索引 三.MySQL索引使用原则 总结 今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL索引相关内容. 一.MySQL索引简介 索引是MySQL数据库为了加快数据查询的速度,给表中的某一个或者是某几个列添加的一种"目录".MySQL的索引是一个特殊的文件,但是InnoDB类型引擎(关于MySQL的引擎我们会在今后的文章中进行讲解)的表的

随机推荐