質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1336閲覧

【Android Studio】既存データをRoomで作ったデータベースに移したい

nnnnn

総合スコア26

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/07/15 19:42

前提・実現したいこと

Android StudioでKotlinを使ってアプリを制作しております。

今までは
SQLiteOpenHelperを使用してデータベース処理を行なっていたのですが、
これからは
Roomに移行しようとしております。

SQLiteOpenHelperで以前作ったデータベース(********.db)内のデータを、
Roomで作ったデータベースに移したいのですが、
どのような方法がありますでしょうか。

発生している問題・エラーメッセージ

SQLiteOpenHelperを使っていた時には、
あるデータベースファイルから他のデータベースファイルへ
データを移動する際には
ATTACH DATABASEを使っていたため、
Roomでも試してみたのですが、現状うまくいかない状態です。
(1つのトランザクションの中で、複数のデータベースを開く事がうまくできずにいるため、
ATTACH DATABASEをうまく使えずにいます)

他の方法として思いつくのは、
SELECT文などでデータを取り出し、それを一つ一つArrayなどの配列などに入れ、
一つずつ取り出して、INSERTしていくという方法なのですが、
できればテーブル内のデータを一括で移行できるような方法を探したいと考えています。

何か良い方法などありましたら、教えていただけるとありがたいです。

補足情報(FW/ツールのバージョンなど)

MacOS High Sierraにて制作
Android Studio 3.4.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

既存のDBをRoomでも使えるようにするには、空っぽのMigrationを行えばOKです。

kotlin

1Room.databaseBuilder(context, MyDB::class.java, "app.db") 2 .addMigrations(object : Migration(1, 2) { 3 override fun migrate(database: SupportSQLiteDatabase) { 4 // 何もしない 5 } 6 }) 7 .build()

Migrationについては以下の公式ドキュメントを参考にしてください。
https://developer.android.com/training/data-storage/room/migrating-db-versions

投稿2019/07/16 03:52

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnnnn

2019/07/17 12:31

回答ありがとうございます! そして説明がわかりづらく申し訳ありません、 今回は、 以前作ったデータベース(databaseA.db)内の必要なデータのみを取り出し、 Roomで新しく作ったデータベース(databaseB.db)にINSERTし、 これからはdatabaseB.dbのみを使うようにする事が目的でした。 今回の質問の回答としてはベストアンサーをつけさせていただき、 必要であれば質問の仕方を変えて、再度別に質問させていただきます。 そして、Migrationを使ってRoomでも使えるようにする方法は調べていたのですが、 少しわかりづらく感じていたところがあったため、 今回説明していただいた事で、頭の中の整理ができました。 ありがとうございました!
kakajika

2019/07/17 14:02

DBのファイルを別にするところが重要なポイントだったのですね。意図を汲み取りきれずすみません。 ATTACH DATABASEがうまく動かないとしたら、DBのファイルを丸ごとコピーしてしまってからRoomで開くというのも一つの手かもしれません。この時Migrationの中で不要なデータを削除するようにすれば、一部のデータのみを移行するという目的も果たせると思います。ご参考までに。
nnnnn

2019/07/26 01:55

お返事が遅れてしまい、申し訳ありません、 以前作ったデータベース(databaseA.db)をRoomを使って開く事はできました! その中に入っていたデータを、 Roomで新しく作ったデータベース(databaseB.db)に入れる必要もあったのですが、 その点については、ATTACH DATABASEを使わず、Listを使ってデータを受け渡す形にしました。 (@QureyでdatabaseA.dbから取り出したデータを  List<(Entity名)>に入れ、  それを@Insertを使って、databaseB.dbに入れる形にしました) ご助言、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問