2010-08-04 7 views
1

Existe-t-il un moyen d'importer par programme une base de données entière à partir d'un fichier avec SQL ?? (soit les fichiers .CSV, .SQL et .DB sont bien)Importer la base de données à partir du fichier PROGRAMMATICALLY?

Merci !!

ÉDITÉE APRÈS CLARIFIER:

Je suis intéressé par une solution qui est la base de données indépendante (doit fonctionne avec tous les types de bases de données (Mysql, SQL Server, Postgres, Oracle ...)

+0

@Giorgio, quel RDBMS utilisez-vous? –

+0

La question n'est pas encore exhaustive. De quelle base de données parlez-vous? Oracle prend en charge le chargeur SQL et SQL Server prend également en charge un outil similaire. – Kangkan

+1

Une fois que nous connaissons la base de données, cette question sera presque certainement une copie d'une question existante. – APC

Répondre

2

Ok donc j'ai trouvé une solution qui est base de données indépendante pour importer une base de données à partir d'un fichier .sql assez facilement !! :)

Alors quelle que soit la base de données que vous avez (Mysql, SQLite, ...) procédez comme suit:

1) exporter votre base de données au format .sql. (Ce fichier .sql contiendra toutes les commandes SQL telles que CREATE TABLE ... INSERT INTO table ...) (Vous devrez peut-être supprimer les lignes commençant par CREATE TABLE et ne laisser que les lignes commençant par INSERT. .)

2) Ensuite, dans la langue que vous utilisez écrire du code qui a lu chaque ligne des fichiers Sql Lite et la stocke dans un tableau de String (String [])

3) Ensuite, exécutez chaque chaîne contenues dans le tableau String [] comme commande SQL

Je l'ai mis en œuvre ce en 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;

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

Ce n'est pas indépendant de la base de données, c'est pour SQLite. –

+0

L'approche est indépendante de la base de données et seul l'extrait de code est spécifique à la base de données – Giorgio

1

mysql -u -p < dumpfile.sql

csv importation nécessiterait un script (PHP en utilisant par exemple.) pour mettre les bons champs dans le bon bit de la requête

+0

Est-ce que cette commande fait partie de PHP ou fait partie de Mysql et doit être insérée dans le shell de la ligne de commande? – Giorgio

+0

cette commande doit être exécutée sur le shell. – Emyr

3

MySQL: LOAD DATA INFILE pour des années csv, pour sql. fichiers générés wi MySQL, utilisez le shell. Pour SQLite: voir this SO question.

SQL Server: apparemment, il y a la commande BULK INSERT.

Vous ne trouverez pas de syntaxe indépendante de la base de données pour une commande SQL, car il n'y en a pas.

Il peut y avoir une bibliothèque de wrapper autour des bases de données mais je ne suis pas au courant. (Ou vous pourriez essayer d'utiliser ODBC, mais cela est orienté connexion et ne permettrait pas l'accès direct à un fichier)

Il existe peut-être un outil logiciel interactif lié à l'interface graphique pour cela. Notez également que charger des données directement à partir d'un fichier sur un serveur de base de données dans une base de données nécessite presque certainement des privilèges de sécurité (sinon c'est un risque de sécurité).

+0

Salut! Je veux faire cela par programme dans le code! Je dois écrire un algorithme qui importe à chaque fois un fichier de base de données différent, donc je ne peux pas taper des commandes dans le shell – Giorgio

Questions connexes