如何用Java代码操作数据库(JDBC编程)

news2024/11/26 19:16:18

目录

 JDBC编程的由来

JDBC编程的准备工作

 1. 下载数据库驱动包

 2. 将jar包作为标准库​编辑

 3. 编写JDBC代码(需要通过下面几个步骤完成开发)

(1)JDBC编程(在数据库中插入一条记录)

 运行结果:

 JDBC代码(插入记录)需要注意:

(2)JDBC编程(在数据库中查询多条记录)

 执行结果:


前言

 JDBC编程的由来

    如果是在公司操作数据库,大多数情况都是用代码来操作数据库的,可能每个公司用的数据库都是不一样的,各种数据库,如MySQL,Oracle,SQL Server在进行开发的时候,就会提供一组编程接口(API),这些数据库提供的API是不相同的,此时程序猿就需要学习很多份API,后来Java提出,统一API,由数据库厂商提供一个程序来完成API的转换,对各种数据库原装的API进行封装,再提供成JDBC的形状,再进行学习代码操作数据库时,就学习Java的JDBC这一套api即可。

    Java程序猿要想进行数据库的开发,就需要在项目张导入对应的数据库的驱动包才能用Java代码操作数据库。(驱动包是由数据库厂商提供的),可以在maven中央仓库(类似于应用商店)下载。

JDBC编程的准备工作

1. 在maven中央仓库中下载对应版本的数据库驱动包(大版本能匹配即可),maven中央仓库地址:https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api/3.1.0
2. 在Java项目中新建包,把对应的驱动包复制到包中。之后右键选择Add as Library(添加为标准库),就是将这个驱动包变成Java标准库提供的,之后就可以直接调用驱动包中的类和方法。
3. 编写JDBC代码。

 1. 下载数据库驱动包

 2. 将jar包作为标准库

 

 3. 编写JDBC代码(需要通过下面几个步骤完成开发)

1. 创建并初始化一个数据源(描述数据库服务器在哪)
2. 和数据库服务器建立连接(和数据库建立连接后才能对里边的数据)
3. 构造SQL语句(和cmd操作数据库的sql语句一样,只是多了一步预编译sql语句)
4. 执行SQL语句(是否操作成功数据库中的数据,执行完后在控制台会有提示)
5. 释放必要的资源(对服务器而言,同一时刻要处理很多个客户端的请求,就需要消耗一定的资源,所以服务器就需要释放不必要的资源),不用了的资源要赶紧释放

(1)JDBC编程(在数据库中插入一条记录)

package JDBCLearn;/*
java操作数据库先把这个MySQL提供给Java的api导入到项目中(不用解压缩,jvm会帮我们自动识别)
  1.将这个jar压缩包程序导入到jdbc项目,
  2.把这个jar包变成Java库(library),之后Java就能识别jar包中的很多的.class文件了
  3.编写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 JDBCInsert {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        //JDBC需要通过一下几步来完成开发
        //1.创建并初始化一个数据源  数据源:数据从哪里来(描述数据库服务器在哪里)
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java107_2?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("12345");//这几个东西都设置了,才能连接数据库
        //以上几行代码只是描述数据源,描述数据库在哪  但是还没有和数据库建立连接

        //2.和数据库服务器建立连接
        Connection connection = dataSource.getConnection();
        //3.从控制台录入用户要插入的数据
        System.out.println("请输入学生姓名:");
        String name = scanner.nextLine();
        System.out.println("请输入学生id:");
        int id = scanner.nextInt();
        //4.构造SQL语句
        //这里只是一个字符串语句,就像是一个参数
        //String sql = "insert into student values(" + id + ",'"+ name + "')";//但是这种写法非常丑
        String sql = "insert into student values(?,?)";//问号就是两个占位符
        PreparedStatement statement = connection.prepareStatement(sql);//就是预编译一下给数据库服务器的这个sql指令
        //上一行代码的意思就是做一些准备工作,如果直接把sql语句传给数据库服务器,让它去解析我们的指令,这个时候服务器的压力就会大很多
        statement.setInt(1,id);//这个是把第一个占位符设置成id
        statement.setString(2,name);//这个是把第二个占位符设置成name
        //5.执行SQL语句
        int ret = statement.executeUpdate();//executeUpdate指的是影响的行数(可以在服务器那端敲语句查看一下)
        System.out.println("ret = " + ret);
        //这句代码的意思就是把sql语句(预编译过的)发送给数据库服务器,由数据库服务器做出响应

        //6.释放必要的资源
        statement.close();
        connection.close();
    }
}

 运行结果:

 执行代码之前:

  执行代码之后:

 

 JDBC代码(插入记录)需要注意:

1. 写的代码不应该直接插入某一条记录,而是让用户从控制台输入,然后插入到数据库,这种写法是更加灵活的(用户是不会写JDBC的代码的,此时插入某一条固定的记录,如果用户需要插入别的记录,此时就需要改代码,这是不现实的)。
2. SetUrl,SetUser,SetPassword相当于有了数据库的钥匙,光描述数据库在哪里不够,还要有钥匙才能进入到数据库操作里边的数据。
3. 注意释放资源的顺序,如果是先创建的资源(PrepareStatment,Connection,),要最后才能释放;后创建的资源要先释放。(如果先关闭了外面的资源,里面的资源就释放不了了)
4. 在构造sql语句后要对sql语句进行预编译(构造的sql语句只是一个字符串,之后数据库服务器拿到这个字符串之后是要解析成sql的,之后才能执行,但是如果是很多的客户端都发一个字符串,服务器需要解析的压力就很大,所以先对构造的sql语句进行预编译,先解析成一个真正的sql语句,再发送给服务器,这样才能更合理的利用服务器的资源)
5. 在执行JDBC代码的时候,要确保Mysql服务器是开启的  (否则编译报错)

(2)JDBC编程(在数据库中查询多条记录)

package JDBCPractice;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import com.sun.deploy.security.MozillaMyKeyStore;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCSelect {
    public static void main(String[] args) throws SQLException {
        //1.创建并初始化数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java100?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("12345");
        //2.建立连接
        Connection connection = dataSource.getConnection();
        //3.构造SQL
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);
        //4.执行SQL
        //executeUpdate返回的是int类型,RsultSet这个集合就像是表一样的结构
        ResultSet resultSet = statement.executeQuery();
        //5.遍历结果集合
        while (resultSet.next()) {
            //把resultSet想象成一个表格,同时这个表格中有一个光标,默认指向表格最上方
            //每次调用next,此时光标就往下走一行,同时next返回一个true
            //当表格遍历完成后,光标指向表格最后了,此时再调用next,就返回false了
            //当光标指向某一行的时候,就可以通过getxxx方法来获取这一行里的数据
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = " + id + ", name = " + name);
        }
        //6.释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

 JDBC代码(查询记录)需要注意:

1. 整体上和插入记录的代码步骤是一样的,只是多了一步遍历结果的集合。
2. ResultSet这个类就像是一张表,查询到的一行一行的数据都放在这个表中,要把这个数据显示在控制台中,就需要遍历这张表,之后把每一行每一列的数据打印出来即可。

执行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/627123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ZEPPELIN部署接入华为云MRS

ZEPPELIN部署接入华为云MRS 安装zeppelin配置Spark连接常见问题连接pg报错 Py4JJavaError: An error occurred while calling o779.load. : org.postgresql.util.PSQLException: The authentication type 5 is not supported. Check that you have configured the pg_hba.conf …

OpenMMLab-AI实战营第二期——3-1.深度学习预训练与MMPretrain

文章目录 1. MMPreTrain算法库介绍1.1 算法库与任务组成1.2 框架概览 2. 经典主干网络2.1 ResNet2.2 Vision Transformer 3. 自监督学习3.1 SimCLR3.2 MAE3.3 iBOT 4. 多模态算法4.1 CLIP4.2 BLIP 视频链接:b站-深度学习预训练与MMPretrain 1. MMPreTrain算法库介绍…

高并发下如何保证接口幂等性?

文章目录 前言: 一、insert前先select 二、加悲观锁 三、加乐观锁 四、加唯一索引 五、建防重表 六、根据状态机 七、加分布式锁 八、获取token 前言: 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分…

粮油食品行业MES系统源码

MES系统可以提供全面的生产过程监控和数据分析,帮助企业实现智能化、数字化生产。同时,MES系统可以优化生产计划和物料配送,降低废品率和能耗,提高生产效率和质量,降低生产成本,增加利润。 一、粮油MES系统…

C#,彩票数学——彩票预测是玄学还是数学?什么是彩票分析?怎么实现彩票号码的预测?

彩票原理系列文章 彩票与数学——彩票预测是玄学还是数学?https://mp.csdn.net/mp_blog/creation/editor/122517043彩票与数学——常用彩票术语的统计学解释https://mp.csdn.net/mp_blog/creation/editor/122474853彩票与数学——彩票缩水的数学概念与原理https://…

小狐狸ChatGPT创作系统如何添加AI文本创作自定义模型,自定义模型方法

后台根据自己的定位选建好类别管理 具体模型文档参照如下对应修改或新增,格式 :模型标题+描述+模型内容+提示文字 模型标题描述模型内容提示文字写一篇文章用你喜欢的语言写一篇关于任何主题的文章用[TARGETLANGGE]写一篇关于[PROMPT]的文章输入文章的主题,然后按发送键按…

【微信小程序插件】下拉刷新、下拉加载

概述 今天在优化小程序的列表时候,想要把原生的 scroll-view 组件替换成一个下拉刷新的组件,然后就找了一下,果然有大神已经封装好。coolui-scroller 就是这样满足需求的一款插件,但是微信官网给出的描述以及安装引入的方式&…

Python读取CSV文件的几种方法

话不多说,开干!!! 目录 1. 使用 csv 模块 2.使用 numpy 库 3.使用pandas库 4.使用标准库中的 csv 模块 5.注意事项 1. 使用 csv 模块 (1)项目目录如下图所示: (2)…

皕杰报表中的图表钻取

皕杰报表中图表的钻取是通过超链接实现的,其实质就是通过超链接打开了一张的新表,而把原表中的条件通过参数传递给新表,从而得到我们所需的明细数据。 超链接的地址在单元格的超链接地址属性里添加属性值,如果超链接字符串不需要动…

企业级微服务架构实战项目--xx优选1

一 项目概述 1.1 项目概述 xx优选项目:是依托社区和团长社交关系实现生鲜商品流通的新零售模式。 1.2 技术栈 1.3 功能架构图 第2部分 1.4 技术架构* 1.5 工程结构 ssyx-parent:父工程,根目录,管理子模块: ​ comm…

如何自动化的对PCAP数据包进行suricata/snort/zeek分析

在前一篇文章中,这里介绍了dalton的安装,以及使用dalton中的多种探针手动分析pcap数据包。在和其他程序联动的时候,手动分析无法满足要求,本篇文章将介绍如何通过使用dalton提供的API进行数据包的自动化分析。 在手动提交数据包分…

从零手写操作系统之RVOS系统调用实现-09

从零手写操作系统之RVOS系统调用实现-09 系统模式:用户态和内核态如何让任务运行在用户态下 系统模式的切换用户模式下访问特权指令测试系统调用系统调用执行流程系统调用传参规范系统调用封装 系统调用完整流程解析执行测试 本系列参考: 学习开发一个RISC-V上的操作…

基于html+mysql+Spring+mybatis+Springboot的Springboot宠物医院管理系统

运行环境: 最好是java jdk 1.8,我在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以,如果编译器的版本太低,需要升级下编译器,不要弄太低的版本 tomcat服务器环…

一般人不要轻易去自学网络安全(黑客)

笔者本人 17 年就读于一所普通的本科学校,20 年 6 月在三年经验的时候顺利通过校招实习面试进入大厂,现就职于某大厂安全联合实验室。 我为啥说自学黑客,一般人我还是劝你算了吧!因为我就是那个不一般的人。 首先我谈下对黑客&a…

[游戏开发][Unity]Assetbundle下载篇(1)热更前准备与下载AB包清单

热更流程都不是固定的,每个人写的状态机也有所差别,但是一些必要步骤肯定不可能少,例如下载清单,对比版本,下载AB包,标记下载完成。我接下来的每一篇文章都是下载AB包的重要步骤,大概率是不能省…

Kibana:使用 Kibana 自带数据进行可视化(三)

在今天的练习中,我们将使用 Kibana 自带的数据来进行一些可视化的展示。希望对刚开始使用 Kibana 的用户有所帮助。这是这个系列的第三篇文章。这个是继上一篇文章 “Kibana:使用 Kibana 自带数据进行可视化(二)” 的续篇。 前提条…

学成在线----day5

1、媒资管理需求分析 2、为什么要用网关 当前要开发的是媒资管理服务,目前为止共三个微服务:内容管理、系统管理、媒资管理,如下图: 后期还会添加更多的微服务,当前这种由前端直接请求微服务的方式存在弊端&#xff…

微服务架构中的数据一致性:解决方案与实践| 得物技术

1 为什么要做服务之间的数据一致性 作为互联网公司的研发工程师,微服务的架构思想对于各位读者朋友来说,已经不是陌生东西。我们当中的大多数人,或多或少经历过从单体应用到微服务化的系统拆分和演进过程。我们按照庞大系统的业务功能和特征…

都说网络安全渗透工程师前景好,好在哪?

渗透工程师前景非常好,网络安全发展规模不断扩大,未来行业类的人才需求也会越来越多。就目前看来在网络安全方向上就业的薪资待遇也十分可观。 其就业方向有很广泛,如网络安全工程师,渗透测试工程师等。 渗透测试人员通常对网络…

keras搭建轻量级卷积神经网络CNN开发构建国家一级保护动物识别分析系统,集成开发GradCAM实现热力图分析可视化

动物识别相关的项目本质上属于图像识别,在我之前的博文中已经有过不少实践了,感兴趣的话可以自行移步阅读即可,这里不是说想要单纯地去做一个动物识别的项目,昨晚在玩手机的时候突然被小孩问到一个动物是不是国家保护动物&#xf…