나는 asked the question the other day을 작성하고 해결책을 반영하기 위해 코드를 다시 작성했지만 이제는 새로운 문제가 있습니다. 여기에 코드가 있습니다.데이터베이스에서 XML로 많은 양의 데이터를 저장할 수있는 방법 (메모리 문제, 2 부)?
이것은 호출/쓰기 기능입니다. 8 가지 XML 파일을 만드는 proizvod
의 8 가지 유형이 있습니다. XML 파일이 생성 된 후, 사용자 정의 지퍼 클래스에 의해 압축 할 필요가 :
generateXML(tmpParam,queryRBR,proizvod.getOznaka());
writeToZip(proizvod.getOznaka());
이 내부 writeToZip
입니다 : 이것은 내부 generateXML
입니다
ZipEntry ze = new ZipEntry(oznaka + ".xml");
FileOutputStream fos = new FileOutputStream(new File(zipFolder + oznaka + ".zip"));
ZipOutputStream zos = new ZipOutputStream(fos);
zos.putNextEntry(ze);
FileInputStream fis = new FileInputStream(new File(zipFolder + oznaka + ".xml"));
final byte[] buffer = new byte[1024];
int n;
while ((n = fis.read(buffer)) != -1)
zos.write(buffer, 0, n);
zos.closeEntry();
zos.flush();
zos.close();
fis.close();
:
PrintWriter writer = new PrintWriter(new BufferedOutputStream(new FileOutputStream(zipFolder +oznaka + ".xml")));
writer.print("\n<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
writer.print("\n<PROSTORNE_JEDINICE>");
stmt = cm.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
String q = "";
rs = stmt.executeQuery(q);
if (rs != null) {
System.out.println("Početak u : " + Util.nowTime());
while (rs.next()) {
writer.print("\n\t<row>");
writer.print("\n\t\t<ID>" + Util.transformToHTML(rs.getInt("id")) + "</ID>");
writer.print("\n\t\t<JED_ID>" + Util.transformToHTML(rs.getInt("jed_id")) + "</JED_ID>");
//etc
writer.print("\n\t</row>");
}
System.out.println("Kraj u : " + Util.nowTime());
}
writer.print("\n</PROSTORNE_JEDINICE>");
generateXML
부분은 여전히 많은 메모리를 필요로합니다 (정확하게 추측한다면 가능한 한 조금씩 걸립니다). 어떻게 최적화 할 수 있는지 보지 못합니다. writer.print 기능을 제공하는 방법)? 나는 즉시 볼
Btw :'stmt.executeQuery()'절대 null을 반환합니다. SQLException를 Throw하는지, null 이외의 ResultSet를 돌려줍니다. – BalusC
결과 집합에서 파일에 직접 쓰면 메모리 문제가있는 곳을 즉시 알 수 없습니다. 프로필을 작성해야합니다. 조언을 얻으려면 http://stackoverflow.com/questions/2153409/how-to-measure-performance-in-java-developement/2153424#2153424 –
Tnx를 참조하십시오. – Andrija