摘要: ThreadLocal中放置connection, 保证事务中的DAO类获取的都是同一个connection,这样才保证事务。下面是网上找到的一个具体的例子http://www.pin5i.com/showtopic-26854.html-----------------------------------------------------------------------------------通常我们会把事务处理放在业务层。[1]引子比如:业务逻辑方法public A bussinessMethod(){ DaoA a = new DaoA(); a.udpate(); DaoB b 阅读全文
posted @ 2011-08-06 18:41 highriver 阅读(1069) 评论(0) 推荐(0) 编辑
摘要: 批量更新:PreparedStatement并不能减少sql的执行数目. 参数传入多少次,就会执行多少条sql.在一个事务中,由于Statement与PrestatedStatement都使用的同一个连接. Statement不会再象过去每次都去获取连接. 这种情况下,反而可以利用Statement优化PreparedStatement. 减少sql的执行条数. 但是每条sql会编译,获得执行计划.示例1:质量度更新:比如关键词在审核的过程中先去查询A表,得到该词的历史质量度, 如果有,就更新B表中的质量度值. public void checkQuality() { // 先取得词的历史质量 阅读全文
posted @ 2011-08-03 18:29 highriver 阅读(748) 评论(0) 推荐(0) 编辑
摘要: decode有点类似java中的switch case. 只能针对具体的值(往往是一些类型字段的值)做判断.不针对condition做判断. Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE 一个计算是否投放(isok)的例子.DECODE ( b.istime, 1, DECODE ( a.如果处于投放时间 b.isremain, 1, DECODE ( b.如果帐户还有钱 a.check_status, 1, DECODE ( c.如果广告的状态是已审核通过 a.ispause, 0, DECODE (a.isoptimize, 阅读全文
posted @ 2011-08-03 15:28 highriver 阅读(508) 评论(0) 推荐(0) 编辑
摘要: 1.构造子表,子表只有一条记录.(dual仅返回一条记录)(SELECT 5011 AS OPID,1011 AS ACCOUNTID,2011 AS GROUPID,3013 AS IDEAID,4011 AS KEYID,0 AS CHECKSTATUS,TO_DATE('07/21/2011 14:22:50', 'MM/DD/YYYY HH24:MI:SS') AS CREATEDATE,'包含了正在审核中的元素' AS REFUSEREASON, 0 AS ADMINUSERID,'自动审核' AS ADMINUSERN 阅读全文
posted @ 2011-08-02 19:04 highriver 阅读(454) 评论(0) 推荐(0) 编辑
摘要: sql优化的一个境界是不仅要PreparedStatement,还要尽量减少sql的执行次数,大数据一般是在应用程序中通过循环嵌套形成,另一种通过表表的笛卡尔集形成.减少sql的执行次数可以通过巧妙的利用数据库的笛卡尔集实现.PreparedStatement:1.PreparedStatement的节省的时间是网络开销的时间,真正sql执行的时间大概占10%,建立网络连接的时间大概占90%.对于一些批量插入的操作,DB的服务器端仍然是逐条插入的(以前一直以为DB服务器端对于PrestatedStatement的sql只执行一次,这是错误的理解, 仍然是多次,只是这个多次是在一次连接的基础上实 阅读全文
posted @ 2011-08-02 16:15 highriver 阅读(1735) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/yuzhic/article/details/1896878http://blog.csdn.net/macle2010/article/details/5980965该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动。1,insert 和update是可选的 2,UPDATE 和INSERT 后面可以跟WHERE 子句 3,在ON条件中可以使用常量来insert 所有的行到目标表中,不需要连接到源表和目标表 4,UP 阅读全文
posted @ 2011-08-02 14:53 highriver 阅读(138493) 评论(7) 推荐(13) 编辑
摘要: 在API设计中,TOKEN用来判断用户是否有权限访问API.TOKEN首先不需要编解码处理. 一般TOKEN都是一些用户名+时间等内容的MD5的不可逆加密.然后通过一个USER_TOKEN表来判断用户请求中包含的TOKEN与USER_TOKEN表中的TOKEN是否一致即可. API设计中往往需要提供一个沙箱环境,供用户模拟调用. 所以TOKEN也需要分为测试TOKEN与运行TOKEN复杂一点的TOKEN设计可能需要数字签名的技术. 阅读全文
posted @ 2011-07-28 15:36 highriver 阅读(1111) 评论(0) 推荐(0) 编辑
摘要: 用Iterator模式实现遍历集合Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。例如,如果没有使用Iterator,遍历一个数组的方法是使用索引: for(int i=0; i<array.size(); i++) { ... get(i) ... } 而访问一个链表(LinkedList)又必须使用while循环: while((e=e.next())!=null) { ... e.data() ... } 以上两种方法客户端都必须事先知道集合的内部结构,访问代码和集合本身是紧耦合,无法将访问逻辑从 阅读全文
posted @ 2011-07-27 10:33 highriver 阅读(6775) 评论(0) 推荐(1) 编辑
摘要: 1.为什么要有过程日志:配置过程日志主要对log4j的熟悉程度. 当线上的数据库不能调试的时候,一种办法是在测试库上建立到线上库的dblink, 使用insert into table select * from t1@dblink ...导入线上的数据到测试库,通过跟踪问题数据来定位程序问题. 另一种办法就是通过详细的过程日志,看看问题数据是如何产生的, 打印详细的过程日志非常非常重要2.添加过程日志加过程日志小心空指针,最好把日志加到方法的参数检验之后。3.定位日志的常用命令:grep -# 将匹配行前后#行内容一同打印 -C# 等价于 -#选项 -B # 匹配行前#行 ... 阅读全文
posted @ 2011-07-22 14:23 highriver 阅读(424) 评论(0) 推荐(0) 编辑
摘要: 很多时候, 在linux环境下使用svn命令:通常在上线之后,需要提交的代码都是通过补丁,然后使用SVN来提交。SVN常用命令:svn revert file/path svn diff 当打了补丁之后,可以使用该命令查看是否打上。svn commit -m filename --username user 打了补丁之后,在执行之前要确认是否有新增的文件。svn add new file 新文件,首先需要add. 然后才commit. 很多时候打patch提交会生成一些新的文件,上次报错就是因为没有打上svn add。不常用命令:svn updatesvn helpsvn login user 阅读全文
posted @ 2011-06-08 18:45 highriver 阅读(1643) 评论(0) 推荐(0) 编辑