- 浏览: 305328 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
liuyong19832011:
,赞一个
Java通过BufferedWriter追加内容到文件末尾的几种常用方法 -
justjavac:
总结很好,怎么没人支持呢?最近发现iteye踩贴现象很严重。
shell数组的使用
[转]Java读取解析sql文件,并使用netiler dao执行sql
- 博客分类:
- JAVA
转至:
最近在做系统数据初始化,采用sql形式导入基础数据,这里记录下编码过程。
导出的sql文件已经放在dao目录下了。
先来写个方法读取sql文件:
/**
* 加载解析sql文件
* @param sqlFile
* @return
* @throws Exception
*/
private static List<String> loadSql(String sqlFile) throws Exception {
List<String> sqlList = new ArrayList<String>();
try {
InputStream sqlFileIn = new FileInputStream(sqlFile);
StringBuffer sqlSb = new StringBuffer();
byte[] buff = new byte[1024];
int byteRead = 0;
while ((byteRead = sqlFileIn.read(buff)) != -1) {
sqlSb.append(new String(buff, 0, byteRead,"utf-8"));
}
sqlFileIn.close();
// Windows 下换行是 \r\n, Linux 下是 \n
String[] sqlArr = sqlSb.toString()
.split("(;\\s*\\r\\n)|(;\\s*\\n)");
for (int i = 0; i < sqlArr.length; i++) {
String sql = sqlArr[i].replaceAll("--.*", "").trim();
if (!sql.equals("")) {
sqlList.add(sql);
}
}
return sqlList;
} catch (Exception ex) {
throw new Exception(ex.getMessage());
}
}
即把sql文件读取出来,解析成单条sql语句。
下面是action执行方法
/**
* 执行sql,初始化系统基础数据
* @return
*/
public Object init(){
List<String> list = new ArrayList<String>();
try {
list = loadSql("D:\\workspace\\com.leadal.netiler.install\\web\\data\\dao\\newclips.sql");
int i=0;
service.setProgess(0);
service.setExecute(true);
int size = list.size();
for(String sql:list){
if(!service.getExecute()){
service.setProgess(100);
break;
}
service.executeSql(sql);
i++;
service.setProgess(100*i/size);
}
ActionMessage.info("基础数据初始化成功!");
} catch (Exception e) {
e.printStackTrace();
ActionMessage.error("初始化失败!");
}
return this;
}
由于是测试,sql文件直接写了个绝对路径。
service调用dao的executeSql(String sql)方法
netiler dao:
@Dao("Netiler.Install.Init.InitBasicData")
public interface InitBasicDataDao {
@Paramable("sql")
public void executeSql(String sql);
}
Netiler Dao dao文件写法:
<?xml version="1.0" encoding="UTF-8" ?>
<sql>
<result id="result" auto="true">
</result>
<statement id="executeSql" result="result">
<![CDATA[
#parse($sql)
]]>
</statement>
</sql>
这里使用statement,定义了个自动类型的result。
过程中遇到几个问题,一个是返回值的,另一个是sql文件包含指令如#if()时,#if()括号里为空字符,解析时有点问题,最后把#if()换成#if(1==1)
2013/5/31 10:35 补充与修改:
在数据插入后,发现部分中文数据是乱码的,经过初步分析,乱码的位置都很有规律,即总是固定的位置出现中文乱码了。这里得到结果是,字节流解析的时候没有处理中文的问题,因为汉字是占两个字节的,当一个汉字刚好占1024-1025字节时,汉字就被拆开了。
解决的方法有两种,一种是继续使用字节流解析,但是对汉字需要进行特殊处理,即通过对比ASCII码大小来确定是否是汉字而进行拼接操作。这样显然是比较麻烦的,当然肯定可以实现。
这里笔者采用字符流行读取形式进行读取解析,贴上代码
/**
* 加载解析sql 读取方式字符流 行读取
* @param sqlFile
* @return
* @throws Exception
*/
private List<String> loadSql2(String sqlFile) throws Exception{
List<String> sqlList = new ArrayList<String>();
try {
FileReader fr = new FileReader(sqlFile);
BufferedReader br = new BufferedReader(fr);
String s="";
StringBuffer sb = new StringBuffer();
while ((s = br.readLine()) != null) {
if(s.startsWith("/*")||s.startsWith("--")){
}
else if(s.endsWith(";")){
sb.append(s);
sqlList.add(sb.toString());
sb.delete(0, sb.length());
}
else{
sb.append(s);
}
}
fr.close();
br.close();
// for(String sql : sqlList){
// System.out.println("sql:"+sql);
// }
} catch (Exception e) {
throw new Exception(e.getMessage());
}
return sqlList;
}
经过测试,乱码问题得到解决
最近在做系统数据初始化,采用sql形式导入基础数据,这里记录下编码过程。
导出的sql文件已经放在dao目录下了。
先来写个方法读取sql文件:
/**
* 加载解析sql文件
* @param sqlFile
* @return
* @throws Exception
*/
private static List<String> loadSql(String sqlFile) throws Exception {
List<String> sqlList = new ArrayList<String>();
try {
InputStream sqlFileIn = new FileInputStream(sqlFile);
StringBuffer sqlSb = new StringBuffer();
byte[] buff = new byte[1024];
int byteRead = 0;
while ((byteRead = sqlFileIn.read(buff)) != -1) {
sqlSb.append(new String(buff, 0, byteRead,"utf-8"));
}
sqlFileIn.close();
// Windows 下换行是 \r\n, Linux 下是 \n
String[] sqlArr = sqlSb.toString()
.split("(;\\s*\\r\\n)|(;\\s*\\n)");
for (int i = 0; i < sqlArr.length; i++) {
String sql = sqlArr[i].replaceAll("--.*", "").trim();
if (!sql.equals("")) {
sqlList.add(sql);
}
}
return sqlList;
} catch (Exception ex) {
throw new Exception(ex.getMessage());
}
}
即把sql文件读取出来,解析成单条sql语句。
下面是action执行方法
/**
* 执行sql,初始化系统基础数据
* @return
*/
public Object init(){
List<String> list = new ArrayList<String>();
try {
list = loadSql("D:\\workspace\\com.leadal.netiler.install\\web\\data\\dao\\newclips.sql");
int i=0;
service.setProgess(0);
service.setExecute(true);
int size = list.size();
for(String sql:list){
if(!service.getExecute()){
service.setProgess(100);
break;
}
service.executeSql(sql);
i++;
service.setProgess(100*i/size);
}
ActionMessage.info("基础数据初始化成功!");
} catch (Exception e) {
e.printStackTrace();
ActionMessage.error("初始化失败!");
}
return this;
}
由于是测试,sql文件直接写了个绝对路径。
service调用dao的executeSql(String sql)方法
netiler dao:
@Dao("Netiler.Install.Init.InitBasicData")
public interface InitBasicDataDao {
@Paramable("sql")
public void executeSql(String sql);
}
Netiler Dao dao文件写法:
<?xml version="1.0" encoding="UTF-8" ?>
<sql>
<result id="result" auto="true">
</result>
<statement id="executeSql" result="result">
<![CDATA[
#parse($sql)
]]>
</statement>
</sql>
这里使用statement,定义了个自动类型的result。
过程中遇到几个问题,一个是返回值的,另一个是sql文件包含指令如#if()时,#if()括号里为空字符,解析时有点问题,最后把#if()换成#if(1==1)
2013/5/31 10:35 补充与修改:
在数据插入后,发现部分中文数据是乱码的,经过初步分析,乱码的位置都很有规律,即总是固定的位置出现中文乱码了。这里得到结果是,字节流解析的时候没有处理中文的问题,因为汉字是占两个字节的,当一个汉字刚好占1024-1025字节时,汉字就被拆开了。
解决的方法有两种,一种是继续使用字节流解析,但是对汉字需要进行特殊处理,即通过对比ASCII码大小来确定是否是汉字而进行拼接操作。这样显然是比较麻烦的,当然肯定可以实现。
这里笔者采用字符流行读取形式进行读取解析,贴上代码
/**
* 加载解析sql 读取方式字符流 行读取
* @param sqlFile
* @return
* @throws Exception
*/
private List<String> loadSql2(String sqlFile) throws Exception{
List<String> sqlList = new ArrayList<String>();
try {
FileReader fr = new FileReader(sqlFile);
BufferedReader br = new BufferedReader(fr);
String s="";
StringBuffer sb = new StringBuffer();
while ((s = br.readLine()) != null) {
if(s.startsWith("/*")||s.startsWith("--")){
}
else if(s.endsWith(";")){
sb.append(s);
sqlList.add(sb.toString());
sb.delete(0, sb.length());
}
else{
sb.append(s);
}
}
fr.close();
br.close();
// for(String sql : sqlList){
// System.out.println("sql:"+sql);
// }
} catch (Exception e) {
throw new Exception(e.getMessage());
}
return sqlList;
}
经过测试,乱码问题得到解决
发表评论
-
[转] System.out.println()和System.out.write()的区别
2013-12-27 16:14 899转至:http://blog.chinaunix.net/ui ... -
[转]Java 单例模式详解
2013-08-20 11:15 795转至:http://www.cnblogs.com/whgw/ ... -
[转]Java synchronized详解
2013-08-07 19:12 856转至:http://www.cnblogs.com/devin ... -
[转]Java Socket Programming-Transferring large sized files through socket
2013-08-06 18:26 2871转至:http://www.coderpanda.com/ja ... -
【转】java如何从ftp下载超大文件
2013-08-06 00:28 2051转至: http://www.2cto.com/k ... -
【转】java大数据处理(千万级别FTP下载)
2013-08-06 00:20 1532转至:http://www.th7.cn/Program/ja ... -
Jakarta-Common-IO使用笔记
2013-08-05 14:11 1023转至: http://tech.ddvip.com/2008- ... -
[转]StringUtils详细介绍
2013-07-24 17:31 1299原文地址:http://www.blogj ... -
[转]BeanUtils.copyProperties()的用法
2013-07-24 15:16 2692原文地址: http://blog.csdn.net/itmy ... -
[转]Java内存泄漏
2013-04-10 13:45 875http://www.cnblogs.com/dotnetdo ... -
【转】java实现导出Excel文件和XML文件
2013-03-07 23:00 1403http://www.2cto.com/kf/201208/1 ... -
Java中split的注意事项
2013-01-22 00:08 1058stringObj.split([separator,[lim ... -
Struts2.2.1注解方式使用json整合jquery getJson方法
2013-01-10 22:53 01.引入与json相关的jar文件: json-lib ... -
ssh2常用annotation
2012-01-30 21:54 1005Spring annotation: @Servic ... -
Java日期类型与String的转换
2011-11-04 14:30 91521.String转Date SimpleDateFormat ... -
Java调用批处理或可执行文件[转载]
2011-07-22 17:17 756http://www.blogjava.net/supercr ... -
Java通过BufferedWriter追加内容到文件末尾的几种常用方法
2011-07-18 16:15 33837import java.io.BufferedWriter; ... -
JAVA map的遍历
2011-07-05 09:07 1021第一种entrySet,效率较高,推荐用这种: Map ... -
java.lang.OutOfMemoryError: Java heap space 的解决[转载]
2011-05-27 14:00 10451、首先是:java.lang.OutOfMemoryErro ... -
synchronized与static synchronized 的区别
2011-02-22 14:37 29071.synchronized与static synchro ...
相关推荐
C# Winform 图书管理系统,数据库使用SQLServer,源码功能实用,使用经典MVC分层模式,代码清晰、注释完整,非常适合初学者学习或有相应软件需求的二次开发借鉴、源码收藏。 该源码包含各数据表完整的增删改查功能...
初学C#时用VS2003开发的一个读取MS SQLServer数据库架构信息,进而生成简单的C#或者java实体类代码的小程序。 旨在学习交流使用。
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util....
把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。 明确: 我们在实际开发中,都是越简便越好,...
4.2.3使用jdbc读取数据 69 4.3项目实战——存储图书信息 73 本章小结 78 课后练习 79 第5章struts2框架基础 80 5.1mvc框架 80 5.1.1model1与model2 80 5.1.2mvc设计模式 81 5.1.3struts2框架的mvc架构 82 ...
答:JDBC数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问。 什么情况下不建议使用Hibernate? 答:当数据量大,并且表关系复杂的时候不建议使用。 sleep()和wait()有什么区别? ...
运行前先修改jdbc.properties文件,可以加入jtds的SQL Server驱动包使用SQL Server进行运行。运行时,使用是通过http://localhost:8080/uleweb/user/user_addUser.do进行添加测试,...
该项目包括使用JDBC与ORACLE银行进行通信,并在IREPORT中输出报表,从而创建Java中的收支控制系统。 CRUD :(创建,读取,更新和删除)是提供给系统用户的关系数据库中使用的四个基本操作。 其他首字母缩写词可...
把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。 明确: 我们在实际开发中,都是越简便越好,...
把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。 明确: 我们在实际开发中,都是越简便越好,...
222 如何从文本文件中读取一个字符串? 第12章 文件与文件夹属-操作 223 如何判断文件只读属性? 224 如何设置文件只读属性? 225 如何判断文件隐藏属性? 226 如何设置文件隐藏属性? 227 如何判断文件归档属性? 228 ...
作者采用两种方法:SQL和DAO类函数来混合实现Access文件的操作。 关键字:dao,access,CDaoDatabase,CDaoRecordset,Execute,AddNew,SetFieldValue,Update
MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 全书分为两部分,需 要全部下载下载一起解压,此部分为第一部分 带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 ...
MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发...
13.4.3、读取资源文件 13.4.4、数字格式化标签 13.4.5、日期时间格式化标签 13.4.6、设置时区 13.5、SQL标签库 13.5.1、<sql:setDataSource> 13.5.2、数据库操作标签 13.5.3、事务处理 13.6、XML...
MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 全书分为两部分,需 要全部下载下载一起解压,此部分为第二部分 带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 ...
或者我们有一个中间的结果,如果放到数据库中通过sql操作会更加的直观,处理后再将结果读取到DataFrame中。这两个场景,就需要用到DataFrame的to_sql操作。 具体的操作 连接数据库代码 import pandas as pd from ...
第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器...