4

sdcardまたは任意の外部ロケーションからsqliteデータベースをAndroidアプリケーションにインポートしようとしています。私のアプリケーションでは、データベースのスキーマは変更されませんが、インポートされるデータベースごとにレコードが変更されるように、データベースのインポートが必要です。sdcardからAndroidにSQLiteデータベースをインポート - 資産フォルダなし

(たとえば、レコードが10個ある特定の時間にDatabaseAをインポートし、25個のレコードを持つDatabaseAをインポートすることがあります。データベースAは常に同じ外部ロケーションからインポートされます)。

アセットフォルダを使用してこれまで見たインポート方法は役に立ちません。私は、外部の場所を指すデータベースをインポートしたいと思います。

+0

これを確認してください - http://stackoverflow.com/questions/9109438/how-to-use-an-existing-database-with-an-android-application –

+0

これでは、データベースをassetsフォルダに読み込む必要がありますアプリケーションの一部として私はアプリケーションから独立したものを探しています。 @ ShadabAnsari – Prabha

答えて

2

:データベースを照会するため

public class DataBaseInterface { 
public DataBaseInterface(Context activity) { 
    context = activity; 
} 

private void openDataBase() { 
    try { 
     dataBaseHelper = new DataBaseHelper(context); 
     dataBaseHelper.openDataBase(); 
    } catch (Exception e) { 
     Log.e("DataBaseError", e.getMessage()); 
    } 
} 

private void closeDataBase() { 
    dataBaseHelper.close(); 
} 
} 

と例の方法データベースをsdcardから取得します。

注意:データベースを正常にインポートするには、アプリケーション内にデータベースフォルダを作成する必要があります。

public void importDB() { 

String dir=Environment.getExternalStorageDirectory().getAbsolutePath(); 
File sd = new File(dir); 
File data = Environment.getDataDirectory(); 
FileChannel source = null; 
FileChannel destination = null; 
String backupDBPath = "/data/com.example.mine.move/databases/A.db"; 
String currentDBPath = "A.db"; 
File currentDB = new File(sd, currentDBPath); 
File backupDB = new File(data, backupDBPath); 
try { 
    source = new FileInputStream(currentDB).getChannel(); 
    destination = new FileOutputStream(backupDB).getChannel(); 
    destination.transferFrom(source, 0, source.size()); 
    source.close(); 
    destination.close(); 
    Toast.makeText(this, "Please wait", Toast.LENGTH_SHORT).show(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

また、次の権限を追加してください。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

インポートが成功しなかった場合は、sdkバージョンをダウングレードするか、実行時アクセス許可を含めます。

1

外部からデータベースをインポートする|内部ディレクトリ:

public class DataBaseHelper extends SQLiteOpenHelper { 

private static String DataBaseName = "dbname"; 
private static String DB_PATH = "" ; 
SQLiteDatabase database ; 
Context context ; 

public DataBaseHelper(Context context) { 
    super(context, DataBaseName, null, 1); 
    this.context =context ; 
    String x = context.getDatabasePath("1").getPath() ; 
    x = (String) x.subSequence(0 ,x.length()- 1); 
    DB_PATH = x + DataBaseName ; 

    if (checkExist()){ 
     Log.e("DATA_BASE", " Exist"); 
    }else{ 
     try { 
      createDataBase(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

@Override 
public void onCreate(SQLiteDatabase sqLiteDatabase) { 

} 

@Override 
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 

} 

boolean checkExist(){ 
    boolean is = false ; 
    try{ 
     File file = new File(DB_PATH); 
     if (file.exists()){ 
      is= true ; 
     } 
    }catch (SQLiteException e){ 
     Log.e("DATABESE_ERR" , e.getMessage()) ; 
    } 


    return is ; 
} 

private void createDataBase() throws IOException{ 
    if (checkExist()){ 

    }else { 
     getReadableDatabase() ; 
     try{ 
      copyDataBase(); 
     }catch (IOException e){ 
      Log.e("DATABASE-COPY-ERR", e.getMessage()); 
     } 
    } 
} 

private void copyDataBase()throws IOException { 
    Uri fileUri = "your database file uri" ; 
    File file = new File(fileUri.getPath()); 
    FileInputStream inputStream = new FileInputStream(file); 

    OutputStream outputStream = new FileOutputStream(DB_PATH); 

    byte[] buffer = new byte[1024] ; 
    int length =0 ; 

    while((length = inputStream.read(buffer)) >0){ 
     outputStream.write(buffer ,0 ,length); 
    } 

    outputStream.flush(); 
    outputStream.close(); 
    inputStream.close(); 

} 

public void openDataBase() throws SQLiteException{ 
    database = SQLiteDatabase.openDatabase(DB_PATH ,null ,SQLiteDatabase.OPEN_READWRITE); 
} 
public void closeDataBase(){ 
    if (database!= null){ 
     database.close(); 
    } 
    try { 
     super.clone() ; 
    } catch (CloneNotSupportedException e) { 
     e.printStackTrace(); 
    } 
} 

}

どのようにこのクラスを使用するには:私は私をインポートするには、次のコードを使用

public ArrayList<String> getSomeThing() { 
    buffer = new ArrayList<>(); 
    openDataBase(); 
    query = "SELECT * FROM table_name"; 

    cursor = dataBaseHelper.database.rawQuery(query, null); 

    for (int i = 0; i < cursor.getCount(); i++) { 
     cursor.moveToPosition(i); 
     buffer.add(i, cursor.getString(0)); 
    } 

    closeDataBase(); 
    cursor.close(); 

    return buffer; 
} 
+0

DataBaseHelperクラスの呼び出しを含め、コード全体を教えてください。 @darush dary – Prabha

関連する問題