2011-05-09 93 views
3

我想知道是否有什么我可以用C++类似于"sqlparse" module in Python来格式化我的查询。你知道我能用什么?在C++中格式化SQL查询

我很抱歉没有提供示例。 我想这样的事情:

SELECT MEMB.NAME, MEMB.AGE, AGE.GROUP FROM MEMB, AGE WHERE MEMB.AGE = AGE.AGE 

成为这样的:

SELECT MEMB.NAME, 
     MEMB.AGE, 
     AGE.GROUP 
FROM MEMB, 
     AGE 
WHERE MEMB.AGE = AGE.AGE 

非常感谢。

+3

对于那些不知道“sqlparse”是什么的人 - 以什么方式格式化它?请举一个例子。 – 2011-05-09 16:15:38

+1

嗯,为什么不直接用那种方式写呢?你为什么需要一个工具?我会认为输入键和空格键会成为你需要的所有工具。我想我错过了这个问题的重点。 – Jay 2011-05-09 16:25:33

+0

那么,我不想写任何这样做的函数。首先是因为代码不是我的,其次是因为我没有用C++编写代码。我只需要一个函数,就像我之前提到的模块中的格式方法。 – 2011-05-09 16:28:49

回答

2

你可以写自己漂亮的打印机。在这种情况下,它不会很难。只需更换的东西像下面这样:

"FROM" -> "\nFROM" 
"WHERE" -> "\nWHERE" 
"," -> ",\n\t" 
"AND" -> "AND\n\t" 
"OR" -> "OR\n\t" 

编辑:你不编码,这里有此功能的小版本。

#include <string> 
using std::string; /* put these lines in the top of your file */ 

string replace(string a, string b, string c) { 
    unsigned x; 
    for(x = a.find(b); x != string::npos;) { 
     a.erase(x, b.length()); 
    a.insert(x, c); 
    } 
    return a; 
} 




string formatSQL(string sql) { 

    replace(sql, "FROM", "\nFROM"); 
    replace(sql, "WHERE", "\nWHERE"); 
    replace(sql, "," , ",\n\t"); 
    replace(sql, "AND", "AND\n\t"); 
    replace(sql, "OR", "OR\n\t"); 
} 

所以调用formatSql("SELECT MEMB.NAME, MEMB.AGE, AGE.GROUP FROM MEMB, AGE WHERE MEMB.AGE = AGE.AGE")可以给你想要的结果。