You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
SQLiteDatabaseのINSERT/UPDATE文でコンフリクト対応する話 . はじめに SQLiteはデータのコンフリクトを解消するコンフリクトアルゴリズムをサポートしており, CREATE TABLE構文でON CONFLICT句として指定できる. INSERT, UPDATE構文では文体をより自然にするためにON CONFLICTではなくOR句として指定される. Androidでもこれを使うことができる. SQLiteDatabaseクラスを使ってINSERT or UPDATEをする際にコンフリクトアルゴリズムを指定できるメソッドがAPI Lv.8から用意されている. SQL As Understood By SQLite Android Developers - SQLiteDatabase.insertWithOnConflict Android Developers
はじめに Realm Advent Calendar 6日目を担当する@takkeです。 私が作成したAndroid用TwitterクライアントTwitPaneで「ツイートを保存するDB」としてRealmを採用してから4ヶ月ほど経ちました。 導入当初に Twitterクライアントの内部DBをSQLiteからRealmに移行したときのノウハウまとめ という記事を書きましたが今回はその続編としてその後の運用で得られたノウハウを書いていきます。 と言いますか・・・、 世間にはRealmの性能や便利な使い方など良い側面ばかり取り上げた記事があふれていますが僕らはもっと現実的なノウハウを求めているんです!!今回はその呼び水として「Realmが原因でクラッシュすることが多すぎたのでSQLiteに自動的に縮退する仕組みを作った」件について書きます。 Realmのバージョンは少し古くて 0.84.1 です
はじめに この記事は「Android Advent Calendar 2014」の5日目の記事です。 追記(2015/12/19) 2015年版を書きました。どうぞご覧下さいませ。 天下一「AndroidのORM」武道会(2015年版) - Qiita tl;dr 3行でまとめ へ移動↓ AndroidのORM事情 スマートフォンアプリでは、ネットワークから取得したデータの保持や、ユーザーが入力したデータの保持、その他いろいろなデータの管理にSQLiteデータベースを使用することが多いと思われます。 これらはAndroidの標準APIで操作できますが ―一度やってみればわかりますが― 非常にめんどくさく、思わず険しい顔になってしまいます。 そんなAndroidのSQLite操作を楽に行うため(そして実装時間節約のため)、O/Rマッパー(ORM)を導入するのは良い判断だと思います。 ところが
SQLiteは追記型という形式でデータベースファイルを管理していて、データを書き込むたびにゴミデータが貯まっていきます。 なので、定期的にVACUUMをしてゴミデータを整理するのが普通です。 しかしAndroidでSQLiteを使う場合はVACUUMを実行しなくてもデータベースが肥大し続けることはありません。 これは、AndroidがSQLiteのAuto Vacuumを有効にしてデータベースを作成するためです。 以下はAndroidが作成したデータベースと、SQLiteデフォルトのデータベースのauto_vacuumの設定値を比較したものです。 auto_vacuum Pragmaが有効になっていることがわかります。 PRAGMA Android SQLiteデフォルト auto_vacuum 1 0 auto_vacuumが1に設定されていると、SQLiteはトランザクションのコミット
FileBackupHelperはCotext.getFilesDir()配下のファイルを対象にしているため、SQLiteのデータベースファイルをバックアップするには、ダーティな方法を使わなければならない。 FileBackupHelperがバックアップ対象のファイルをフルパスに解決するコードは以下のようになっていて、Context.getFilesDir()で取得したディレクトリを親ディレクトリとして、コンストラクタに指定したファイル名(files[i])を連結する。 File base = mContext.getFilesDir(); ... fullPaths[i] = (new File(base, files[i])).getAbsolutePath(); ... performBackup_checked(oldState, data, newState, fullPaths
Flywayとは FlywayとはDBマイグレーションフレームワークです。 複数人でのアプリケーション開発時のDBマイグレーション作業を素早く手軽に行うことができます。 MavenやAnt、APIやコマンドラインツール形式で提供されており、柔軟に対応することができます。 環境構築方法 今回使用した動作環境は以下のとおりです。 OS : MacOS X 10.7.4 MySQL : 5.5.15 flywayを使ってみよう 環境設定 flywayはMavenやAPIからも使用できますが、今回はCommand-line Toolを使ってみましょう。 ここからCommand-line Toolをダウンロードして解凍しておきましょう。 次にテストで使用するデータベースを用意します。今回はMySQLを使用しました。 mysqlを起動し、コンソールからデータベースを作成しておきましょう。 mysql>
実機のSQLiteにアクセス 先日、Androidアプリの動作確認を実機(Galaxy Nexus)で行いました。 昔は問題なくadb shellで中にはいってsqlite3コマンドで確認できた気がしてたんですが、 DBファイルがある場所へ移動してファイルを確認しようとしたらpermission deniedだし、 そもそもsqlite3コマンド自体が使えないという状況でした。 rootとってsqliteを移植してる人もいましたが、今回はデータベースファイルの中身を確認するのが目的だったので、 データベースをPCにもってくる方法についての備忘録的tipsです。 もっとちゃんとした回避策があるような気がしなくもないですが。誰か知ってたら教えてください。 環境 今回使用した動作環境は以下のとおりです。 OS : MacOS X 10.7.4 実機 : Galaxy Nexus Android
ContentProvider アクセスには CursorLoader を使おう Android アプリでデータベースを扱いたい場合は SQLite を使用しますが、他のアプリで使用している データベースへのアクセスには ContentProvider を使用して行います。 この ContentProvider に非同期でアクセスするための CursorLoader が Android 3.0 より導入されました (Support Package にも互換用クラスがあるので Android 1.6 から使用可能) 。今回はこの CursorLoader を使って簡単な電話帳一覧を作ってみたいと思います!今回も Support Package を使う場合の実装方法を解説します。 CursorLoader の使いかた CursorLoader は AsyncTaskLoader のサブクラスで
!この記事は古くなっています. 更新版は下記をご覧ください.! Android: SQLite3 LockとTransaction Immediate/Exclusive http://yuki312.blogspot.jp/2014/10/android-sqlite3-locktransaction.html SQLiteのロック機構と、Transactionで使用できるロック2種の選択基準についての考察。 ●SQLiteのロック SQLiteのロック単位は"データベース単位"。 このため、ロックを1つ取得すると同データベース上にある全てのテーブルに影響がある。 Oracle等の巨大なDBMSでは"行ロック"なんてものがあったりして細かくロックを制御できるが、軽量なSQLiteは"データベース単位"でのロックのみサポートしている。 そのため、長い時間ロックし続けると他テーブルになかなか
※ちょっと釣りタイトル気味ですが真面目な話です。 これからするのは、ちょっとセキュリティ屋さんやスマホアプリ開発現場の人達の頭が痛くなるかもしれないお話です。*1 定番のSQLインジェクション対策といえば「prepared-queryを利用し、パラメータはbindメカニズムを使って与える」ですよね。*2 Androidでアプリを開発する場合、その方法は使えるのでしょうか? 答えはYesです。AndroidはデータベースにSQLiteを使用しており、なおかつprepared-queryを利用出来ます。例えばこんな感じで。 SQLiteDatabase db = databaseHelper.getWritableDatabase(); //←databaseHelperはSQLiteOpenHelperを継承したクラスのオブジェクト SQLiteStatement stmt = db.com
Android のサンプルやチュートリアルでは、アプリ実行時に SQLite データベースを作成してデータの追加や更新、削除などを行っているのがほとんどです。 しかし、あらかじめ作成しておいた SQLite database をアプリに仕込みたい場合があります。 そこで、ここでは sqlite3 など使って作成した自分の SQLite database ファイルを、アプリの asset に入れ、初回起動時にアプリのシステムデータベース領域にコピーする方法を紹介します。 1. SQLite database ファイルを用意する 私は Ubuntu 派なので普通に sqlite3 を使います。(Windows とか Mac はよくわかりません... これとか? SQLite Database Browser) 主テーブルの他に android_metadata という名前のテーブルを作成します
We make society rich ITは今や、企業活動ならびに個人の生活からも切り離せないほどの大きな存在となっています。 ITの技術向上は、間違いなく社会を豊かにすることにつながるものと考えております。 SORICHは、ITにおける技術向上、クオリティ向上をめざし、社会に大きく貢献してまいります。 開発実績 Development record FX取引システム 金融 Java JavaScript MySQL 大規模なトランザクション処理が要求されるプライスボート、注文機能等、リアルタイム性の高いフロントシステム開発に加え、法廷帳簿出力を含めたバック業務システムなど、FX事業を運営する上で必要となる包括的なシステムを供給。 非常に高い品質を求められるシステムのため、ミスが許されないというプレッシャーの毎日でした。 レンタル端末在庫管理 IT Java PHP JavaScrip
はじめに Androidアプリケーションを作成する上でSQLiteを使用してデータベースを扱うことは多々あります。データの永続化や検索といった処理を容易に実装することができるので、多くのアプリケーションで使用されています。しかし、AndroidにはSQLiteを使用するための方法が以下のようにいくつか用意され、それぞれファイル作成時のパーミッションの挙動が異なっています。 SQLiteDatabase#openOrCreateDatabaseを使用して作成する Context#openOrCreateDatabaseを使用して作成する SQLiteOpenHelperクラスを使用して作成する もし、開発者がこれら方法の挙動を十分に理解していない場合、知らずのうちに脆弱性を作り込んでしまいます。 実際に、いくつかのアプリケーションではSQLiteDatabase#openOrCreateDa
SQLite contains full-text search module called FTS3, using this module you can easily add fast full text search to an Android application. First you need to create virtual table: CREATE VIRTUAL TABLE TableName USING FTS3(ColOne TEXT, ColTwo DATETIME) Your table must contains at least 1 TEXT field. The FTS3 virtual table acts like a regular table, but you need to manually maintain the indexes to ke
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く