摘要: 设置列格式的相关命令
阅读全文
posted @
2008-05-26 23:15 Paul Lin 阅读(929) |
评论 (0) |
编辑 收藏
摘要: 设置标题的相关命令
阅读全文
posted @
2008-05-26 22:54 Paul Lin 阅读(773) |
评论 (0) |
编辑 收藏
摘要: 和执行相关的命令
阅读全文
posted @
2008-05-26 22:50 Paul Lin 阅读(1134) |
评论 (0) |
编辑 收藏
如题,Oracle数据库里面有一批记录,现在我想根据其中一个叫:txn_date的字段来查询记录,在Hbm文件中我配置了该HQL,如下所示:
<sql-query name="job.getJobByDate">
select {job.*} from Newsletter_Message job
where to_char(:dateType,'yyyy-mm-dd hh24:mi') =
to_char(:jobDate, 'yyyy-mm-dd hh24:mi')
<return alias="job"
class="com.newsletter.domain.job.Job" />
</sql-query>
在DAO方法中我使用了Spring的HibernateTemplate,方法如下:
public List<Job> getJobByDate(final Date jobDate, final String dateType) {
return (List<Job> getHibernateTemplate().executeFind(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException {
Query query = session.getNamedQuery("job.getJobByDate");
query.setString("dateType", dateType);
query.setDate("jobDate",jobDate);
return query.list();
}
});
}
Hibernate生成的SQL语句如下
select job.TXN_NO as TXN1_5_0_,
job.TXN_TYPE as TXN2_5_0_,
job.TXN_DATE as TXN3_5_0_,
from Newsletter_Message job
where to_char(?, 'yyyy-mm-dd hh24:mi') = to_char(?, 'yyyy-mm-dd hh24:mi')
每次执行时,总是抛异常,说:
org.springframework.dao.DataIntegrityViolationException: Hibernate operation: could not execute query;
.....
Caused by: java.sql.SQLException: ORA-01722: invalid number
我实在不明白为什么会报这个错误,难道Hibernate在set date或者set string之前不会对其进行格式的转换吗?于是我又换了另外一个HQL语句,在代码里面提前将Date格式成String,但还是报错:
where to_char(dateType,'yyyy-mm-dd hh24:mi') = :strDate
后来实在没办法了,用了一阴招,代码如下,测试通过,但是觉得这种代码太丑陋了。
public List<Job> getJobByDate(final Date jobDate, final String dateType) {
return getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException {
String strDate = DateUtil.convertDateToString(jobDate,
"yyyy-MM-dd HH:mm");
Query query = session.createQuery("from Job job where "
+ "to_char(" + dateType + ",'yyyy-mm-dd hh24:mi') = '"
+ strDate + "'");
return (List<Job>) query.list();
}
});
}
不知道各位能否解析一下上面那个报错的原因,谢谢先了!
posted @
2008-05-22 16:40 Paul Lin 阅读(2250) |
评论 (0) |
编辑 收藏
【1】pfile:初始化参数文件
包含了init.ora文件,该文件定义了几个非常重要的参数:
·db_domain:数据库域名
·db_name:数据库名
·control_files:控制文件的路径,通常有3个文件
·shared_pool_size=共享池的大小
·background_dump_dest=后台进程日志、跟踪文件路径
·core_dump_dest=操作系统崩溃的日志、跟踪文件路径
·user_dump_dest=用户进程的跟踪文件路径
【2】budmp:存放由后台进程所生成的数据库Alert日志文件和跟踪文件
典型的包含了一个.log文件和一个.trc文件。
打开.log文件我们可以看到里面有很多后台进程的启动及运行信息,其中最关键的就是加载init.ora文件和起点后台进程的日志了
Starting up ORACLE RDBMS Version: 9.2.0.1.0.
System parameters with non-default values:
processes = 150
timed_statistics = TRUE
shared_pool_size = 50331648
large_pool_size = 8388608
java_pool_size = 33554432
control_files = C:\oracle\oradata\paullin\control01.ctl, C:\oracle\oradata\paullin\control02.ctl, C:\oracle\oradata\paullin\control03.ctl
db_block_size = 8192
db_cache_size = 25165824
compatible = 9.2.0.0.0
db_file_multiblock_read_count= 16
fast_start_mttr_target = 300
undo_management = AUTO
undo_tablespace = UNDOTBS1
undo_retention = 10800
remote_login_passwordfile= EXCLUSIVE
db_domain =
instance_name = paullin
dispatchers = (PROTOCOL=TCP)
job_queue_processes = 10
hash_join_enabled = TRUE
background_dump_dest = C:\oracle\admin\paullin\bdump
user_dump_dest = C:\oracle\admin\paullin\udump
core_dump_dest = C:\oracle\admin\paullin\cdump
sort_area_size = 524288
db_name = paullin
open_cursors = 300
star_transformation_enabled= FALSE
query_rewrite_enabled = FALSE
pga_aggregate_target = 25165824
aq_tm_processes = 1
PMON started with pid=2
DBW0 started with pid=3
LGWR started with pid=4
CKPT started with pid=5
SMON started with pid=6
RECO started with pid=7
CJQ0 started with pid=8
QMN0 started with pid=9
而.trc文件里面则保存了当前会话的ID
【3】cdump:存放发生崩溃的操作系统的系统进程信息
【4】create:存储创建数据库的SQL脚本
【5】udmp:存储用户进程所生成的跟踪文件
posted @
2008-05-04 17:41 Paul Lin 阅读(560) |
评论 (0) |
编辑 收藏
1.关于单元测试:
单元测试中的Test Case在设计时,有两点要注意的:
a. 测试的方法最好短小精悍,每个test case只测试一个关注的功能,假如一个方法的处理逻辑里面包含了对几种可能情况的处理,那么测试案例最好分成几个来测试,举例如下
方法: public void convertStringToDate(String string)
在实际应用过程中,传入参数string的值可能有下面几种情况:
1). Null
2). 空格
3). 非空但格式错误
4). 非空且格式正确,但值错误(如:2008-02-31 23:59:59)
5). 非空且格式、值均正确
那么如果我们在同一个测试方法中: public void testConvertStringToDate()测试所有的可能情况,会有下面两个问题:
1). 代码量增多
2). 不利于修改,假如由于业务方法中某个处理逻辑改变了,此时重新测试时必须测试所有其它的方法
3). 可能造成测试案例的顺序依赖,比如其中某个方法会抛出异常,之后的测试案例可能不会被执行到
如果我们按照上面可能出现的情况来分的话,那么就有五个测试案例,从数量上看是多了,但是后果就是每个方法都非常短小(不超过6行),简单明了,一目了然,即便测试案 例错了,我也能马上看出来。其次一个测试案例的修改不会影响到其它的测试案例。
b.测试方法是否抛出异常,可以参考下面的代码结构:
try{
调用被测试代码 // 此处的代码必须是明确会抛出异常的,因为这是我们要测试的目的
fail("Error: Must throw an exception here.");
} catch(Exception e){
assertTrue(true);
}
2.关于使用DateFormat及其子类进行字符串和日期转换的注意点:
使用DateFormat将字符串转换成Date对象时,必须注意在转换前,先调用:setLinient(false);否则的话即使实际的日期数值有问题,例如2008-04-32 23:59:59,只要格式正确,也能够被转换成功,但这在实际的应用中是没有意义的。
posted @
2008-04-28 00:37 Paul Lin 阅读(207) |
评论 (0) |
编辑 收藏
摘要: 最近在使用Oracle9i数据库进行数据插入、查询、导入/出,有时会出现乱码的情况,具体的情形有以下两种:
1.首次插入/显示乱码
2.首次插入/显示正常、但把数据用工具导出为本地文件(例如TXT)文件,再在另一个客户端中打开该文件并执行时
再次插入的数据显示为乱码。
遂在本地创建两个数据库,一个为AL32UTF8字符集,一个为ZHS16GBK字符集,配合客户端NLS_LANG的不同设置,测
试乱码的情况及进行原因分析。
希望本文能够对仍处于Oracle字符集泥潭的同仁一点帮助
阅读全文
posted @
2008-04-23 14:59 Paul Lin 阅读(7825) |
评论 (0) |
编辑 收藏
<project name="autobuildtest" default="test">
<target name="setProperties">
<property name="src.dir" value="src"/>
<property name="classes.dir" value="classes"/>
</target>
<target name="prepareDir" depends="setProperties">
<delete dir="${classes.dir}"/>
<mkdir dir="${classes.dir}"/>
</target>
<target name="compile" depends="prepareDir">
<javac srcdir="./src" destdir="${classes.dir}"/>
</target>
<target name="test" depends="compile">
<junit printsummary="yes">
<test name="onlyfun.caterpillar.test.MathToolTest"/>
<classpath>
<pathelement location="${classes.dir}"/>
</classpath>
</junit>
</target>
</project>
上面XML文件高亮处描述了Ant如何与JUnit结合进行自动化测试,name属性是你要测试的TestCase,classpath元素指明了TestCase的路径,printsummary说明了要将测试的结果简单的显示出来。
如何吧JUnit测试的详细信息显示出来呢?我们可以采用<formatter>元素,如下所示:
<junit printsummary="yes">
<formatter type="plain" usefile="false"/>
<test name="onlyfun.caterpillar.test.MathToolTest"/>
<classpath>
<pathelement location="${classes.dir}"/>
</classpath>
</junit>
当usefile属性设定为true时,会自动帮您将产生的结果储存在档案中,预设是TEST-*.txt,其中*是您的测试案例类别名称。除此之外,我们也可用采用XML的格式来保存测试结果。如下所示:
<formatter type="xml"/>
也可以将测试结果所产生的XML文件转换为HTML文件,使用Ant可以直接帮您完成这个工作,<junitreport>标签使用 XSLT将XML文件转换为HTML文件
<project name="autobuildtest" default="report">
<target name="setProperties">
<property name="src.dir" value="src"/>
<property name="classes.dir" value="classes"/>
<property name="report.dir" value="report"/>
</target>
<target name="prepareDir" depends="setProperties">
<delete dir="${report.dir}"/>
<delete dir="${classes.dir}"/>
<mkdir dir="${report.dir}"/>
<mkdir dir="${classes.dir}"/>
</target>
<target name="compile" depends="prepareDir">
<javac srcdir="./src" destdir="${classes.dir}"/>
</target>
<target name="test" depends="compile">
<junit printsummary="yes">
<formatter type="xml"/>
<test name="onlyfun.caterpillar.test.MathToolTest"
todir="${report.dir}"/>
<classpath>
<pathelement location="${classes.dir}"/>
</classpath>
</junit>
</target>
<target name="report" depends="test">
<junitreport todir="${report.dir}">
<fileset dir="${report.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${report.dir}/html"/>
</junitreport>
</target>
</project>
上面的例子,首先定义了一个property,用于指向保存测试结果的目录,接着在<test>元素中通过<todir>将结果指向该目录。然后report目标首先在todir属性指定的目录下查找名称包含:TESTd的XML文件,找到之后通过XSL转换成带frame的HTML页面,存放到子目录html下面
最终的结果可能如下:
posted @
2008-04-21 15:21 Paul Lin 阅读(649) |
评论 (0) |
编辑 收藏
【1】path和location属性的区别:
<classpath>
<pathelement path="${classpath}"/>
<pathelement location="lib/helper.jar"/>
</classpath>
原文:The location attribute specifies a single file or directory relative to the project's base directory (or an absolute filename), while the path attribute accepts colon- or semicolon-separated lists of locations. The path attribute is intended to be used with predefined paths - in any other case, multiple
elements with location attributes should be preferred.
从中我们可以看出path可以用于指向存在多个文件的位置,而location只能指向单个的文件或目录。另外path可以被设定id,供其它的path或classpath引用。如:<path id="main-classpath">,而classpath则没有
【2】综合示例:
In addition, DirSets, FileSets, and FileLists can be specified via nested <dirset>, <fileset>, and <filelist> elements, respectively. Note: The order in which the files building up a FileSet are added to the path-like structure is not defined.
<classpath>
<pathelement path="${classpath}"/> 方式① :引用特定的变量
<fileset dir="lib"> 方式② :指向特定的文件集
<include name="**/*.jar"/>
</fileset>
<pathelement location="classes"/> 方式③:指向单个目录
<dirset dir="${build.dir}"> 方式④:指向特定目录集
<include name="apps/**/classes"/>
<exclude name="apps/**/*Test*"/>
</dirset>
<filelist refid="third-party_jars"/> 方式⑤:引用指定文件列表
</classpath>
This builds a path that holds the value of ${classpath}, followed by all jar files in the lib directory, the classes directory, all directories named classes under the apps subdirectory of ${build.dir}, except those that have the text Test in their name, and the files specified in the referenced FileList.
posted @
2008-04-21 14:28 Paul Lin 阅读(1915) |
评论 (0) |
编辑 收藏
摘要: Visitor模式的一个优点体现在对集合元素的访问中:由于集合中的可访问元素都实现了Visitable接口,所以在迭代集合的过程中,我们可以将每个元素都看成是接口类型。
其次由于JAVA语言的多态性,虽然每个元素都是接口类型(Visitable),但每个元素的实现类不同,所以在调用accept方法时,虚拟机“知道”应该调起那个正确的方法(例如:集合中的一个String元素,会调用StringElement的accept方法)
阅读全文
posted @
2008-04-15 17:38 Paul Lin 阅读(4464) |
评论 (2) |
编辑 收藏