2012-08-31 7 views
0

sqlite db 파일을 respresenting하는 sqback 파일이 있습니다. 이 sqback 파일, 즉 테이블 이름과 내용에서 데이터를 추출하여 csv 파일 형식으로 변환하려고합니다. Java를 사용하여이 작업을 수행하려고합니다.CSV로 변환하기 위해 sqlback 형식의 파일에서 데이터 추출

** 처리하기 전에 sqback 파일이 이미 Android 장치에서 PC로 업로드되었을 것입니다. 그래서 나는 서버 측을 차지하는 데 적합한 솔루션이 필요하다.

누군가 이러한 작업을 수행하는 방법에 대한 단서가 있습니까?

답변

1

이 웹 사이트는 추가 라이브러리를 사용할뿐만 아니라 sqlite 파일 (http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC#Usage)과 상호 작용하는 방법의 예를 제공합니다.

중요 사항 :

1) 현재 클래스 로더를 사용하여 sqlite-JDBC 드라이버를로드하도록하십시오. 이 행은 행

2) sqlite 파일은 데이터베이스에 있더라도 어딘가에 앉아 있어도됩니다.따라서 파일과 상호 작용하려면 파일에 대한 연결을 만들어야합니다. 그리고 연결을 열고 연결을 닫아야합니다. Connection connection = null; connection = DriverManager.getConnection("jdbc:sqlite:" + path); // path is a String to the sqlite file (sqlite or sqback) connection.close(); // after you are done with the file

3) 정보를 추출하기 위해 SQL 코드를 사용하여 파일을 쿼리 할 수 ​​있습니다. 이 데이터는 열 인덱스 또는 키 열 머리글 중 하나를 사용하여 얻을 명령을 사용하여 데이터를 드실 수 ResultsSet에서 쿼리

Statement statement = connection.createStatement(); 
    statement.setQueryTimeout(30); 
    ResultSet rs = statement.executeQuery("SELECT * FROM " + tblName); 

4)에 관한 보유하고 ResultSet 유형의 처리 가능한 객체를 반환 rs.getString("qo")

희망이있는 사람에게 도움이되는 희망은

1

Android를 사용하는 경우 빌드 된 SQLiteDatabase 및 SQLiteOpenHelper를 활용할 수 있습니다. 모두 정보는 here입니다.

모든 것을 파싱 한 후 File을 사용하여 원하는 방식으로 CSV로 내보낼 수 있습니다.

편집 : 기본적으로 수행해야 할 작업은 바이트를 읽음으로써 바이트를 구문 분석하여 내용에 액세스하는 것입니다. 경우에 따라 바이트로만 변환 할 필요가 없기 때문에 문자열로 변환 할 필요조차 없습니다. (예 : 오프셋 : 44 길이 : 4 설명 : 스키마 형식 번호, 지원되는 스키마 형식은 1, 2, 3 및 4입니다.). HEX 편집기에서 값이 올바른지 항상 확인할 수 있습니다. 어떤 종류의 텍스트 편집기로도 sqlite 파일을 열어도 도움이됩니다.

처음부터 시작하겠습니다. 먼저 파일을 읽습니다. 두 가지 접근 방식 :

  • a. 전체 파일을 읽고
  • b 후에 파싱합니다. b.

두 가지 접근법은 다음과 같은 코드의 대부분을 공유하는 것를 읽고 (더 큰 파일을 특별히 권장) 블록 전체 파일을 구문 분석 :

File file = new File("YOUR FILE ROUTE"); 
int len = 1024 * 512; //512KB 

try { 
    fis = new FileInputStream(file); 
} catch (FileNotFoundException e1) { 
    fis = null; 
    e1.printStackTrace(); 
} 
byte[] b = new byte[len]; 
int bread; 

try { 

    while((bread = fis.read(b, 0, len))!=-1) 
    { 
     if(parseBlock(b, bread)==1) 
      return; 
} 

    fis.close(); 

} catch (IOException e) { 
    e.printStackTrace(); 
} 
의 차이는 부분 블록을 받고이를 해석 사이 것

(나는 당신을 위해 일하는 것 같아요) 그리고 모든 걸 얻는 것은 그냥 넣는 것입니다 :

fis.read(b, 0, fis.available); 

while 루프 대신에.

궁극적으로 사용자의 접근 방식이 옳다. 바로 이것이 바이트를 String으로 가져 오는 방법이다. (새로운 문자열 (b)). 또한 첫 번째 문자는 이상한 기호를 나타내는 경향이 있습니다. SQL의 파일 형식을 살펴보면 일부 메타 데이터를 저장하기위한 예약 된 바이트입니다. 텍스트 편집기로 sqlite 파일을 열고 거기에 보이는 내용이 코드에서 나오는 것과 일치하는지 확인하십시오.

+0

호세. 나는 좀 더 구체적이어야한다고 생각한다. 방금 sqback 파일이 안드로이드 장치에서 PC로 업로드되고 파싱이 서버 측에서 일어날 필요가 있다는 사실을 포함하도록 질문을 업데이트했습니다. –

+0

그런 다음 바이트 읽기 시작해야합니다. 참조로 사용하십시오 (http://www.sqlite.org/fileformat.html) FileInputStream을 사용하여 파일을 읽는 것이 좋습니다. 읽는 바이트 블록을 2의 거듭 제곱의 배수로 설정하는 것은 흥미 롭습니다 (파일이이 크기에 도달 할 경우 1024Kb 또는 512Kb 정도가 가장 적합한 옵션이 될 수 있습니다). 경험이 전혀 없다면 몇 가지 예제 코드를 줄 수 있습니다. –

+0

다시 한번 고마워요, 호세. 정말 고맙습니다. Im 그것을 정독 후에 읽는 시도하고 이것을 시도하고 잘 만하면 모두는 매끄럽게 갈 것이다. 더 많은 질문이 있으면이 스레드를 치게 될 것입니다. '임씨, 그리고 이미 굉장한 모습을 보이고 있습니다. –

관련 문제