2010-08-04 7 views
1

SQL을 사용하여 파일에서 전체 데이터베이스를 프로그래밍 방식으로 가져 오는 방법이 있습니까 ?? (.CSV, .SQL 및 .DB 파일도 괜찮습니다.)PROGRAMMATICALLY 파일에서 데이터베이스 가져 오기?

고마워요 !!

는 명확히하기 위해 AFTER 편집 :

을 나는 데이터베이스 독립적 인 (인 솔루션에 관심이 데이터베이스의 모든 유형 (MySQL은, SQL 서버, 포스트 그레스, 오라클 ...)

+0

@Giorgio, 어떤 RDBMS를 사용하나요? –

+0

질문이 아직 포괄적이지 않습니다. 어떤 데이터베이스에 대해 이야기하고 있습니까? 오라클은 SQL 로더를 지원하고 SQL Server는 유사한 도구를 지원합니다. – Kangkan

+1

일단 데이터베이스 맛을 알게되면이 질문은 거의 확실하게 기존 질문과 중복됩니다. – APC

답변

2

확인을 체크 아웃 사용하는 경우! :)

그래서 당신은 (MySQL은, SQLite는, ...)가 중 데이터베이스 다음을 수행하십시오

1) .SQL 형식으로 데이터베이스를 내보낼 수 있습니다. (이 .sql 파일에는 CREATE TABLE ... INSERT INTO 테이블 ...과 같은 모든 sql 명령이 포함됩니다.) (CREATE TABLE으로 시작하는 줄을 제거하고 INSERT ...로 시작하는 줄만 남기십시오. .)

2) 그런 다음 문자열의 배열에 SQL Lite 파일 저장을 각각의 라인을 읽는 몇 가지 코드를 작성 사용하는 언어 (문자열 [])

3) 그런 다음 각 문자열을 실행 배열에 포함 된 문자열 [] SQL 명령으로

나는 자바에서 이것을 구현했습니다 :

 
import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 
import java.util.LinkedList; 
import java.util.List;

import android.content.Context; import android.database.sqlite.SQLiteDatabase;

public class DatabaseImporter {

private static DatabaseImporter instance; public static DatabaseImporter getInstance(){ if(DatabaseImporter.instance == null) instance = new DatabaseImporter(); return DatabaseImporter.instance; } private DatabaseImporter(){ } public void importDatabaseFromFile(Context context, String databaseName , String filePath){ SQLiteDatabase database = //CREATE UR DATABASE WITH THE COMMAND FROM THE DATABASE API YOUR USING this.executeSqlCommands( database , this.readSqlCommandsFromFile(filePath) ); } private String[] readSqlCommandsFromFile(String filePath){ String[] sqlCommands = new String[0]; List<String> sqlCommandsList = new LinkedList<String>(); try{ // Open the file that is the first // command line parameter FileInputStream fstream = new FileInputStream(filePath); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); String strLine; //Read File Line By Line while ((strLine = br.readLine()) != null) { if(!strLine.equals("") && !strLine.equals(" ") && strLine != null) sqlCommandsList.add(strLine); } //Close the input stream in.close(); }catch (Exception e){//Catch exception if any System.err.println("Error: " + e.getMessage()); } sqlCommands = new String[sqlCommandsList.size()]; sqlCommandsList.toArray(sqlCommands); return sqlCommands; } private void executeSqlCommands(SQLiteDatabase database, String[] sqlCommands){ for(int i = 0; i < sqlCommands.length ; i++){ database.execSQL(sqlCommands[i]); } }

}

+0

SQLite 용으로 데이터베이스 독립적 인 것은 아닙니다. –

+0

접근 방식은 데이터베이스에 독립적이며 코드 조각은 데이터베이스와 관련된 것입니다. – Giorgio

1

mysql을 가진 작품 -u -p < 쿼리의 오른쪽 비트의 오른쪽 필드를 넣어 (. 예를 들어, PHP를 사용하여) 스크립트를 필요로 CSV 가져 오기

dumpfile.sql

+0

이 명령은 PHP의 일부입니까, 아니면 MySQL의 일부이며 명령 줄 셸에 삽입해야합니까? – Giorgio

+0

그 명령은 쉘에서 실행되어야합니다. – Emyr

3

MySQL의 : CSV 년대에 LOAD DATA INFILE, .SQL합니다. 생성 된 파일 MySQL에서는 셸을 사용하십시오.


SQLite의 경우 : this SO question을 참조하십시오.

SQL Server : 분명히 BULK INSERT 명령이 있습니다.

SQL 명령에 대한 데이터베이스 독립 구문이 없기 때문에 찾을 수 없습니다.

데이터베이스 주위에 래퍼 라이브러리가있을 수 있지만이를 알지 못합니다. (또는 ODBC를 사용할 수도 있지만 연결 지향이며 파일에 직접 액세스 할 수 없습니다)

아마도이 작업을 수행 할 수있는 대화 형 GUI 관련 소프트웨어 도구가 있습니다.

데이터베이스 서버의 파일에서 데이터베이스로 직접 데이터를로드하려면 보안 권한이 있어야합니다 (그렇지 않으면 보안 위험이 있음).

+0

안녕하세요! 코드 내부에서 프로그램 적으로 처리하고 싶습니다! 쉘에 명령을 입력 할 수 없도록 매번 다른 데이터베이스 파일을 가져 오는 알고리즘을 작성해야합니다. – Giorgio

0

당신은 내가 실제로 파일을 아주 쉽게 .SQL에서 데이터베이스를 가져올 데이터베이스 독립적 인 솔루션을 찾을 수 있도록 SQL 서버가 SSIS

관련 문제