- 浏览: 425353 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
xiesbao:
找到了,太坑爹了。
Intellij Idea 滚动条跳动的问题 -
hvang1988:
按照你说的例子,主备说的是dbtest1,dbtest2,db ...
阿里开源Mysql分布式中间件:Cobar -
hvang1988:
问个问题:一个数据库的表的全部数据只分布在一个cobar上。多 ...
阿里开源Mysql分布式中间件:Cobar -
SiKing:
多谢,一直被这个问题困扰
Intellij Idea 滚动条跳动的问题 -
guodage003:
多谢 解决了这个蛋疼的问题。。
Intellij Idea 滚动条跳动的问题
引用
之前在项目开发时候,经理要求把所有的SQL语句挑出文档化管理,也就是说要把项目中的SQL语句全部写到一起,方便以后维护。经理是一个资深技术人员,对新技术、框架没有关注的缘故吧,因为现成有很多这样的框架,hibernate,iBATIS 等都具有这个功能。这些框架,我也只是在以前用过一小段时间,不是很熟练,为了完成要求,为此特意设计一下简易、方便的SQL管理,使用方法。
模仿properties文件的性质。把所有SQL文件放在一个文件中,分别加上注释;使用一个SqlReader类静态加载所有SQL。在使用的地方直接获取其KEY就能得到该SQL语句。这样就很好,很方便的SQL语句含义注释,解决后期维护的问题。
下面分别贴出类properties的train.sql文件,SqlReader类,具体项目中调用SQL的TrainSqlReader类,和是一个TrainDao类。来演示这种方法使用。
模仿properties文件的性质。把所有SQL文件放在一个文件中,分别加上注释;使用一个SqlReader类静态加载所有SQL。在使用的地方直接获取其KEY就能得到该SQL语句。这样就很好,很方便的SQL语句含义注释,解决后期维护的问题。
下面分别贴出类properties的train.sql文件,SqlReader类,具体项目中调用SQL的TrainSqlReader类,和是一个TrainDao类。来演示这种方法使用。
1. train.sql文件 #查询火车车次信息 select_train_detail=select t.train_name from tmp_train_time t WHERE t.train_name=? AND t.station_serial=? #插入火车车次信息 insert_train_detail=INSERT INTO tmp_train_time t (t.train_name,t.station_serial,t.station_name,t.arrive_time,t.start_time,t.elapsed_time,t.distance,t.hard_based_seat,t.soft_based_seat,t.hard_sleeper,t.soft_sleeper) VALUES (?,?,?,?,?,?,?,?,?,?,?) #查询未采集车次站点价格的车次 #select_train_names=SELECT train_name FROM tmp_train_time LEFT JOIN tmp_train_price ON train_name=che_ci WHERE che_ci IS NULL GROUP BY train_name ORDER BY train_name select_train_names=SELECT train_name FROM tmp_train_time GROUP BY train_name ORDER BY train_name #查询一趟车次所有站名 select_train_station=SELECT station_name FROM tmp_train_time WHERE train_name=? ORDER BY TO_NUMBER(station_serial) #查询火车车次站点价格 select_train_price=SELECT che_ci FROM tmp_train_price WHERE che_ci=? AND chu_fa_zhan=? AND dao_da_zhan=? #插入火车车次站点价格 insert_train_price=INSERT INTO tmp_train_price (che_ci,chu_fa_zhan,dao_da_zhan,ying_zuo,ruan_zuo,ying_wo_shang,ying_wo_zhong,ying_wo_xia,ruan_wo_shang,ruan_wo_xia,yi_deng_zuo,er_deng_zuo,gao_ji_ruan_wo_shang,gao_ji_ruan_wo_xia) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) 2.SqlReader.java类。解析sql文件,根据key获取sql语句。 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.util.HashMap; /** * 读取SQL文件指定键名的SQL语句。 * * @作者 华龙 * * @日期:2010-03-12 */ public class SqlReader { private HashMap<String, String> prop = null; private static Logger log = Log4jFactory.getLogger(SqlReader.class); /** * 加载读取sql语句的配置文件。 * @param sqlFilePath sql语句配置文件 */ public void initial(String sqlFilePath) { if (prop == null) { prop = new HashMap<String, String>(); try { initial(new FileReader(sqlFilePath)); } catch (Exception e) { e.e.printStackTrace() } } } /** * 加载配置。 * * @param sqlReader 含配置的字符输入流。 * @throws IOException IO异常。 */ private void initial(Reader sqlReader) throws IOException { BufferedReader br = (sqlReader instanceof BufferedReader) ? (BufferedReader) sqlReader : new BufferedReader(sqlReader); String line = null; line = br.readLine(); for (int i = 0; line != null; i++) { line = line.trim();// 去除一行中的前后空格 if(!"".equals(line)){ String key = getKey(line); String value = getValue(line); if (key != null && !line.startsWith("#")) { prop.put(key, value); } } line = br.readLine(); } br.close(); } /** * 获取指定行键的名。 * * @param line 配置文件中的一行字符串。 * @return 该行中键的名。 */ private static String getKey(String line) { if (line == null || line.equals("")) { return null; } if (line.indexOf("=") < 0) { return null; } return line.substring(0, line.indexOf("=")).trim(); } /** * 获取指定行键的值。 * * @param line 配置文件中的一行字符串。 * @return 该行中键的值。 */ private static String getValue(String line) { if (line == null || line.equals("")) { return null; } if (line.indexOf("=") < 0) { return null; } return line.substring(line.indexOf("=") + 1).trim(); } /** * 获取指定键名的SQL语句。 * @param key 指定键名。 * @return SQL语句。 */ public String getSql(String key) { return prop.get(key); } } 3.TrainSqlReader.java类,跟据sql文件路径,加载sql文件。 import SqlReader public class TrainSqlReader { static boolean isLoad=false; static SqlReader sqlReader=new SqlReader(); public static void load(){ if(isLoad==false){ sqlReader.initial("./train/sql/train.sql"); isLoad=true; } } public static String getSql(String key){ load(); return sqlReader.getSql(key); } } 4. TrainDao.java类,这个类使用了一些其他的类没有上传,但是不影响本文的演示。 import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import com.dzd.time.train.db.TrainDBConnPool; import com.dzd.time.train.db.TrainSqlReader; import com.dzd.time.train.log.TrainLogger; import com.dzd.time.train.po.TrainBean; public class TrainDao { static Logger log=TrainLogger.getLogger(TrainDao.class); public List<String> getTrainNames(){ Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; List<String> trainNames=new ArrayList<String>(); try { conn=TrainDBConnPool.getConnection(); String sql=TrainSqlReader.getSql("select_train_names"); ps=conn.prepareStatement(sql); rs=ps.executeQuery(); while(rs.next()){ trainNames.add(rs.getString("train_name")); } } catch (Exception e) { log.error("查询所有车次名称时异常",e); } finally{ TrainDBConnPool.close(rs, ps, conn); } return trainNames; } public List<String> getTrainStations(String cheCi){ Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; List<String> trainStations=new ArrayList<String>(); try { conn=TrainDBConnPool.getConnection(); String sql=TrainSqlReader.getSql("select_train_station"); ps=conn.prepareStatement(sql); int m=0; ps.setString(++m, cheCi); rs=ps.executeQuery(); while(rs.next()){ trainStations.add(rs.getString("station_name")); } } catch (Exception e) { log.error("查询自定车次 "+cheCi+" 的站名时异常",e); } finally{ TrainDBConnPool.close(rs, ps, conn); } return trainStations; } public int insert(List<TrainBean> trainList){ Connection conn=null; PreparedStatement sps=null; PreparedStatement ips=null; ResultSet rs=null; try { conn=TrainDBConnPool.getConnection(); String ssql=TrainSqlReader.getSql("select_train_detail"); String isql=TrainSqlReader.getSql("insert_train_detail"); sps=conn.prepareStatement(ssql); ips=conn.prepareStatement(isql); for (TrainBean trainBean : trainList) { int m=0; sps.setString(++m, trainBean.getTrainName()); sps.setString(++m, trainBean.getStationSerial()); rs=sps.executeQuery(); if(rs.next()){ continue; } int n=0; ips.setString(++n, trainBean.getTrainName()); ips.setString(++n, trainBean.getStationSerial()); ips.setString(++n, trainBean.getStationName()); ips.setString(++n, trainBean.getArriveTime()); ips.setString(++n, trainBean.getStartTime()); ips.setString(++n, trainBean.getElapsedTime()); ips.setString(++n, trainBean.getDistance()); ips.setString(++n, trainBean.getHardBasedSeat()); ips.setString(++n, trainBean.getSoftBasedSeat()); ips.setString(++n, trainBean.getHardSleeper()); ips.setString(++n, trainBean.getSoftSleeper()); ips.addBatch(); } // 执行插入 int flag[]=ips.executeBatch(); // 判断是否插入成功 return flag != null && flag.length >= 0 ? 1 : -1; } catch (Exception e) { log.error("插入火车车次查询结果异常",e); } finally{ TrainDBConnPool.close(rs, ips, conn); TrainDBConnPool.close(rs, sps, conn); } return -1; } }
发表评论
-
深入理解Java内存模型
2014-11-08 16:54 980深入理解Java内存模型(一)——基础深入理 ... -
阿里开源Mysql分布式中间件:Cobar
2014-08-12 11:54 64349这几天研究 ... -
今日开源介绍:Google Guava、Google Guice、Joda-Time
2014-08-11 11:55 18191一、Guava 是一个 Google 的基于java1.6的 ... -
Jackson 动态过滤属性
2014-06-20 16:15 2983在把java对象转换为json时,有时需要依据需求动态过滤掉 ... -
自实现CAS原理JAVA版,模拟下单库存扣减
2014-04-02 17:47 6996在做电商系统时,库存 ... -
JAVA逻辑判断工具类
2013-09-06 21:33 1692在开发过程中,经常需要对“对象”、Map、Collecti ... -
Servlet2.4 监听器
2011-06-17 17:48 1525Servlet API提供了基本的应用程序事件监听器接口。编程 ... -
JSP页面编译成Servlet类文件过程中所涉及到的编码问题
2011-02-23 12:16 2842当请求一个JSP页面时,一般的都需要经历下面几个阶段: 1 ... -
Java中的字符集编码入门(六)Java中的增补字符
2011-02-23 12:11 1432Java号称对Unicode提 ... -
Java中的字符集编码入门(五)Java代码中的字符编码转换
2011-02-23 12:08 1112如果你是JVM的设计者,让你来决定JVM中所有字符的表 ... -
Java中的字符集编码入门(四)网页文件的编码
2011-02-23 12:03 1070接着上节的思路说,一个网页要想在浏览器中能够正确显示,需要在三 ... -
Java中的字符集编码入门(三)GB2312,GBK与中文网页
2011-02-23 12:02 1229GB2312是对中国的开发人员来说很重要的一个词汇,它的来龙去 ... -
Java中的字符集编码入门(二)编码字符集与字符集编码的区别
2011-02-23 12:01 901需要再一次强调的是, ... -
Java中的字符集编码入门(一)Unicode与UCS的历史恩怨
2011-02-23 11:59 1020ASCII及相关标准 ... -
常见通信名称缩写解释
2010-09-03 16:05 2290引用 在看新闻时,购买手机时,经常听到关于通信方面的一 ... -
飞信维脉系统(定时短息发送系统)
2010-08-01 21:27 1553引用 因为工作原因 ... -
HTTP协议介绍
2010-07-28 09:45 790引用 HTTP(HyperTextTransferPro ... -
Java调用存储过程举例
2010-07-23 18:22 883Java调用oracle存储过程的示例总结如下。 ... -
Oracle数据库链接池
2010-04-13 17:28 1977引用 很多时候我们都要操作数据库,高效数据库操作的第一步 ... -
不区分大小写查找字符串(二)
2010-03-25 20:56 2276引用 上次发表了自己编写不区分大小查找的方法,这次使用了 ...
相关推荐
达梦数据库_SQL语言手册.pdf 数据库快照定义语句 数据库快照删除语句 第章数据查询语句和全文检索语句 单表查询 简单查询 带条件查询 集函数 情况表达式 连接查询 子查询 标量子查询 表子查询 派生表子...
其核心思想是将 SQL 语句从 Java 代码中分离出来,在 XML 或注解中进行配置,从而实现了 SQL 与 Java 代码的分离。 以下是 MyBatis 的一些主要特点和功能: SQL 映射配置:MyBatis 使用 XML 文件或注解来描述 SQL ...
其核心思想是将 SQL 语句从 Java 代码中分离出来,在 XML 或注解中进行配置,从而实现了 SQL 与 Java 代码的分离。 以下是 MyBatis 的一些主要特点和功能: SQL 映射配置:MyBatis 使用 XML 文件或注解来描述 SQL ...
其核心思想是将 SQL 语句从 Java 代码中分离出来,在 XML 或注解中进行配置,从而实现了 SQL 与 Java 代码的分离。 以下是 MyBatis 的一些主要特点和功能: SQL 映射配置:MyBatis 使用 XML 文件或注解来描述 SQL ...
软件工程实践报告 教务管理系统 第一章 问题定义 随着学校规模的扩大,人员的不断增加、复杂程度逐渐增强,学校中,教务是一项繁 琐的事,每年都有新生入学、老生毕业,以及其他各种人事变动。每学期的考试成绩都 ...
6.2.4 标识SQL语句以便以后取回计划 153 6.2.5 深入理解DBMS_XPLAN的细节 156 6.2.6 使用计划信息来解决问题 161 6.3 小结 169 第7章 高级分组 170 7.1 基本的GROUP BY用法 171 7.2 HAVING子句 174 7.3 GROUP...
20.SQL中实用的语句帮助文档! 二、辅助功能 1.对IP或域名进行端口测试 2.获取当前外网IP地址 3.直接远程连接当前连接IP 4.网整测试当前连接的情况 5.格式化JSON格式内容 联系方式:75934092@qq.com或可直接加QQ:...
执行Sql语句的过程具体来说是这样做的,首先,在输入窗口输入您向执行的Sql语句,如“select * from table”之类,当然您更可以通过表格的右键菜单来获得常用的sql语句(在输入或是粘贴文本的过程中,Sql语句中的...
项目目标:利用计算机技术和信息技术实现销售管理的信息化,达到客户管理、合同管理、业务管理的规范有序、信息查阅快速准确、事务处理方便高效的要求,及时跟踪企业营销目标并适时进行结构化分析,为营销策略的修正...
20.SQL中实用的语句帮助文档! 二、辅助功能 1.对IP或域名进行端口测试 2.获取当前外网IP地址 3.直接远程连接当前连接IP 4.网整测试当前连接的情况 注:本软件使用次数为10次,因本软件需要大家的建议。功能还在...
20.SQL中实用的语句帮助文档! 二、辅助功能 1.对IP或域名进行端口测试 2.获取当前外网IP地址 3.直接远程连接当前连接IP 4.网整测试当前连接的情况 注:本软件使用次数为10次,因本软件需要大家的建议。功能还在...
20.SQL中实用的语句帮助文档! 二、辅助功能 1.对IP或域名进行端口测试 2.获取当前外网IP地址 3.直接远程连接当前连接IP 4.网整测试当前连接的情况 5.格式化JSON格式内容 注:本软件使用次数为10次,因本软件需要...
根据市场上所具有的学生管理系统得,目前市面上的学生管理系统大多是具有增删查改等几部分内容,所面向的群体是中高校的教师群体,最主要的功能是教师方便管理学生的信息。而本设计是面向小学低年级学生的管理系统,...
2.2.1可行性分析 A 技术可行性:对Delphi能够运用自如,对SQL语句熟练掌握运用。 B 经济可行性:开发费用合理 C 操作可行性:能够良好的解决用户需要的问题 第三章 需求分析 3.1功能需求 3.1.1系统目标 通过本...
为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下文区。这个区包含了已经处理完的行数、指向被分析语句的指针,整个区是查询语句返回的数据行集。游标就是指向上下文区句柄或指针。 显示游标 显示游标...
在学生学籍管理系统的开发过程中,主要使用了嵌入式SQL语句和动态SQL语句在程序中灵活地操纵数据库。 关键字:SQL语言 对象 窗口 数据窗口 控件 一、概述 1.1 项目的背景及意义 学生学籍管理工作是学校管理工作...
6、如果成功,那么工程中的"演示时需要的数据库脚本.sql"文档打开,拷贝也相应的SQL语句,创建应用所需要的表 7、创建表成功之后,自己写insert语句给测试数据 8、如果以上步骤完成,那么在工程中运行...
查看系统空间占用情况、系统初始化、查看服务器信息及到在线直接执行SQL语句。 <br>CreateLive CMS v4.2 What's New 1,修正跨频道移动后,连接地址不变 2,修正{$ChannelDir}等标签不随频道变换 3...