안녕하세요.
오라클 데이터베이스 내용을 xml로 만들어서 안드로이드 화면에뿌려주는 걸 하고있는데요
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import ="java.io.*" %>
<%@ page import = "java.sql.*" %>
<%@ page import ="javax.xml.parsers.*"%>
<%@ page import = "javax.xml.parsers.DocumentBuilder" %>
<%@ page import = "javax.xml.parsers.DocumentBuilderFactory" %>
<%@ page import = "javax.xml.transform.*" %>
<%@ page import ="org.w3c.dom.Document"%>
<%@ page import = "org.w3c.dom.Element" %>
<%@ page import = "javax.xml.transform.dom.DOMSource" %>
<%@ page import = "javax.xml.transform.stream.StreamResult" %>
<%@ page import = "org.jdom.output.XMLOutputter" %>
<%@ page import = "java.io.FileWriter" %>
<%@ page import = " java.util.*" %>
<%
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
Element results = doc.createElement("Results");
doc.appendChild(results);
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager
.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","system","tiger");
ResultSet rs = con.createStatement().executeQuery("select * from attend");
ResultSetMetaData rsmd = rs.getMetaData();
int colCount = rsmd.getColumnCount();
while (rs.next()) {
Element row = doc.createElement("Row");
results.appendChild(row);
for (int i = 1; i <= colCount; i++) {
String columnName = rsmd.getColumnName(i);
Object value = rs.getObject(i);
Element node = doc.createElement(columnName);
node.appendChild(doc.createTextNode(value.toString()));
row.appendChild(node);
}
}
DOMSource domSource = new DOMSource(doc);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
StringWriter sw = new StringWriter();
StreamResult sr = new StreamResult(sw);
//transformer.transform(domSource, sr);
System.out.println(sw.toString());
OutputStream output = new FileOutputStream("C:/Users/JinS/workspace/Project111/WebContent/check1.xml");
transformer.transform(new DOMSource(doc), new StreamResult(output));
output.flush();
%>
<jsp:forward page="check1.xml"/>
<%
con.close();
rs.close();
%>
이것이 jsp로 xml 문서를 만들어 check1.xml 로 저장하는 것이구요
String number = "";
String name = "";
// DBHandler dbhandler = DBHandler.open(this);
try {
String html = loadData();
//DOM 파싱.
ByteArrayInputStream bai = new ByteArrayInputStream(html.getBytes());
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document parse = builder.parse(bai);//DOM 파서
//태그 검색
NodeList datas = parse.getElementsByTagName("Row");
String result = "";
//17개의 data태그를 순차로 접근
for (int idx = 0; idx < datas.getLength(); idx++) {
//필요한 정보들을 담을 변수 생성
Node node = datas.item(idx);//data 태그 추출
int childLength = node.getChildNodes().getLength();
//자식태그 목록 수정
NodeList childNodes = node.getChildNodes();
for (int childIdx = 0; childIdx < childLength; childIdx++) {
Node childNode = childNodes.item(childIdx);
if(childNode.getNodeType() == Node.ELEMENT_NODE){
//태그인 경우만 처리
//금일,내일,모레 구분(시간정보 포함)
if(childNode.getNodeName().equals("MYNUMBER")){
number = childNode.getFirstChild().getNodeValue();
//하늘상태코드 분석
} else if(childNode.getNodeName().equals("NAME")){
name = childNode.getFirstChild().getNodeValue();
}
}
}//end 안쪽 for문
// long cnt = dbhandler.insert(number, name);
// personList.add(new Student1(number, name));
}//end 바깥쪽 for문
// StudentAdapter personAdapter = new StudentAdapter(this, R.layout.check_row, personList);
// lvList.setAdapter(personAdapter);
} catch (Exception e) {
e.printStackTrace();
}
private String loadData() throws Exception {
String page = "http://10.10.10.10:8080/Project111/xmlpaser.jsp";
URL url = new URL("page);
HttpURLConnection urlConnection =(HttpURLConnection)url.openConnection();
if(urlConnection == null)return null;
urlConnection.setConnectTimeout(10000);//최대 10초 대기
urlConnection.setUseCaches(false);//매번 서버에서 읽어오기
StringBuilder sb = new StringBuilder();//고속 문자열 결합체
if(urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK){
InputStream inputStream = urlConnection.getInputStream();
InputStreamReader isr = new InputStreamReader(inputStream);
//한줄씩 읽기
BufferedReader br = new BufferedReader(isr);
while(true){
String line = br.readLine();//웹페이지의 html 코드 읽어오기
if(line == null)break;//스트림이 끝나면 null리턴
sb.append(line+"\n");
}//end while
br.close();
}//end if
return sb.toString();
}
이게 안드로이드에서 xml 문서를 읽는 java 파일이에요.
제가 jsp에서 check1.xml을 만들으면 그 폴더에 생성이됩니다.
그리고 안드로이드에서 추가하는 부분이 있어 추가를 하면 데이터베이스 내용이 바뀌면서 check1.xml을 다시 만들거든요
근데 문제는 여기서 부터입니다.
이클립스에서 보면 왼쪽에 폴더들이 있잖아요. check1.xml이 있는 jsp폴더를 refrash을 해줘야 check1.xml이 새로고침된 내용이 들어가서
새로운 내용을 읽어 올수가 있습니다. 이클립스에서 refrash를 해주지 않으면 이전 내용이 계속 떠요.
check1.xml을 저장하지 않으면 읽어올 수가 없을 뿐더러 다른 페이지에서 리스트를 만드는데 어려움이 있습니다.
어떻게 해야할까요
저는 내용을추가를 하면 저절로 새로운 내용이 안드로이드에 뜨게 하고싶거든요.
도와주세요 ~