前面介绍了如何通过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管理数据库相关推荐

  1. (硅谷课堂项目)Java开发笔记2:项目概述,搭建项目环境和开发讲师管理接口

    文章目录 (硅谷课堂项目)Java开发笔记2:项目概述,搭建项目环境和开发讲师管理接口 1.项目概述 1.1 项目介绍 1.2 硅谷课程流程图 1.3 硅谷课堂功能架构 1.4 硅谷课堂技术架构 1. ...

  2. 微信公众号Java开发-笔记02【开发接入准备、开发接入】

    学习视频网址:哔哩哔哩网站 微信公众号开发-Java版 [P01-P02]微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] [P03-P04]微信公众号Java开发-笔记02[开发接入 ...

  3. 微信公众号Java开发-笔记01【微信公众号介绍、开发环境搭建】

    学习网址:哔哩哔哩网站 微信公众号开发-Java版 微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] 微信公众号Java开发-笔记02[] 微信公众号Java开发-笔记03[] 微信公 ...

  4. Java开发笔记(三十三)字符包装类型

    正如整型int有对应的包装整型Integer那样,字符型char也有对应的包装字符型Character.初始化字符包装变量也有三种方式,分别是:直接用等号赋值.调用包装类型的valueOf方法.使用关 ...

  5. Java开发笔记(一百零三)线程间的通信方式

    前面介绍了多线程并发之时的资源抢占情况,以及利用同步.加锁.信号量等机制解决资源冲突问题,不过这些机制只适合同一资源的共享分配,并未涉及到某件事由的前因后果.日常生活中,经常存在两个前后关联的事务,像 ...

  6. Java开发笔记(二十三)数组工具Arrays

    数组作为一种组合形式的数据类型,必然要求提供一些处理数组的简便办法,包括数组比较.数组复制.数组排序等等.为此Java专门设计了Arrays工具,该工具包含了几个常用方法,方便程序员对数组进行加工操作 ...

  7. Java开发笔记(五十六)利用枚举类型实现高级常量

    前面介绍了联合利用final和static可实现常量的定义,该方式用于简单的常量倒还凑合,要是用于复杂的.安全性高的常量,那就力不从心了.例如以下几种情况,final结合static的方式便缺乏应对之 ...

  8. Java开发笔记(八十六)通过缓冲区读写文件

    前面介绍了利用文件写入器和文件读取器来读写文件,因为FileWriter与FileReader读写的数据以字符为单位,所以这种读写文件的方式被称作"字符流I/O",其中字母I代表输 ...

  9. Java开发笔记(八十八)文件字节I/O流

    前面介绍了如何使用字符流读写文件,并指出字符流工具的处理局限,进而给出随机文件工具加以改进.随机文件工具除了支持访问文件内部的任意位置,更关键的一点是通过字节数组读写文件数据,采取字节方式比起字符方式 ...

  10. Java开发笔记(五十)几种开放性修饰符

    前面介绍子类继承父类的时候,提到了public(公共)和private(私有)两个修饰符,其中public表示它所修饰的实体是允许外部访问的:而private表示它所修饰的实体不允许外部访问,只能在当 ...

最新文章

  1. c语言试题 改错题,精选二级C++试题 – 改错题
  2. android studio 打开github开源代码
  3. springMVC+ajaxFileUpload中文名乱码的问题
  4. Delphi中字符串比较大小 VS Oracle-SQL中字符串比较大小
  5. java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?
  6. MQ在计算机组成,[转载]计算机组成框图-计算机运行流程(例子)
  7. 将SqlServer的数据导出到Excel/csv中的各种方法 .
  8. 华为MSTP负载均衡配置示例
  9. reactnative资源
  10. joomla 3.6 mysql 版本_Joomla是否支持MariaDB数据库?
  11. [渝粤教育] 中国地质大学 计算机图形学(新) 复习题 (2)
  12. 如何用C语言编辑一个万年历,如何用C语言编写一个万年历系统?
  13. 基于OpenCV-python3实现抠图替换背景图
  14. usb3.0 驱动安装方法
  15. CSDN Markdown 显示连续两个中划线 --
  16. 魔鬼与牧师动作分离版
  17. java找不到文件_Java常见问题之javac Hello.java找不到文件的解决方法
  18. docker出现Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use的解决方法
  19. HDU - 2034 人见人爱A-B 【set】
  20. MEM/MBA数学基础(06)数列

热门文章

  1. 计算机硬盘存绝密,教您创建自己的绝密磁盘
  2. 使用tp5.1写api接口的流程
  3. java jar 启动脚本
  4. YII 框架相关收藏
  5. Spring Boot @ServletComponentScan 扫描 @WebServlet、@WebFilter、@WebListener
  6. Lucene 文档检索 详细说明
  7. python如何制作一个任意列表_我要悄悄学Python之列表(一)
  8. rabbitmq的发布订阅
  9. 阶段3 3.SpringMVC·_06.异常处理及拦截器_7 SpringMVC拦截器之拦截器接口方法演示
  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_6_练习_序列化集合...