返回顶部
首页 > 资讯 > 数据库 >MySQL数据库JDBC编程详解流程
  • 591
分享到

MySQL数据库JDBC编程详解流程

2024-04-02 19:04:59 591人浏览 薄情痞子
摘要

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

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

编程语言: 如Java、c++、C、python

数据库: 如oracleMysqlSQL 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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据库JDBC编程详解流程

本文链接: https://lsjlt.com/news/163137.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL数据库JDBC编程详解流程
    目录一、数据库编程的必备条件二、Java的数据库编程:JDBC三、JDBC工作原理四、JDBC开发步骤五、JDBC操作步骤六、优化JDBC的部分代码1.获取数据库连接对象2.操作命令...
    99+
    2024-04-02
  • MySQL数据库 JDBC 编程(Java 连接 MySQL)
    目录1. 数据库编程的基础条件2. Java 的数据库编程:JDBC3. JDBC 访问数据库的层次结构4. MySQL 数据库操作介绍5. MySQL 驱动包的下载及添加到项目6....
    99+
    2024-04-02
  • 基于JDBC的MySQL数据库编程
    ✨博客主页: 荣 ✨系列专栏: MySQL ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录 一. JDBC概述二. JDBC前置工作1. 准备好MySQL驱动包2. 创建项目 三....
    99+
    2023-09-12
    数据库 mysql java
  • 数据库和JDBC编程
    JDBC是一种数据库连接,它是一种可执行SQL语句的Java API。程序可以通过JDBC API连接到关系型数据库,并使用结构化查询语言来完成对数据库的查询,更新。通过使用JDBC,就可以使用同一种API...
    99+
    2024-04-02
  • MySQL数据库JDBC编程知识点有哪些
    本篇内容主要讲解“MySQL数据库JDBC编程知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库JDBC编程知识点有哪些”吧!1.JDB...
    99+
    2024-04-02
  • MySQL数据库JDBC编程的步骤是什么
    MySQL数据库JDBC编程的步骤如下:1. 加载驱动程序:使用Class.forName()方法加载MySQL的JDBC驱动程序。...
    99+
    2023-08-11
    MySQL数据库 JDBC
  • MySQL | JDBC连接数据库详细教程【全程干货】
    文章目录 一、什么是JDBC?二、JDBC工作原理三、使用JDBC连接MySQL数据库【✔】1、安装对应数据驱动包2、将jar包导入项目中3、编写代码连接数据库【⭐】1️⃣ 创建数据源2️⃣ 和数据库建立网络连接3️⃣ 构造SQL...
    99+
    2023-08-20
    数据库 mysql java
  • Java编程 JDBC连接Oracle数据库
    Part1 JDBC         JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口...
    99+
    2023-09-27
    数据库 java oracle
  • 微信小程序访问mysql数据库流程详解
    目录1 开通云上的mysql2 创建自定义连接器3 创建云函数4 安装依赖5 出参映射6 在小程序中使用连接器总结1 开通云上的mysql 经过询价,我发现阿里云的数据库是比较便宜的...
    99+
    2022-11-13
    微信小程序访问mysql数据库 小程序 mysql
  • MySQL的JDBC 编程
    目录 1.数据库编程:JDBC 2. JDBC工作原理 3. JDBC使用 3.1 驱动包的下载与导入 3.2 JDBC使用步骤(插入) 4.JDBC修改删除查询 1. 将数据库驱动包,添加到项目依赖中 创建目录,拷贝jar包,然...
    99+
    2023-09-02
    mysql 数据库 java
  • 详解Java使用JDBC连接MySQL数据库
    一:什么是数据库,为什么要有数据库? 数据,数据库,数据库管理系统和数据库系统是与数据库技术密切相关的四个基本概念。 数据库相信大家都耳熟能详了,其实数据库顾名思义就是存放数据的仓库...
    99+
    2024-04-02
  • Python数据库编程之pymysql详解
    目录python数据库编程之pymysql一、pymsql的安装二、连接数据库三、创建和管理数据库四、创建和管理表总结Python数据库编程之pymysql 学习之前务必安装MySQL并已启动相关服务。 一、pymsql...
    99+
    2023-05-05
    Python数据库之Pymysql Python Pymysql
  • JDBC | JDBC API详解及数据库连接池
    👑 博主简介:    🥇 Java领域新星创作者    🥇 阿里云开发者社区专家博主、星级博主、技术博主 🤝 交流社区:BoBooY(优质编程学习笔记社区) 前言:...
    99+
    2023-08-20
    java 数据库 mysql
  • 【MySQL】 Java的JDBC编程
    文章目录 🌲数据库编程的必备条件🎋Java的数据库编程:JDBC🎍JDBC工作原理🌳建立数据库连接📌在项目中新建...
    99+
    2023-09-27
    mysql java 数据库 开发语言 基础操作
  • [MySQL]初始JDBC编程
    专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现...
    99+
    2023-09-11
    mysql 数据库 java
  • JDBC连接数据库----Mysql七大步骤详解
    一、jdbc的概念         1、什么是jdbc?         JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它...
    99+
    2023-09-05
    mysql 数据库 java
  • SQL Server 数据库基础编程详解
    目录Go批处理语句使用、切换数据库创建、删除数据库方法1、方法2(设置文件大小)、基本数据类型判断表或其他对象及列是否存在创建、删除表给表添加字段、修改字段、删除字段添加、删除约束插...
    99+
    2024-04-02
  • JDBC-用程序操作数据库
    驱动:每个数据库厂商对JDBC的接口的实现类。 二、JDBC程序的开发步骤 引入驱动jar 2、编写代码 三、JDBC程序的代码步骤 1、注册驱动 Class.forName("驱动类的全名称"); mysql:com.mysql.jdbc...
    99+
    2017-07-13
    JDBC-用程序操作数据库
  • jdbc连接主流数据库方式(oracle、mysql、sqlserver)
    jdbc连接主流数据库方式 JDBC全称:java database connectivity ,是sun公司提供的Java连接数据库的标准规范。 1、oracle Oracle Database,又名Oracle RDBMS,或简称O...
    99+
    2017-10-22
    jdbc连接主流数据库方式(oracle mysql sqlserver)
  • MySQL五步走JDBC编程全解读
    目录一、数据库编程的必备条件二、Java的数据库编程:JDBC三、JDBC工作原理四、开发环境搭建五、MySQL中的JDBC编程1、五步流程2、添加信息3、查询信息4、删除信息5、修...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作