- 浏览: 430288 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 1033深入理解Java内存模型(一)——基础深入理 ... -
阿里开源Mysql分布式中间件:Cobar
2014-08-12 11:54 64480这几天研究 ... -
今日开源介绍:Google Guava、Google Guice、Joda-Time
2014-08-11 11:55 18260一、Guava 是一个 Google 的基于java1.6的 ... -
Jackson 动态过滤属性
2014-06-20 16:15 3046在把java对象转换为json时,有时需要依据需求动态过滤掉 ... -
自实现CAS原理JAVA版,模拟下单库存扣减
2014-04-02 17:47 7077在做电商系统时,库存 ... -
JAVA逻辑判断工具类
2013-09-06 21:33 1770在开发过程中,经常需要对“对象”、Map、Collecti ... -
Servlet2.4 监听器
2011-06-17 17:48 1606Servlet API提供了基本的应用程序事件监听器接口。编程 ... -
JSP页面编译成Servlet类文件过程中所涉及到的编码问题
2011-02-23 12:16 2921当请求一个JSP页面时,一般的都需要经历下面几个阶段: 1 ... -
Java中的字符集编码入门(六)Java中的增补字符
2011-02-23 12:11 1485Java号称对Unicode提 ... -
Java中的字符集编码入门(五)Java代码中的字符编码转换
2011-02-23 12:08 1165如果你是JVM的设计者,让你来决定JVM中所有字符的表 ... -
Java中的字符集编码入门(四)网页文件的编码
2011-02-23 12:03 1104接着上节的思路说,一个网页要想在浏览器中能够正确显示,需要在三 ... -
Java中的字符集编码入门(三)GB2312,GBK与中文网页
2011-02-23 12:02 1264GB2312是对中国的开发人员来说很重要的一个词汇,它的来龙去 ... -
Java中的字符集编码入门(二)编码字符集与字符集编码的区别
2011-02-23 12:01 939需要再一次强调的是, ... -
Java中的字符集编码入门(一)Unicode与UCS的历史恩怨
2011-02-23 11:59 1067ASCII及相关标准 ... -
常见通信名称缩写解释
2010-09-03 16:05 2361引用 在看新闻时,购买手机时,经常听到关于通信方面的一 ... -
飞信维脉系统(定时短息发送系统)
2010-08-01 21:27 1607引用 因为工作原因 ... -
HTTP协议介绍
2010-07-28 09:45 831引用 HTTP(HyperTextTransferPro ... -
Java调用存储过程举例
2010-07-23 18:22 925Java调用oracle存储过程的示例总结如下。 ... -
Oracle数据库链接池
2010-04-13 17:28 2025引用 很多时候我们都要操作数据库,高效数据库操作的第一步 ... -
不区分大小写查找字符串(二)
2010-03-25 20:56 2316引用 上次发表了自己编写不区分大小查找的方法,这次使用了 ...
相关推荐
SQL语句一键美化工具是一款专为数据库管理员和程序员设计的应用,旨在帮助他们将混乱无序的SQL代码自动格式化为规范、易读的格式。这个工具不仅能够快速整理SQL语句,提高代码的可读性和可维护性,还允许用户根据...
在IT行业中,开发人员经常会遇到重复的工作,例如编写SQL语句和实体类代码。为了提高效率,工具化和自动化成为了必不可少的手段。"Excel生成SQL语句和实体类代码生成器"就是一个这样的实用工具,它允许开发者通过...
【图书管理系统源代码【psql 有sql语句】】是一个专为教学和实践而设计的项目,适合初学者了解和掌握数据库管理以及SQL语言在实际应用中的运用。在这个系统中,开发者使用了psql(PostgreSQL的命令行工具)来处理SQL...
在IT行业中,开发人员经常会遇到各种任务,如编写SQL语句、反编译Java类文件以及生成代码。这里,我们将探讨几个与标题和描述相关的工具和技术,这些工具可以帮助提升开发效率,减少繁琐的手动工作。 首先,让我们...
【Java SQL超市管理系统软件工程】是一个综合性的项目,它涵盖了软件开发的多个重要方面,包括需求分析、系统设计、编程实现、数据库管理以及测试。在这个项目中,Java语言被用来编写应用程序,而SQL则用于管理和...
本文将深入探讨Qt中的SQL语句及其在实际工程中的应用。 首先,Qt SQL模块通过QSqlDatabase类提供了数据库连接管理。你可以通过QSqlDatabase::addDatabase()方法创建一个新的数据库连接,并指定数据库驱动,例如...
例如,可以使用SQL语句来定义学生表,包括姓名、学号、专业等字段,同时设置相应的约束条件,如唯一性约束和非空约束,以确保数据完整性。此外,SQL还支持复杂的数据查询和分析,如通过组合不同条件筛选特定学生信息...
例如,如果“2015职业分类大典”数据库中有一个名为`jobs`的表,包含`id`(唯一标识)、`category`(类别)、`name`(职业名称)和`description`(职业描述)等字段,我们可以使用如下的SQL语句来插入一条新记录: ...
一旦连接成功,数据窗口可以通过连接直接访问数据库中的表,或者通过编写SQL语句实现更复杂的查询和操作。 在实际使用中,用户界面设计是关键。一个良好的界面应清晰展示图书信息,提供简单易用的搜索和过滤功能。...
ODBC是数据库访问的标准,而ADO是微软提供的更高级别的接口,两者都可以让MFC程序方便地执行SQL语句,进行数据操作。 在图书管理系统中,当用户在界面上进行操作时,如搜索图书,MFC会捕获这些事件并生成相应的SQL...
在这个项目中,可能使用的数据库系统如MySQL或Oracle,通过SQL语句来执行对固定资产信息的CRUD(创建、读取、更新、删除)操作。例如,创建一个"assets"表,包含资产编号、资产名称、购买日期、单价、使用部门等字段...
虽然描述中说系统“简单”,但实现这些功能仍然需要对C#语法和SQL语句有扎实的掌握,以及对软件工程的基本流程和规范有所了解。 总的来说,"学校教务管理系统VS——SQL"是一个融合了前后端开发技术的实用项目,对于...
例如,我们可以创建一个名为"Books"的表,包含"ISBN"(国际标准书号)、"Title"(书名)、"Author"(作者)、"Publisher"(出版社)、"PublicationDate"(出版日期)等字段,并使用SQL语句进行数据操作: ...
SQL语句用于数据的增删改查操作,事务处理确保数据的一致性,索引优化提升查询速度。同时,为了保证数据的安全性,可能还会涉及备份恢复策略以及权限管理。 系统开发过程中,可能会使用到ADO.NET作为数据访问层,它...
在本系统中,数据库可能包含了如"图书信息"、"读者信息"、"借阅记录"等多个表,通过SQL语句实现数据的增删改查。可能使用了索引来提升查询速度,触发器来实现自动化的业务规则,以及存储过程来封装复杂的操作逻辑。 ...
同时,系统可能会使用SQL语句与数据库交互,通过预编译的SQL语句提高安全性,防止SQL注入攻击。 数据库连接通常会使用ODBC(Open Database Connectivity)或OLE DB等接口,或者更现代的C++库如Qt的QSql或Poco Data...
开发者需要熟练掌握SQL语句,如SELECT用于查询,INSERT用于插入,UPDATE用于修改,DELETE用于删除数据。此外,数据库设计中的表结构、主键、外键等概念也是关键,它们保证了数据的完整性和一致性。 系统功能模块...
总的来说,"学生学籍管理系统vb+sql"是一个综合性的项目,它涵盖了软件工程中的需求分析、设计、编码、测试等多个阶段,同时涉及了数据库管理和用户界面设计的关键技术。对于学习VB和SQL的学生来说,通过实践这个...
开发者使用SQL语句与数据库进行交互,实现对人事数据的增删改查,确保数据的准确性和一致性。 该系统的核心部分是数据库设计,通常包括员工基本信息表、考勤记录表、薪资表等。例如,员工基本信息表可能包含员工ID...