Java开发笔记(一百四十七)通过JDBC管理数据库
前面介绍了如何通过JDBC获取数据库连接,可是Connection对象不能直接执行SQL语句,需要引入Statement报告对象才能操作SQL。Statement对象由Connection的createStatement方法获得,它主要提供了下列两个方法:
executeUpdate:执行数据库的管理语句,主要包含建表、改表结构、删表、增加记录、修改记录、删除记录等等。它的返回值是整型,存放着当前语句的操作记录数量,例如删除了多少条记录、更新了多少条记录等。
executeQuery:执行数据库的查询语句,专用于select命令。它的返回值是ResultSet类型,查询的结果集可经由ResultSet对象得到。
对于管理类型的SQL指令来说,完整的操作过程分成以下三个步骤:
1、获取数据库连接:该步骤调用DriverManager类的getConnection方法获得连接对象。
2、创建该连接的执行报告:该步骤调用Connection对象的createStatement方法获得执行报告。
3、命令报告执行SQL语句:该步骤调用报告对象的executeUpdate方法来执行SQL语句。
把以上的三步骤串联起来,便得到了下面的数据库操作模板:
// 先获取数据库连接,再创建该连接的执行报告try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);Statement stmt = conn.createStatement()) {String sql = "这里是待执行SQL语句";stmt.executeUpdate(sql); // 执行处理语句
// createTable(stmt); // 创建表格
// insertRecord(stmt); // 插入记录
// updateRecord(stmt); // 更新记录} catch (SQLException e) {e.printStackTrace();}
接下来看几个具体的SQL执行例子,首先创建一张名叫teacher的新表,则编写如下所示的建表代码:
// 创建表格private static void createTable(Statement stmt) throws SQLException {String sql = "create table teacher (" // 建表语句+ " gonghao INT NOT NULL,"+ " name VARCHAR(32) NOT NULL,"+ " birthday DATE NULL,"+ " sex INT NOT NULL,"+ " course VARCHAR(32) NOT NULL,"+ " PRIMARY KEY (gonghao))"+ "comment = '教师信息表';";int count = stmt.executeUpdate(sql); // 执行处理语句System.out.println("建表语句的返回结果为"+count);}
在之前的try代码内部调用createTable方法,运行测试程序后观察到以下的输出日志。
建表语句的返回结果为0
由于建表语句本身没有影响任何记录,因此executeUpdate方法在建表之时返回了0。接着打开MySQL的工作台,就能在工作台左侧看到如图所示的teacher表了。
建好了表,还要往里面添加几条记录,于是编写下面的插表代码:
// 插入记录private static void insertRecord(Statement stmt) throws SQLException {List<String> sqlList = Arrays.asList( // 以下每个语句插入一条记录"insert into teacher (gonghao, name, birthday, sex, course) VALUES ('1', '张老师', '1983-03-03', 1, '语文')","insert into teacher (gonghao, name, birthday, sex, course) VALUES ('2', '李老师', '1984-04-04', 0, '数学')","insert into teacher (gonghao, name, birthday, sex, course) VALUES ('3', '王老师', '1985-05-05', 1, '英语')","insert into teacher (gonghao, name, birthday, sex, course) VALUES ('4', '赵老师', '1986-06-06', 0, '物理')","insert into teacher (gonghao, name, birthday, sex, course) VALUES ('5', '刘老师', '1987-07-07', 1, '化学')");for (String sql : sqlList) {int count = stmt.executeUpdate(sql); // 执行处理语句System.out.println("添加记录语句的返回结果为"+count);}}
同样在try代码中调用insertRecord方法,运行测试程序观察到下列的日志文本。
添加记录语句的返回结果为1
添加记录语句的返回结果为1
添加记录语句的返回结果为1
添加记录语句的返回结果为1
添加记录语句的返回结果为1
因为每个insert语句插入一条记录,所以executeUpdate在插表时返回的数量是1。回到工作台查询teacher表的所有记录,便能看到如图所示的五条记录。
然后准备修改记录字段,让所有女老师去教英语,则包含update语句的方法代码如下所示:
// 更新记录private static void updateRecord(Statement stmt) throws SQLException {String sql = "update teacher set course='英语' where sex='1'"; // 记录更新语句int count = stmt.executeUpdate(sql); // 执行处理语句。返回被更新的记录数量System.out.println("更新记录语句的返回结果为"+count);}
在try代码中调用updateRecord方法,运行测试程序后观察到以下的日志信息。
更新记录语句的返回结果为3
由日志可见,这个update语句更新了三条数据库记录,因而executeUpdate方法此时的返回值为3。回到MySQL工作台,重新查询teacher表,此时的记录结果如图所示,果然三个女老师的任教课程都变为英语了。
更多Java技术文章参见《Java开发笔记(序)章节目录》
转载于:https://www.cnblogs.com/pinlantu/p/11479598.html
Java开发笔记(一百四十七)通过JDBC管理数据库相关推荐
- (硅谷课堂项目)Java开发笔记2:项目概述,搭建项目环境和开发讲师管理接口
文章目录 (硅谷课堂项目)Java开发笔记2:项目概述,搭建项目环境和开发讲师管理接口 1.项目概述 1.1 项目介绍 1.2 硅谷课程流程图 1.3 硅谷课堂功能架构 1.4 硅谷课堂技术架构 1. ...
- 微信公众号Java开发-笔记02【开发接入准备、开发接入】
学习视频网址:哔哩哔哩网站 微信公众号开发-Java版 [P01-P02]微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] [P03-P04]微信公众号Java开发-笔记02[开发接入 ...
- 微信公众号Java开发-笔记01【微信公众号介绍、开发环境搭建】
学习网址:哔哩哔哩网站 微信公众号开发-Java版 微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] 微信公众号Java开发-笔记02[] 微信公众号Java开发-笔记03[] 微信公 ...
- Java开发笔记(三十三)字符包装类型
正如整型int有对应的包装整型Integer那样,字符型char也有对应的包装字符型Character.初始化字符包装变量也有三种方式,分别是:直接用等号赋值.调用包装类型的valueOf方法.使用关 ...
- Java开发笔记(一百零三)线程间的通信方式
前面介绍了多线程并发之时的资源抢占情况,以及利用同步.加锁.信号量等机制解决资源冲突问题,不过这些机制只适合同一资源的共享分配,并未涉及到某件事由的前因后果.日常生活中,经常存在两个前后关联的事务,像 ...
- Java开发笔记(二十三)数组工具Arrays
数组作为一种组合形式的数据类型,必然要求提供一些处理数组的简便办法,包括数组比较.数组复制.数组排序等等.为此Java专门设计了Arrays工具,该工具包含了几个常用方法,方便程序员对数组进行加工操作 ...
- Java开发笔记(五十六)利用枚举类型实现高级常量
前面介绍了联合利用final和static可实现常量的定义,该方式用于简单的常量倒还凑合,要是用于复杂的.安全性高的常量,那就力不从心了.例如以下几种情况,final结合static的方式便缺乏应对之 ...
- Java开发笔记(八十六)通过缓冲区读写文件
前面介绍了利用文件写入器和文件读取器来读写文件,因为FileWriter与FileReader读写的数据以字符为单位,所以这种读写文件的方式被称作"字符流I/O",其中字母I代表输 ...
- Java开发笔记(八十八)文件字节I/O流
前面介绍了如何使用字符流读写文件,并指出字符流工具的处理局限,进而给出随机文件工具加以改进.随机文件工具除了支持访问文件内部的任意位置,更关键的一点是通过字节数组读写文件数据,采取字节方式比起字符方式 ...
- Java开发笔记(五十)几种开放性修饰符
前面介绍子类继承父类的时候,提到了public(公共)和private(私有)两个修饰符,其中public表示它所修饰的实体是允许外部访问的:而private表示它所修饰的实体不允许外部访问,只能在当 ...
最新文章
- c语言试题 改错题,精选二级C++试题 – 改错题
- android studio 打开github开源代码
- springMVC+ajaxFileUpload中文名乱码的问题
- Delphi中字符串比较大小 VS Oracle-SQL中字符串比较大小
- java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?
- MQ在计算机组成,[转载]计算机组成框图-计算机运行流程(例子)
- 将SqlServer的数据导出到Excel/csv中的各种方法 .
- 华为MSTP负载均衡配置示例
- reactnative资源
- joomla 3.6 mysql 版本_Joomla是否支持MariaDB数据库?
- [渝粤教育] 中国地质大学 计算机图形学(新) 复习题 (2)
- 如何用C语言编辑一个万年历,如何用C语言编写一个万年历系统?
- 基于OpenCV-python3实现抠图替换背景图
- usb3.0 驱动安装方法
- CSDN Markdown 显示连续两个中划线 --
- 魔鬼与牧师动作分离版
- java找不到文件_Java常见问题之javac Hello.java找不到文件的解决方法
- docker出现Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use的解决方法
- HDU - 2034 人见人爱A-B 【set】
- MEM/MBA数学基础(06)数列
热门文章
- 计算机硬盘存绝密,教您创建自己的绝密磁盘
- 使用tp5.1写api接口的流程
- java jar 启动脚本
- YII 框架相关收藏
- Spring Boot @ServletComponentScan 扫描 @WebServlet、@WebFilter、@WebListener
- Lucene 文档检索 详细说明
- python如何制作一个任意列表_我要悄悄学Python之列表(一)
- rabbitmq的发布订阅
- 阶段3 3.SpringMVC·_06.异常处理及拦截器_7 SpringMVC拦截器之拦截器接口方法演示
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_6_练习_序列化集合...