Импортировать базу данных из файла ПРОГРАММНО? - PullRequest
1 голос
/ 04 августа 2010

Есть ли способ программно импортировать всю базу данных из файла с SQL? (подойдут файлы .CSV, .SQL и .DB)

Спасибо !!

ИЗМЕНЕНО ПОСЛЕ ТОГО, ЧТОБЫ УТОЧНИТЬ:

Меня интересует решение, которое не зависит от базы данных (должно работать со всеми типами баз данных (Mysql, SQL Server, PostGres, Oracle ...)

Ответы [ 4 ]

3 голосов
/ 04 августа 2010

MySQL: LOAD DATA INFILE для CSV;для файлов .sql, созданных с помощью MySQL, используйте оболочку.


Для SQLite: см. этот вопрос SO .

SQL Server: очевидно, есть BULK INSERT команда.

Вы не найдете независимый от базы данных синтаксис для команды SQL, потому что его нет.

Может быть, есть библиотека-оболочка для баз данных, но я не знаю об этом.(Или вы можете попробовать использовать ODBC, но он ориентирован на соединение и не разрешает прямой доступ к файлу)

Возможно, для этого существует интерактивный программный инструмент, связанный с графическим интерфейсом.

Обратите также внимание, что загрузка данных непосредственно из файла на сервере базы данных в базу данных почти наверняка требует наличия привилегий безопасности (в противном случае это угроза безопасности).

2 голосов
/ 04 августа 2010

Хорошо, поэтому я действительно нашел решение, которое является базой данных НЕЗАВИСИМЫМ, чтобы довольно легко импортировать базу данных из файла .Sql !! :)

Итак, какая бы база данных у вас не была (Mysql, Sqlite, ...), выполните следующие действия:

1) экспортируйте вашу базу данных в формат .sql. (Этот файл .sql будет содержать все команды sql, такие как CREATE TABLE ... INSERT INTO table ...) (Возможно, вам придется удалить строки, начинающиеся с CREATE TABLE, и оставить только те строки, которые начинаются с INSERT ...)

2) Затем на языке, который вы используете, напишите некоторый код, который читает каждую строку файлов Sql Lite и сохраняет ее в массив строк (String [])

3) Затем выполните каждую строку, содержащуюся в массиве String [], как команду sql

Я реализовал это в Java:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;</p>

<p>import android.content.Context;
import android.database.sqlite.SQLiteDatabase;</p>

<p>public class DatabaseImporter {</p>

<code>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]);
    }
}
</code>

}

1 голос
/ 04 августа 2010

mysql -u -p

Для импорта CSV потребуется скрипт (с использованием, например, PHP), чтобы поместить правильные поля в нужный бит запроса.

0 голосов
/ 04 августа 2010

Если вы используете SQL Server, проверьте SSIS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...