服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

mysql实施jdbc 2.0/3.0 api的新特性学习实践


  --在jsp+mysql+resin+win2000环境下实施网络程序开发笔记

  [序] 昨天一天都没有调试出上传图像到数据库中的程序,虽然查了csdn,但所查资料都不好使。今天想起了几个关键点没有仔细的试到,主要是jdbc api新功能到底对mysql有没有作用,如果不行,为什么mysql driver包中的resultset类中有新的api方法?另外,upload包的几个类对添加图像到数据库中到底行不行。不管行还是不行,我得再仔细试一下。因昨天曾测试通过了jdbc api新的更新方法,所以计划今天先调试上传图像到数据库中程序,经过一小段时间的调试,终于通过,调用图像显示程序一试,图像出来了,试试jpg格式的图像,也成功了,真是大快人心。数据库保存图像功能调试成功为我调试jdbc api新的插入功能增加了信心,几经周折也成功了,为了记住这一过程,我想想还是写下来。

  原定目标:通过网络,把客户端的gif或jpg图像文件存到服务器端的mysql数据库中。
  设计思路:做一个供客户使用的表单,客户通过该表单可查找客户端的图像文件,并提取该文件的文件名于表单输入框中。客户提交表单后,将激活服务器端的insertpic.jsp,通过insertpic.jsp保存图像文件的数据到数据库中。
  在实施过程中又遇到和攻克了新的难题:jdbc新的api插入、更新、删除指令如何使用;upload包如何使用,学习和演示了《java servlets编程指南》上提供的连接池,图像显示程序。
  具体编程思路、遇到的问题,小结:
  1、数据库表名:javadoc;保存图像数据的字段用blob或mediumblob或longblob类型的。
  建立数据表的sql语句如下:

  sql = "create table javadoc (" +
    "gid int(11) not null auto_increment," +
    "gheading varchar(100)," +
    "gimage longblob," +
    "primary key (gid))";

  2、表单上的查找并提取图像文件名的输入框用下面的语句实现:
    

图像


  3、表单的
要加入下面的属性和属性值:
    enctype="multipart/form-data"
  加入该属性后,该表单就不能再同时作为传输其他数据字段的表单了,如不能再传送串字段。
  4、启用upload包,内含file.class、files.class、request.class、smartupload.class、smartuploadexception.class,来协助保存图像,以降低开发难度。
  几个类的原代码见相关文件,file类公用方法已粘在相关的jsp文件中。
  5、jdbc新的api插入、更新、删除功能,具体步骤如下:
  插入一个记录的步骤:
    (1)准备一个空记录:movetoinsertrow();
    (2)填入数据:updatexxx();
    (3)实施插入:insertrow();
  更新一个记录步骤:
    (1)定位记录:用absolute()或relative()等方法;
    (2)填入新值:updatexxx();
    (3)实施更新:updaterow();
  删除一个记录的步骤:
    (1)定位记录:用absolute()或relative()等方法;
    (2)实施删除:deleterow();
  6、插入数据遇到的问题:我在保存图像的表中设计了一个自动增量的gid字段,并定义为not null。在通常用sql语句插入新值的情况下,可以忽略对该字段插值,数据库会自动赋值。但在使用jdbc api插入记录的过程中发现,对该字段不能不管,必须调用rs.updatelong("gid" ..)赋值,否则系统会出现异常。我也想到并试过申请一个不包含该字段的游标,然后对该游标执行上面的几个插入记录的步骤,但也出现异常。另外,我的表中还有一个gheading的字段,该字段缺省值没定义,建立一个不包含该字段的游标然后执行插入新记录的操作是可以通过的,即执行插入操作对gheading这类字段可以忽略不用管它。由此我推断,只要是被说明为not null的字段,你在使用jdbc新的api进行插入记录编程时不能忽略它,必须要显式的赋值,否则系统会出现异常。
  7、对自动增量的字段在进行插入记录编程时如何为其赋新值?
  我的方案是这样:
  (1)使用select * form tablename order by gid 申请游标,其中gid为自动增量并不能为null的字段,为了简单,假设该游标不会为空;
  (2)对游标last()一下,到游标的底部;
  (3)取gid字段的值赋给一个临时变量mid;
  (4)mid++;
  (5)对gid字段实行 updatelong("gid",mid);
  ...
  8、对自动增量的字段插入记录编程按上述步骤赋新值还要考虑的问题?
  我认为要考虑为记录上锁,否则仍有出现异常的潜在问题。
  今天就到此为止吧。(飒龙)

扫描关注微信公众号