• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

如何用JDO开发数据库应用(7)

发布: 2007-7-14 21:19 | 作者: 佚名    | 来源: 网络转载     | 查看: 9次 | 进入软件测试论坛讨论

领测软件测试网 如何用JDO开发数据库应用(7)

· 4.5.1. 录入信用卡资料

为了放置业务逻辑方法,为简便起见,我们将在Main类中用静态方法来完成这些业务功能。首先,我们写一个方法来完成添加信用卡资料的功能:

/**
* 录入新信用卡,只需要录入必须的资料,其它的信息自动产生。
* @return 生成的新信用卡对象
* @throws IdCardDuplicatedException 身份证号重复,不允许创建新卡
*/
public static CreditCard inputCard(
String name,
String address,
String idcard,
String phone,
float initialBalance,
float allowOverDraft
) throws IdCardDuplicatedException {

CreditCard cc = new CreditCard();
cc.setName(name);
cc.setAddress(address);
cc.setIdcard(idcard);
cc.setPhone(phone);
cc.setInitialBalance(initialBalance);
cc.setAllowOverDraft(allowOverDraft);

//以下是自动产生的信息:
cc.setCreateTime(new Date());
cc.setBalance(initialBalance); //使刚创建后的余额等于初始余额,这是典型的业务逻辑

//下面将新信用卡保存到数据库,注意其中的JDO API。
PersistenceManager pm = getPersistenceManager();
//先检测是否已经有该身份证注册的信用卡存在:
Query q = pm.newQuery(CreditCard.class,"idcard==_newIdcard");
q.declareParameters("String _newIdcard");
Collection existCards = (Collection)q.execute(idcard);
if(existCards.iterator().hasNext()) {
throw new IdCardDuplicatedException(); //已经该身份证号存在
}

//身份证号没重复,以下保存该信用卡对象:
pm.currentTransaction().begin(); //每次对数据库的更新必须放到事务中
pm.makePersistent(cc);
pm.currentTransaction().commit(); //提交新对象
pm.close(); //释放JDO资源

return cc;
}

public static class IdCardDuplicatedException extends RuntimeException {}


下面我们运行一下这个程序,将Main.main()改写如下:

public static void main(String[] args) throws Exception {
System.out.println("开始测试功能……");

inputCard("张三","东风东路311号","223003433995431237","020-38864157",500.00f,5000.0f);
System.out.println("信用卡已创建!");
}

编译,并运行(也可以在build.xml所在目录下运行“ant run”),系统显示:

开始测试功能……
jdbc.con.connect jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=GB2312
jdbc.stat.exec set session transaction isolation level read committed
jdbc.stat.execQuery select version()
jdbc.con.rollback
jdbc.con.close
jdbc.con.connect jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=GB2312
jdbc.stat.exec set session transaction isolation level read committed
jdbc.stat.execUpdate update jdo_keygen set last_used_id = last_used_id + ? where table_name = 'transaction_record'
jdbc.stat.execQuery select max(transaction_record_id) from transaction_record
jdbc.stat.exec insert into jdo_keygen (table_name, last_used_id) values ('transaction_record', 0)
jdbc.con.commit
jdbc.stat.execUpdate update jdo_keygen set last_used_id = last_used_id + ? where table_name = 'credit_card'
jdbc.stat.execQuery select max(credit_card_id) from credit_card
jdbc.stat.exec insert into jdo_keygen (table_name, last_used_id) values ('credit_card', 0)
jdbc.con.commit
jdbc.con.commit
jdbc.con.rollback
JDO Genie: Created RMI registry on port 2388
JDO Genie: Bound to jdogenie.jdogenie1
pm.created
jdoql.compile credit.system.CreditCard
idcard==_newIdcard
jdbc.stat.execQuery select credit_card_id, address, allow_over_draft, balance, create_time, idcard, initial_balance, last_transaction_time, nme, phone, jdo_version from credit_card where idcard = ?
jdbc.con.commit
tx.begin
tx.commit
jdbc.con.connect jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=GB2312
jdbc.stat.exec set session transaction isolation level read committed
jdbc.stat.execUpdate update jdo_keygen set last_used_id = last_used_id + ? where table_name = 'credit_card'
jdbc.stat.execQuery select last_used_id from jdo_keygen where table_name = 'credit_card'
jdbc.con.commit
jdbc.stat.exec insert into credit_card (credit_card_id, address, allow_over_draft, balance, create_time, idcard, initial_balance, last_transaction_time, nme, phone, jdo_version) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
jdbc.con.commit
jdbc.con.commit
pm.closed
信用卡已创建!

以上信息说明我们的第一个功能已经正常完成,一条信用卡记录已经生成到数据库中。你可以通过mysql的数据库查询工具验证。我们发现Main函数返回后,系统并未退出运行,为什么呢?原来JDOGenie在默认的状态下打开了远程控制的监听服务,这对以后跟踪WebApp的服务器状态并进行调节时是很有用的。不过在这里只会干扰我们的视线,姑且将它关掉:在JDOGenie的工作台中,选择“File-->Project Properties”菜单,然后在弹出的项目属性配置对话框中将“Remote Access”检查框清掉,表示禁止远程访问,然后点击“OK”,并保存该Project。

然后,我们再次运行credit.system.Main,这次我们看到两个现象:一是程序扔出了异常,表示身份证号重复,这符合我们的预期;二是系统退出了,没有产生监听的线程,这即是刚才更改配置的结果。

(未完待续)

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网