MySQL数据库JDBC编程知识点有哪些

MySQL数据库JDBC编程知识点有哪些

1.JDBC前置工作

1.1准备好MySQL驱动包

MySQL的jdbc驱动包我们可以去官网下载,我们也可以maven中央仓库下载,这个maven中央仓库是什么呢?你可以理解为我们手机中的“应用商店”软件,它的作用和应用商店的作用是差不多的,只不过手机应用商店里面是手机软件,而maven中央仓库里面有许多的API以及依赖包。

现在MySQL已经被Oracle收购了,Oracle的“吃相”有点难看,从官网找可以找到,但是我感觉maven中央仓库更好找一点,所以我们到maven中央仓库下载jdbc驱动包。

名列前茅步,点进网址进入maven中央仓库。
MySQL数据库JDBC编程知识点有哪些

第二步,搜索MySQL,选择如下图那一个。
MySQL数据库JDBC编程知识点有哪些
第三步,点击进入,找到对应大版本的jdbc驱动包,如果你的MySQL是5版本那驱动包也选择5版本的,当然如果你的MySQL是8版本,那你的驱动包也选择8版本。

我的MySQL是5版本所以我选择大版本为5的驱动包。
MySQL数据库JDBC编程知识点有哪些
第四步,点击进去,按下图操作,下载驱动包。
MySQL数据库JDBC编程知识点有哪些
下载完成我们的驱动包就准备好了。

1.2创建项目

使用编译器创建一个项目,项目创建好后,按照下面的步骤操作:

名列前茅步,创建一个目录,名字随便起,不妨叫做lib目录。
MySQL数据库JDBC编程知识点有哪些

第二步,将下载好的驱动包拷贝到该目录。
MySQL数据库JDBC编程知识点有哪些

第三步,设置选项,右键刚才创建并已经将驱动包拷贝的目录,找到As a Lib…
MySQL数据库JDBC编程知识点有哪些
MySQL数据库JDBC编程知识点有哪些
这样我们的驱动包就导进我们的项目中了,然后我们就能来写jdbc代码了。

2.JDBC编程步骤

2.1创建数据源DataSource

名列前茅步,创建DataSource对象,来描述这个数据库在哪里。

DataSource dataSource = new MysqlDataSource();

其中DataSourcejava.sql里面的一个jdbc接口,MysqlDataSource是来源与我们所下载驱动包中的一个实现DataSource接口的类。

第二步,设置数据库的“位置”(URL),登录数据库的账户名和密码。

        //设置数据库所在地址        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/jdbctest/characterEncoding=utf8&useSSL=false");        //设置登录数据库的账户名        ((MysqlDataSource)dataSource).setUser("root");        //设置登录数据库的密码        ((MysqlDataSource)dataSource).setPassword("123456");

jdbc:mysql://127.0.0.1:3306/jdbctest?characterEncoding=utf8&useSSL=false就是一个URL,也叫少数资源定位符。
jdbc:mysql表示该url是用于jdbc mysql的URL,因为数据库有很多,不止jdbc一种,所以需要细分。

具体含义自主对照:URL类型声明://数据库的地址/数据库名?字符集编码&是否加密

2.2连接数据库

第三步,和服务器建立连接,创建好数据源DataSource对象后,调用该对象的getConnection()方法,获取java.sql.Connection对象,这样就与数据库建立起来连接了。

Connection connection = dataSource.getConnection();

2.3构造并执行sql语句(插入操作为例)

第四步,构造sql语句字符串,并将该语句包装成PreparedStatement对象,即调用Connection对象的prepareStatement方法,参数是sql字符串,会返回一个PreparedStatement对象,然后我们再调用PreparedStatement对象中的executeUpdate方法或executeQuery方法执行sql语句。

我们先以插入操作为例。

        //操作数据库 关键在于构造sql语句        //jdbc 构造的sql语句不需要带上;        String sql = "insert into student values(1, '张三')";        //将sql字符串包装成一个语句对象,表示待执行的sql的对象        PreparedStatement statement = connection.prepareStatement(sql);        //执行sql        //如果待执行的sql语句操作是insert, update, delete,则使用executeUpdate方法执行,返回值为影响数据的行数        //如果待执行的sql语句操作是select,则使用executeQuery方法执行        int ret = statement.executeUpdate();

其中,如果待执行的sql语句操作是insert, update, delete,则使用executeUpdate方法执行,返回值为影响数据的行数,如果待执行的sql语句操作是select,则使用executeQuery方法执行,返回值是一个ResultSet结果表对象。

2.4及时释放资源

第五步,释放资源,我们执行完毕sql语句后需要及时地将资源释放,在JDBC编程中,最常见需要释放的类或接口有三个,分别是ConnectionPreparedStatementResultSet,其中前面两个在jdbc插入操作中已经使用过了,而最后一个,即ResultSet,它是在执行查询语句需要用到的,调用executeQuery方法执行查询语句之后,会返回一个“临时表”,该“临时表”上储存了查询的结果,我们可以通过遍历该结果表来获取查询数据库的结果。

//此时sql语句已经执行完毕了,需要释放资源statement.close();connection.close();

使用jdbc编程进行插入操作全部代码:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.Scanner;public class TestJdbc {    public static void main(String[] args) throws SQLException {        DataSource dataSource = new MysqlDataSource();        //设置数据库所在地址        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/jdbctest?characterEncoding=utf8&useSSL=false");        //设置登录数据库的账户名        ((MysqlDataSource)dataSource).setUser("root");        //设置登录数据库的密码        ((MysqlDataSource)dataSource).setPassword("123456");        //建立连接        Connection connection = dataSource.getConnection();        //操作数据库 关键在于构造sql语句        //jdbc 构造的sql语句不需要带上;        String sql = "insert into student values(1, '张三')";        //将sql字符串包装成一个语句对象,表示待执行的sql的对象        PreparedStatement statement = connection.prepareStatement(sql);        //执行sql        //如果待执行的sql语句操作是insert, update, delete,则使用executeUpdate方法执行,返回值为影响数据的行数        //如果待执行的sql语句操作是select,则使用executeQuery方法执行        int ret = statement.executeUpdate();        //此时sql语句已经执行完毕了,需要释放资源        statement.close();        connection.close();    }}

运行结果,我们通过查询数据库的表的结果来进行观察:

mysql> create database jdbctest;Query OK, 1 row affected (0.01 sec)mysql> use jdbctest;Database changedmysql> create table student(id int, name varchar(20));Query OK, 0 rows affected (0.02 sec)mysql> show tables;+--------------------+| Tables_in_jdbctest |+--------------------+| student            |+--------------------+1 row in set (0.00 sec)-- 执行jdbc代码后查询mysql> select * from student;+------+--------+| id   | name   |+------+--------+|    1 | 张三   |+------+--------+1 row in set (0.00 sec)

程序运行结果,表示1行受到了影响。
MySQL数据库JDBC编程知识点有哪些

2.5不要写死的代码(以插入为例)

我们发现我们的sql语句是完完全全写死的,这一点不好,我们可以使用输入的操作让用户输入信息进行插入,那就需要使用到Scanner类了。

我们得到用户输入的信息后,我们需要对信息进行整合,最容易想到的方式就是字符串拼接,但是这么做有如下的缺点,一是容易写错,特别是单双引号比较多的情况下,二是不安全,黑客可以使用sql注入的方式来修改数据库。

所以更好的方法就是把sql字符串中待输入的信息使用?来代替或者叫做占位,然后通过PreparedStatement中的setXXX系列方法来逐个设置每个?的内容是什么。

这个系列的方法,名列前茅个参数表示sql待执行对象中第多少个?,第二个参数表示将这个?设置的内容。比如:

        //操作数据库 关键在于构造sql语句        //jdbc 构造的sql语句不需要带上;        String sql = "insert into student values(?, ?)";        //将sql字符串包装成一个语句对象,表示待执行的sql的对象        PreparedStatement statement = connection.prepareStatement(sql);        statement.setInt(1, id);        statement.setString(2, name);

完整代码:jdbc插入操作源代码

运行结果:
MySQL数据库JDBC编程知识点有哪些
数据库查询结果:

mysql> select * from student;+------+--------+| id   | name   |+------+--------+|    1 | 张三   ||    2 | 李四   |+------+--------+2 rows in set (0.00 sec)

2.6JDBC删除,更新操作

在jdbc编程中,删除操作和更新操作,它的步骤与插入操作是一模一样的,只不过就是构造的sql语句不一样,其他都一样。

删除操作关键代码:

        //用户输入        System.out.println("请输入需要删除的学号:");        int id = sc.nextInt();        //操作数据库 关键在于构造sql语句        //jdbc 构造的sql语句不需要带上;        String sql = "delete from student where id = ?";        PreparedStatement statement = connection.prepareStatement(sql);        statement.setInt(1, id);        System.out.println("statement" + statement);

程序运行结果:
MySQL数据库JDBC编程知识点有哪些

数据库查询结果:

mysql> select * from student;+------+--------+| id   | name   |+------+--------+|    1 | 张三   |+------+--------+1 row in set (0.00 sec)

更新操作关键代码:

        //用户输入 需要修改的id 与修改后的姓名        System.out.println("请输入需要修改的学号:");        int id = sc.nextInt();        sc.nextLine();        System.out.println("请输入修改后的姓名:");        String afterName = sc.nextLine();        //操作数据库 关键在于构造sql语句        //jdbc 构造的sql语句不需要带上;        String sql = "update student set name = ? where id = ?";        PreparedStatement statement = connection.prepareStatement(sql);        statement.setString(1, afterName);        statement.setInt(2, id);        System.out.println("statement" + statement);

jdbc更新操作完整代码:源代码地址

程序运行结果:

MySQL数据库JDBC编程知识点有哪些

数据库查询结果:

mysql> select * from student;+------+--------+| id   | name   |+------+--------+|    1 | 王五   |+------+--------+1 row in set (0.00 sec)

2.7JDBC查询操作

jdbc的查询操作与插入删除更新操作有一点点不同,执行查询sql语句的时候是调用executeQuery方法来执行语句的,并且会带回查询的结果,我们可以通过类似与迭代器的操作来获取查询的结果,这个结果集使用完后需要将它释放。

关键代码:

        //操作数据库 关键在于构造sql语句        //jdbc 构造的sql语句不需要带上;        String sql = "select * from student";        PreparedStatement statement = connection.prepareStatement(sql);        //执行sql 查询操作返回的不是int 而是一个临时表 使用ResultSet对象表示这个临时表        ResultSet ret = statement.executeQuery();        //便利结果集合        //预期结果格式//        +------+--------+//        | id   | name   |//        +------+--------+//        |    1 | 王五   |//        +------+--------+        while (ret.next()) {            int id = ret.getInt("id");            String name = ret.getString("name");            System.out.println("id:" + id + ", name:" + name);        }        //关闭资源        ret.close();        statement.close();        connection.close();

程序运行结果:
MySQL数据库JDBC编程知识点有哪些

到此,相信大家对“MySQL数据库JDBC编程知识点有哪些”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

文章标题:MySQL数据库JDBC编程知识点有哪些,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/25214

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月15日 上午1:51
下一篇 2022年9月15日 上午1:52

相关推荐

  • 如何通过jquery实现ajax调用

    能通过jquery来实现ajax调用。方法:1、用load()方法实现ajax请求,语法为“$(selector).load(url,…)”;2、用post()和get()方法,对应http请求中的POST、GET,语法为“$post(‘url’,{……

    2022年9月8日
    47400
  • Apache Flink未授权访问远程代码命令执行的复现

    Apache Flink未授权访问-远程代码命令执行漏洞复现 Apache Flink Dashboard默认没有用户权限认证。攻击者可以通过未授权的Flink Dashboard控制台,直接上传木马jar包,可远程执行任意系统命令获取服务器权限,风险极大。 二、影响版本 Apache Flink …

    2022年9月10日
    1.5K00
  • 如何研究sqlmap使用的注入技术

    使用django搭建了一个注入靶机 def te(request): id = request.GET.get(“id”) db = pymysql.connect(“127.0.0.1”, “root”, “123456”, “t1”, charset=’utf8′) cursor = db.cu…

    2022年9月13日
    74000
  • JavaScript单线程和任务队列是什么

    本文章是对以往“JavaScript单线程和任务队列是什么”知识点的总结与梳理,不仅内容丰富、详细,而且知识点逻辑十分清晰。相信多数人读完本文后,会对“JavaScript单线程和任务队列是什么”的知识内容,有更为深入的理解和认识。 一、JavaScript为什么设计为单线程? JavaScript…

    2022年6月27日
    50200
  • 电脑msr分区可不可以删除

    msr分区可以删除;msr分区是“Microsoft Reserved Partition”的缩写,是作为保留分区来使用,系统组件可以将MSR分区的部分分配到新的分区以供使用,msr分区不是必须的,可以被删除。 本教程操作环境:windows10系统、DELL G3电脑。 msr分区可以删除 MSR…

    2022年9月16日
    3.8K00
  • 如何使用css实现​文本渐变

    文本渐变 文本渐变效果很流行,使用 CSS3 能够很简单就实现: h3[data-text] { position: relative;}h3[data-text]::after { content: attr(data-text); z-index: 10; color: #e3e3e3; pos…

    2022年9月1日
    35600
  • windows ecshop模板如何修改

    ecshop模板修改方法: 1、首先我们下载一个模板,将他放入软件目录下的“themes”文件夹。 2、接着打开ecshop,点击“模板管理”下的“模板选择” 3、然后点击下方你要更换的模板。(建议备份当前模板) 4、网站会弹出提示,如图所示,点击“确定” 5、修改完成后去到网站,就可以发现模板已经…

    2022年9月22日
    47700
  • MyBatisPlus QueryWrapper多条件查询及修改方法是什么

    gt、ge、lt、le、isNull、isNotNull 大于 > 例: gt(“age”, 18) → age > 18 ge 大于等于 >= 例: ge(“age”, 18) → age &gt…

    2022年9月21日
    1.6K00
  • APT28样本实例分析

    一、 背景 奇幻熊组织又被人们称为APT28,他是俄罗斯的间谍组织,2019年,奇幻熊组织的活动异常频繁。从今年年初的智囊团入侵事件,到随后的大小攻击,都有APT28的身影。奇幻熊的历史已经非常悠久,2016年,该组织因为入侵美国民主党全国委员会的电子邮件,试图影响美国总统大选而闻名于世。鱼叉式网络…

    2022年9月18日
    83600
  • usmt.ppkg文件有什么作用

    “usmt.ppkg”是windows自带的系统还原功能的系统备份文件;Windows系统还原是在不需要重新安装操作系统,也不会破坏数据文件的前提下使系统回到原有的工作状态,PBR恢复功能的备份文件就是“usmt.ppkg”。 本教程操作环境:windows10系统、DELL G3电脑。 usmt.…

    2022年9月10日
    5.0K00
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部