import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* convert only for specified SQLs
*/
public class SqlUitl {
public static void main(String[]args) throws IOException{
File file = new File("D:\\inputSG.SQL");
InputStreamReader isr = new InputStreamReader(new FileInputStream(file) ,"UTF-8");
// System.out.println(isr.getEncoding());
BufferedReader br= new BufferedReader(isr);
//FileWriter fw = new FileWriter("D:\\convertedfile.SQL");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\outputSG.SQL"), "UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
String convertedSQL = null;
String line = br.readLine();
int delNum = 0;
int insNum = 0;
while(line != null)
{
if(line.trim().toLowerCase().indexOf("delete from")>=0)
{
delNum++;
System.out.println("delNum : "+delNum);
convertedSQL = getConvertedInsertSQL(line);
}
else if(line.trim().toLowerCase().indexOf("insert into")>=0)
{
insNum++;
System.out.println("insNum : "+insNum);
convertedSQL = getConvertedDeleteSQL(line);
}
else
{
line = br.readLine();
bw.newLine();
continue;
}
System.out.println(line);
bw.write(convertedSQL);
bw.newLine();
line = br.readLine();
}
System.out.println("delNum : "+delNum+" insNum : "+insNum);
isr.close();
bw.flush();
bw.close();
br.close();
bw.close();
// String input = "delete from table1 where bc='SIN' and locale ='zh_CN' and code = '660' and description = 'No Description Found' and effective_from = to_date('01/01/1900', 'mm/dd/yyyy') and effective_to = to_date('12/31/9999', 'mm/dd/yyyy');";
// String input = "insert into table2 values ('SIN','AOU','zh_CN', '货银对付 - 转出', to_date('01/01/1900', 'mm/dd/yyyy'), to_date('12/31/9999', 'mm/dd/yyyy'));";
// System.out.println(getConvertedDeleteSQL(input));
}
public static String getConvertedDeleteSQL(String OrignalSQL)
{
String[] temp = new String[12];
temp = OrignalSQL.split(", |values \\(|\\);|,");
String bc = temp[1];
String locale = temp[3];
String code = temp[2];
String description = temp[4];
String effective_from = temp[5]+", "+temp[6];
String effective_to =temp[7]+", "+temp[8];
for(String str : temp)
{
System.out.println(str);
}
StringBuilder sb = new StringBuilder("delete from chd_l_sec_trans_type where ");
sb.append("bc=").append(bc)
.append(" and locale =").append(locale)
.append(" and code = ").append(code)
.append(" and description = ").append(description)
.append(" and effective_from = ").append(effective_from)
.append(" and effective_to = ").append(effective_to)
.append(";");
return sb.toString();
}
private static String getValue(String input,String regex)
{
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
String value = null;
while (matcher.find()) {
// System.out.println(matcher.group(0));
// System.out.println(matcher.group(1));
value = matcher.group(1);
}
return value;
}
public static String getConvertedInsertSQL(String OrignalSQL)
{
StringBuilder sb = new StringBuilder("insert into chd_l_sec_trans_type values (");
String regex_bc = "bc=(\'(.*?)\')";
String bc = getValue(OrignalSQL,regex_bc);
String regex_locale = "locale =(\'(.*?)\')";
String locale = getValue(OrignalSQL,regex_locale);
String regex_code = "code = (\'(.*?)\')";
String code = getValue(OrignalSQL,regex_code);
String regex_description = "description = (\'(.*?)\')";
String description = getValue(OrignalSQL,regex_description);
String regex_effective_from = "effective_from = (to_date\\((.*?)\\))";
String effective_from = getValue(OrignalSQL,regex_effective_from);
String regex_effective_to = "effective_to = (to_date\\((.*?)\\))";
String effective_to = getValue(OrignalSQL,regex_effective_to);
sb.append(bc).append(", ").append(code).append(", ").append(locale).append(", ").append(description).append(", ").append(effective_from).append(", ").append(effective_to).append(");");
return sb.toString();
}
}
小程序主要加强了3方面知识的应用
1.I/O流,许久没用I/O流的API,此过程中遇到拉从文本文件读去字符出现乱码的问题,在构造InputStreamReader和OutputStreamReader时,一致采用"UTF-8"编码方式;
2.正则表达式的应用,从字符串提取特定格式的内容,用正则无疑是很好大选择,"[]",".*","|","?",(具体参阅JDK API)还有"()"主要用于辅助Matcher的group()方法,从匹配的结果中获得某个区域的value.
3.while循环内if,else的嵌套,以及continue的作用范围, 在此例中,如果进入else块执行continue时,将跳到前面的while语句(结束本次循环,后门的语句将被忽略)进入新的循环,处理不当就会进入死循环,下次要注意这一点.
分享到:
相关推荐
标题中的“vc实现桌面助手农历备忘”表明这是一个使用Visual C++(简称VC)开发的桌面应用程序,其核心功能包括显示农历日期以及提供备忘录功能。MFC(Microsoft Foundation Classes)是微软提供的一个C++类库,用于...
OWASP(开放式网络应用安全项目)是一个全球性的非营利组织,致力于提高软件安全意识和实践。它提供了各种安全相关的备忘单和指南,帮助开发者在编写代码时考虑到安全因素。 Python OWASP备忘单涵盖了多个重要主题...
一个标准的Android项目通常包含以下几个主要部分:`AndroidManifest.xml`(应用配置文件)、`res`(资源文件夹)、`src`(源代码文件夹)以及`build.gradle`(构建脚本)。在压缩包中,我们可以看到这些关键文件和...
5. Adapter:为了将数据模型绑定到ListView,我们需要创建一个适配器(Adapter),将数据库中的记事转换为ListView能显示的视图对象。 6. 数据持久化:通过SQLite实现数据的持久化,即使应用关闭,数据也能被保存...
Sys_Kind表是一个通用的字典表,用于存储备忘录的种类信息。这张表包含了多个字段,如字典名称、父类型标识、排序、添加时间、字典描述、字典状态和字典代码值等。这样的设计可以帮助用户对备忘录进行分类管理,方便...
- **定义**: 将一个类的接口转换成客户希望的另一个接口。 - **应用场景**: 当已有类的功能很好,但接口不符合当前的需求时。 - **示例**: 适配器可以将不同的硬件设备接口统一为一种标准接口,方便用户使用。 **9....
【网络安全渗透测试漏洞】是IT领域中至关重要的一个主题,主要关注的是系统和网络的安全性。渗透测试(Penetration Testing)是一种通过模拟恶意攻击来评估系统防护能力的方法。漏洞赏金(Bug Bounty)则是在安全...
Codematic2.zip 文件提供了一种解决方案,它是一个自动化工具,能够根据数据库文件或表结构自动生成相应的代码,极大地提高了开发效率。 Codematic2 是这个工具的核心组件,它通过解析数据库结构,如字段名、数据...
- **适配器模式**:将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 - **桥接模式**:将抽象部分与它的实现部分分离,使得它们可以独立变化。 - **组合...
sqlite3-dbf XBase / FoxPro表到SQLite的转换器关于SQLiteDBF将XBase数据库(尤其是带有备忘录文件的FoxPro表)转换为SQL转储。 除了标准的Unix库外,它没有其他依赖项。 该PgDBF项目的代码库( )设计得非常快且...
2009-02-24 08:52 156256 34316 常见的专业问题解决办法\Java中的强制类型转换_Believe ┭┮ YourSelf.mht 2009-02-24 08:31 61003 61003 常见的专业问题解决办法\Java容器类List、ArrayList、Vector及map、...
- **if-else结构**:当条件为真时执行某个代码块,否则执行另一个代码块。 - **if-elif-else结构**:支持多个条件分支。 ##### 一个免费的实验室 - **交互式编程环境**:如Python IDLE,可以即时查看代码执行结果...
- **定义**:将一个类的接口转换成客户希望的另一个接口。 - **优点**:提高了类的复用性,增强灵活性。 - **应用场景**:兼容旧版系统、不同框架间的数据交换等。 7. **代理模式(Proxy)** - **定义**:为...
- **描述**:将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 - **示例**:将USB接口的设备适配为支持HDMI接口的显示设备。 7. **装饰器模式*...
适配器模式将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适用于两个类接口不兼容,但又想让它们协同工作的情况。 #### 二十一、装饰模式...
例如,在一个图形应用程序中,我们可以通过工厂模式来创建不同类型的图形对象(如圆形、矩形等),这样可以避免在代码中硬编码具体的图形类。 #### 二、建造者模式(Builder Pattern) 建造者模式是一种用于构建...
《CyC2018.rar》是一个压缩包文件,其中包含了一份名为《技术面试必备基础知识 CyC2018.pdf》的重要资料。这份文档聚焦于Java面试中的核心知识点,为求职者提供了全面的准备指南。以下是对这个主题的详细解析: 1. ...
6. **适配器模式(Adapter)**:将一个类的接口转换成客户希望的另一个接口,使原本不兼容的类可以协同工作。 7. **装饰器模式(Decorator)**:动态地给一个对象添加一些额外的职责,提供比继承更具弹性的扩展功能...