將美化(格式化)的sql語句轉成Java中的StringBuffer拼接的一行行字串/反過來
阿新 • • 發佈:2019-01-03
1. 需求背景
現在所在的專案,dao層是用jdbcTemplate封裝的, 所有都是自己寫sql語句, 一般是在NavicatPremium中寫好sql語句, 再自己一行一行復制到IDEA中, 一旦需要連線多個表進行查詢, sql語句比較多的時候,, 容易出錯而且十分麻煩
給大家感受一下:
一行一行復制到IDEA中:
是一個十分沒有技術含量並且很容易出錯的活. 於是我就想到寫一個工具類來解決這個問題. 並且可以將–後面註釋的內容過濾掉,避免sql出錯
2. 工具類, BufferReader和BufferWriter
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sql2JavaUtil {
//如果要轉成java字串, 將格式化的sql檔案複製貼上在E盤的sql.txt中
private static String sqlFile = "E:/sql.txt";
//如果要將字串轉成sql語句, 將所有"sb.append(" ... ")包裹的sql語句都複製到java.txt中"
private static String javaFile = "E:/java.txt";
public static void main(String[] args)throws Exception {
//true為不覆蓋之前的檔案,false為覆蓋
// sql2Java("sb",sqlFile,javaFile,true);
sql2Java("sql",sqlFile,javaFile,false);
// java2Sql("sb",javaFile,sqlFile,true);
// java2Sql("sql",javaFile,sqlFile,false);
}
/**
* 將格式化後的sql檔案,或普通的txt檔案,讀取每一行sql語句,用"sb.append("")來包裹"
* @param var stringbuffer的變數
* @param sqlPath sql檔案的路徑
* @param javaFile java檔案的路徑
* @param isAppend 是否在原檔案後拼接
* @throws Exception
*/
public static void sql2Java(String var,String sqlPath,String javaFile,boolean isAppend)throws Exception{
BufferedReader br = new BufferedReader(new FileReader(sqlPath));
BufferedWriter bw = new BufferedWriter(new FileWriter(javaFile,isAppend));
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = format.format(new Date());
String str = "";
if (isAppend){
bw.newLine();
bw.write("--------------------"+date+"-------------------------");
bw.newLine();
}
while((str = br.readLine()) != null) {
if (!str.trim().equals("")){
str = str.trim();
int i = -1;
//去掉註釋
if ((i = str.indexOf("-- ")) != -1){
str = str.substring(0,i);
}
if (!str.trim().equals("")){
bw.write(" "+var+".append(\" " + str.trim() + " \");");
bw.newLine();
}
}
}
bw.close();
br.close();
System.out.println("java檔案輸出ok");
}
/**
* 將java程式碼中被"sb.append("")來包裹的sql檔案,還原成原來的sql
* @param var stringbuffer的變數名
* @param javaPath java檔案的路徑
* @param sqlPath sql檔案的路徑
* @param isAppend 是否在原檔案後拼接
* @throws Exception
*/
public static void java2Sql(String var,String javaPath,String sqlPath,boolean isAppend)throws Exception{
BufferedReader br = new BufferedReader(new FileReader(javaPath));
BufferedWriter bw = new BufferedWriter(new FileWriter(sqlPath));
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = format.format(new Date());
String str = "";
if (isAppend){
bw.newLine();
bw.write("--------------------"+date+"-------------------------");
bw.newLine();
}
while((str = br.readLine()) != null) {
bw.write(str.trim().replace(var+".append(\"","").replace("\");",""));
bw.newLine();
}
bw.flush();
bw.close();
br.close();
System.out.println("sql檔案輸出ok");
}
}
這裡的話我是把檔案放在E:/
根目錄 ,StringBuffer的變數名是sql
,大家可以自己根據自己的情況更改
效果如下: