Java 为SQL中的每个字母创建文件的最佳方法
我正在尝试为字母表中的每个字母+特殊字符创建一个xml文件,其中包含我编写的查询结果:Java 为SQL中的每个字母创建文件的最佳方法,java,sql,Java,Sql,我正在尝试为字母表中的每个字母+特殊字符创建一个xml文件,其中包含我编写的查询结果: Select * from people; (random example) 例如: hello_a.xml hello_b.xml hello_spec.xml 我已经完成了查询,它返回了当前的所有行。我只是想知道最好的方法。我是否要列出包含每个变量的字符串,并创建一个where table_列,如%?还是有更好的方法。现在我有了列表实现,但是我似乎找不到特殊字符的SQL部分 当我说特殊字符时,我指的是
Select * from people; (random example)
例如:
hello_a.xml
hello_b.xml
hello_spec.xml
我已经完成了查询,它返回了当前的所有行。我只是想知道最好的方法。我是否要列出包含每个变量的字符串,并创建一个where table_列,如%?还是有更好的方法。现在我有了列表实现,但是我似乎找不到特殊字符的SQL部分
当我说特殊字符时,我指的是“&”、“%”或数值
编辑:使用JAXB将xml写入文件。在我看来,不使用SQL来完成这一切会容易得多。使用您的查询并按名称排序(或使用的任何字段)。下面是一些psuedo代码,可以为您进行分组
records = SQL_RESUT;
specialCharResults = new List();
currentCharResults = new List();
currentChar = "A";
for (record : records) {
if (record.name starts with special) {
specialCharResults.add(record);
} else {
if (record.name does not starts with currentChar) {
write out currentCharResults;
currentCharResults = new List();
currentChar = record.name first char;
} else {
currentCharResults.add(record);
}
}
write out currentCharResults; //currentChar never changes away from "Z"
write out specialCharResults;
还不完全清楚,所以我想您应该写下这个查询的结果:
SELECT * FROM people
按某列的第一个字符划分为27个单独的文件
以下不是Java,只是伪代码:
filenamePrefix = "hello_"
filenamePostfix = ".xml"
letters = "abc...xyz"
for letter in letters
upper = Uppercase(letter)
sqlquery = "SELECT * FROM people WHERE column LIKE '" + letter + "%'
OR column LIKE '" + upper + "%' ;"
results = runquery( sqlquery )
filename = filenamePrefix + letter + filenamePostfix
saveToFile( filename , results )
sqlquery = "SELECT * FROM people
WHERE NOT REGEXP_LIKE(column, '^[[:alpha:]]', 'i') ;"
/* 'i' stands for case Insensitive */
results = runquery( sqlquery )
filename = filenamePrefix + "spec" + filenamePostfix
saveToFile( filename , results )
您可以将查询更改为以下内容:
select substr(name, 1, 1) as alpha, * from people order by alpha
然后,您可以迭代结果集,并为结果集的alpha
列中的每个新字符创建文件
这是Java中的示例代码,演示了该方法:
Statement s = connection.createStatement();
String q = "select substr(name, 1, 1) as alpha, * from people order by alpha"
ResultSet rs = st.executeQuery(q);
FileWriter fw = null;
char alpha = null;
while(rs.next()) {
char newAlpha = rs.getString("alpha").charAt(0);
if(newAlpha != alpha) {
alpha = newAlpha;
if(fw != null) {
fw.close();
}
String fn = String.format("hello_%s.xml",
Character.isLetterOrDigit(alpha) ? alpha : "spec");
fw = new FileWriter(new File(fn));
}
//write record to open file writer
//your JAXB code goes here
//you should not iterate result set
}
fw.close();
请记住,代码尚未经过测试,因此可能无法立即运行或编译,但我希望它能够很好地解释这种方法。1我忘记了一件事,我使用JAXB编写XML,我不确定这是否会改变我们的答案。然后我必须有27个我用来写XML的JAXB对象实例,我以前没有使用过JAXB,所以我不能直接解决它。但是,您不需要同时使用27个实例。一旦您写出A列表,您就不再需要对该列表的引用,它可以被垃圾收集。WHERE列不象“[A-z]”返回我表中的所有内容,而不仅仅是那些不以字母字符开头的内容。@RMT:您使用哪个数据库?我想
不象REGEXP_一样(列“^[:alpha:”)
适用于Oracle。@ypercube,我不明白,它会返回我的所有记录。对不起,正则表达式不是我的拿手好戏。我认为正确的答案是:不像REGEXP_那样(列“^[:alpha:][]”)