如何解决为SQL中的每个字母创建文件的最佳方法
|| 我正在尝试使用我编写的查询结果为字母+特殊字符的每个字母创建一个xml文件。Select * from people; (random example)
例:
hello_a.xml
hello_b.xml
hello_spec.xml
我已完成查询,此刻返回所有行。我只想知道执行此操作的最佳方法。我是否要制作包含每个变量的字符串列表,并执行where table_column LIKE A%?还是有更好的方法来做到这一点现在我有了List实现,但是我似乎找不到特殊字符的SQL部分。
当我说特殊字符时,我的意思是\“&\”,\“%\”或数字值。
编辑:使用JAXB将xml写入文件。
解决方法
尚不完全清楚,所以我只想您要编写此查询的结果:
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
然后,您可以遍历结果集并为结果集的“ 5”列中的每个新字符创建文件。
这是Java中的示例代码,它说明了该方法:
Statement s = connection.createStatement();
String q = \"select substr(name,* 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();
请记住,该代码尚未经过测试,因此可能无法正常工作或无法直接编译,但我希望它能很好地说明该方法。
, 从我的角度来看,如果不尝试使用SQL完成所有操作,将容易得多。使用您拥有的查询并按名称排序(或使用的任何字段)。这是一些伪代码,将为您进行分组。
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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。