JDBC数据库编程范例

Author Avatar
Euan 10月 28, 2019
  • 在其它设备中阅读本文章

JDBC数据库编程范例

摘要

本次实验的主要内容是连接数据库分页显示记录并更新数据库记录,通过这个实验掌握在JSP中使用JDBC访问数据库的方法,以及对数据库记录进行分页显示和更新记录的方法。

准备工作

1.安装MySQL (可在云班课的“资源”共享文件夹中找到下载软件)

  1. 安装JDBC驱动 (可在云班课的“资源”共享文件夹中找到下载软件)
    JDBC驱动程序:mysql-connector-java-5.1.42-bin.jar,将此文件放入新创建的工程(本实验范例是class工程)文件夹的WebContent\WEB-INF\lib目录下(可在云班课的“资源”共享文件夹中找到并下载class压缩文件,此JDBC驱动程序已经放入相应的lib目录下)。
  2. 其他所需相关软件如Tomcat和Eclipse的安装调试之前已经介绍过,这里不再重复。

编程思路

  1. 启动并登录MySQL, 创建数据库test。(参考命令行:create database test;)
  2. 导入事先定义好的数据库文件test-dump.sql (存放在source 文件夹中,可在云班课的“资源”共享文件夹中找到并下载),拷贝到本地数据库文件test。
    ( 参考命令行:mysql -u root -p test < ...(本地存放test-dump.sql的路径)\test-dump.sql)
    (备注:输入此命令行前需要先退出MySQL, 在Windows命令行中输入此命令行)

代码分析

JDBC是Java 数据库连接(Java Database Connectivity) 的缩写,它由一组用Java 编程语言编写的类和接口组成。有了JDBC API, 就不必为访问不同的数据库(比如Sybase, Oracle和Informix)编写不同的程序了。只需用JDBC API编写一个程序就可向相应数据库发送SQL语句。本次实验范例中主要是对ResultSet对象的操作。首先定义数据库查询结果集rs (ResultSet rs=null;), 然后连接数据库(test) 并创建Statement 对象
String sConnStr = “jdbc:mysql://localhost/test?user=”+username+”&password=”+password+”&useUnicode=true&characterEncoding=utf8”;
try {
conn = DriverManager.getConnection(sConnStr);
conn.setAutoCommit(true);
//建立Statement 对象并设置指针可前后移动
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE , ResultSet.CONCUR_READ_ONLY);
}catch(Exception e) {
System.err.println(“数据库连接错误: “ + e.getMessage());
out.print(“数据库连接错误”);
return;
}

在有了Statement 对象后,可以通过Statement 执行SQL 语句来获得查询结果
try{//从表midwareclass中取出数据
rs=stmt.executeQuery(“select * from midwareclass”);
}catch(SQLException ex){
System.err.println(“数据库查询错误: “+ex);
}
运行结果
1.classview.jsp 的运行结果如下:

KorthV.png

  1. update.jsp 的运行结果如下:
    首先输入midwareclass表中已有的一位同学的学号和姓名:(例如:1451325 钟宇)

KorETI.png

  1. 然后再次运行classview.jsp,可以看到已经更新的数据库:

KorZkt.png

步骤

很久很久以前部署过jdbc的项目,不过现在忘了如何操作,刚好重新练手.

安装配置,一开始tomcat又不好用了,端口冲突-更换端口号;
后来遇到无法等待时间超过45s,网上教程都没用,自己新建用了一个server就好了,这次的server只引入一个项目,然后就可以启动tomcat了,自己认为可能eclipse还是太膨胀,内存堆栈导致时间长等等。。

首先官网下载connect/J jdbc,根据教程把jdbc中的两个jar包引入到项目中

Kormff.png

再通过navicat运行sql脚本,后更新了test数据库;

KoretP.png

修改代码中的password,运行
很正常,error

Korup8.png

数据库连接错误

KorK1S.png

命名自己更换密码后保存文件再运行的啊?
在次运行,虽然密码对了,但是还是报错
于是cmder去看看mysql有什么端倪

KorQXQ.png

命名数据库名是没有错的,而且navicat也可以正常显示

Kor1mj.png

突然发现没有端口,加上后运行
还是错误,看到这个url感觉还是有点别扭,毕竟&和?这种带参数restful架构已经落后的,目前流行全部用/来代表参数。网上查阅资料看看有没有sConnStr的其他表现形式

Kor30s.png

替换源代码,运行,依旧报错
网上查找

Kor87n.png

貌似第一步只是引入,没有添加到lib下
作为素质良好的程序员顺便查了一下hibernate
附:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
发现是个好东西(orm),有了它就可以不用写sql语句了

回来继续改bug,添加了之后运行还是报错

算了,先运行update.jsp吧

KorJkq.png

闲着无聊reflash了一下项目,并restart了server,好了

KorYt0.png
KorUpT.png

开始吐槽ide,隔壁的pycharm也是java写的,但人家确实做得不错,包括这次的自动保存功能。。

Kora1U.png

秀一下小工具

KordcF.png

看到只有10页,修改了一下url为11和12,竟然都能显示,还是有点小bug

本文使用 CC BY-NC-SA 3.0 中国大陆 协议许可
具体请参见 知识共享协议

本文链接:https://zyhang8.github.io/2019/10/28/j2ee-exp2/