- 浏览: 311787 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
liuyong19832011:
,赞一个
Java通过BufferedWriter追加内容到文件末尾的几种常用方法 -
justjavac:
总结很好,怎么没人支持呢?最近发现iteye踩贴现象很严重。
shell数组的使用
转至:
最近在做系统数据初始化,采用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 992转至:http://blog.chinaunix.net/ui ... -
[转]Java 单例模式详解
2013-08-20 11:15 830转至:http://www.cnblogs.com/whgw/ ... -
[转]Java synchronized详解
2013-08-07 19:12 952转至:http://www.cnblogs.com/devin ... -
[转]Java Socket Programming-Transferring large sized files through socket
2013-08-06 18:26 2920转至:http://www.coderpanda.com/ja ... -
【转】java如何从ftp下载超大文件
2013-08-06 00:28 2149转至: http://www.2cto.com/k ... -
【转】java大数据处理(千万级别FTP下载)
2013-08-06 00:20 1636转至:http://www.th7.cn/Program/ja ... -
Jakarta-Common-IO使用笔记
2013-08-05 14:11 1062转至: http://tech.ddvip.com/2008- ... -
[转]StringUtils详细介绍
2013-07-24 17:31 1337原文地址:http://www.blogj ... -
[转]BeanUtils.copyProperties()的用法
2013-07-24 15:16 2737原文地址: http://blog.csdn.net/itmy ... -
[转]Java内存泄漏
2013-04-10 13:45 924http://www.cnblogs.com/dotnetdo ... -
【转】java实现导出Excel文件和XML文件
2013-03-07 23:00 1451http://www.2cto.com/kf/201208/1 ... -
Java中split的注意事项
2013-01-22 00:08 1095stringObj.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 1046Spring annotation: @Servic ... -
Java日期类型与String的转换
2011-11-04 14:30 92031.String转Date SimpleDateFormat ... -
Java调用批处理或可执行文件[转载]
2011-07-22 17:17 817http://www.blogjava.net/supercr ... -
Java通过BufferedWriter追加内容到文件末尾的几种常用方法
2011-07-18 16:15 33931import java.io.BufferedWriter; ... -
JAVA map的遍历
2011-07-05 09:07 1074第一种entrySet,效率较高,推荐用这种: Map ... -
java.lang.OutOfMemoryError: Java heap space 的解决[转载]
2011-05-27 14:00 10861、首先是:java.lang.OutOfMemoryErro ... -
synchronized与static synchronized 的区别
2011-02-22 14:37 29701.synchronized与static synchro ...
相关推荐
在这个特定的“java自动化之自动化框架项目”中,第五天的主题聚焦于“解析并执行初始化SQL”。这个过程涉及到数据库的前期准备,确保测试环境的一致性和可重复性。下面将详细讲解这个过程中的关键知识点。 首先,...
这些框架允许我们将SQL语句封装在Java代码中,通过注解或XML配置文件进行管理,从而提高开发效率和代码的可读性。 在执行SQL时,我们需要了解以下关键点: 1. **数据访问层(DAO)**:这是微服务中负责与数据库...
3. **运行MyBatis Generator**:在IDEA中运行MyBatis Generator,它会根据配置文件中的设置,读取数据库表信息并生成相应的Java代码。 4. **使用生成的代码**:生成的实体类可以直接在业务逻辑中使用,Mapper接口和...
Mapper XML文件包含了SQL语句的具体实现,与DAO接口对应,MyBatis框架会根据这些XML文件动态生成SQL执行。 在使用MBG之前,你需要准备以下几样东西: 1. 数据库连接信息:包括数据库URL、用户名和密码,这是MBG连接...
如果需要读取SQL脚本文件执行,可以使用MFC的`CFile`类来打开和读取文件内容。 5. **代码结构**: - 通常,会有一个主函数(如`int main()`)来初始化MFC应用,并调用连接数据库和执行SQL的函数。 - 连接函数会...
7. **代码生成器**:BeetlSQL附带的代码生成器可以帮助开发者快速生成实体类、Mapper接口、Mapper XML文件以及对应的DAO实现类,极大地减少了重复工作。 8. **兼容性**:BeetlSQL兼容多种主流的数据库,包括MySQL、...
在“基于Java的SQL数据库开发”这一主题中,我们探讨的是如何使用Java编程语言与SQL数据库进行交互,以便实现学生管理系统的课程设计。这个系统通常包括对学生成绩、个人信息等数据的存储、检索和更新功能。以下是...
通过编写SQL语句,我们可以高效地处理大量数据并执行复杂的查询。 2. **DAO(Data Access Objects)**: DAO是Microsoft Jet数据库引擎提供的一个接口,用于与Access数据库进行交互。它允许开发者通过对象模型直接...
一旦建立了数据库连接,你可以使用Java反射API或者第三方库(如Apache Velocity或Freemarker)来遍历数据库中的表和列,并生成相应的Java实体类、DAO(Data Access Object)、Service或Repository代码。 例如,...
// 获取并执行SQL查询方法 private Method getMethod(String methodName, Class<?>... parameterTypes) { // ... } } ``` 这里,`getMethod`方法使用反射查找并返回JdbcTemplate的特定方法,然后在`save`方法中...
4. **XML配置文件**:生成的XML文件包含了SQL语句和结果映射,与DAO接口配合使用,实现数据访问。 5. **注释生成**:可根据配置为生成的代码添加详细的注释,便于理解和维护。 在使用MyBatis-SQL生成器时,需要...
Java开发过程中,DAO(Data Access Object)层是用于与数据库交互的重要组件,它封装了SQL查询,使得业务逻辑层与数据库操作分离,提高了代码的可维护性和可复用性。而Model实体类则是数据传输的对象,通常对应...
本篇文章将详细解析基于JAVA和SQL Server设计的酒店管理系统,探讨其核心功能、架构设计以及如何通过源代码实现基本操作。 一、系统概述 JAVA SQL酒店管理系统是一个集成化的解决方案,旨在简化酒店日常运营中的...
在VB6中,我们通常使用DAO的Database和Recordset对象来执行CRUD(创建、读取、更新、删除)操作。 创建数据库连接是使用DAO的第一步。在VB6中,我们可以通过以下代码创建一个Database对象: ```vb Dim db As DAO....
4. **文件I/O**:读取DBF文件时,会涉及到Java的文件I/O操作,如`java.io.File`类的使用,以及`InputStream`和`OutputStream`的子类,用于读写二进制数据。 5. **异常处理**:由于文件操作可能会出现各种异常,如...
在Microsoft Access中,虽然默认界面并不直接支持用户输入并执行SQL语句,但可以通过编程接口实现这一功能。这里提到的“让Access执行用户手工输入的SQL”是指利用数据访问对象(DAO)技术来扩展Access的功能,允许...
3. 数据访问对象(DAO):JAVA的JDBC(Java Database Connectivity)接口用于与SQL Server建立连接,实现数据的CRUD(创建、读取、更新、删除)操作。 二、SQL Server数据库管理 SQL Server作为后端数据库,具有高...
3. **Mapper接口和XML映射文件**:Mapper接口是DAO接口的具体实现,它通过MyBatis的动态SQL功能来执行SQL。XML映射文件则包含了具体的SQL语句,包括元素(用于设置参数)、元素(用于获取结果集)。MBG会根据表的...
在 DAO 中,我们需要使用 PreparedStatement 来执行 SQL 语句,並insert一个空 BLOB 对象,然后 Update 这个空对象。 在 Struts 项目中,我们可以使用以下代码来实现大对象的上传: ```java // 新增 if (action...
在DAO中,应该捕获并适当地处理可能发生的数据库相关异常,如SQL异常,同时记录这些异常信息,以便于后续的调试和问题排查。异常处理可以帮助防止数据的不一致性和程序的意外终止。 **日志记录**是跟踪和诊断问题的...