問題タブ [sqliteopenhelper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1307 参照

android - 主キーを使用せずに Android sqlite データベースを照会すると、エラー java.lang.NullPointerException がスローされます

ユーザーの検索入力に基づいてデータベース内の場所を検索する地図アプリケーションを Android で開発しています。データベースを検索し、データベース内のすべての場所の緯度を返すフィールドを使用して sqlite データベースにクエリを実行しようとしています。フィールドは主キーではありません。以下のコードです。助けが必要です。データベースを作成してアクセスするためのデータベース クラス。

//Places.java のコンストラクタ

//データベース ヘルパー クラス

}

}

}

データベースにクエリを実行するアクションをトリガーするメソッド。

場所の一般名に基づいて緯度を返したいのですが、generic_name 列を照会しようとすると、java.lang.NullPointerexception が返されます。その下に、データベースを照会するボタンが押されたときに取得するログ猫が表示されます

0 投票する
1 に答える
1084 参照

android - Android SQLite DatabaseObjectNotClosedException


私が構築している PoC Android アプリではandroid.database.sqlite.DatabaseObjectNotClosedException、アプリの終了時にガベージ コレクターが呼び出されたときにエラーが発生します。SQLiteDatabaseこれは、使用している とSQLiteOpenHelperオブジェクトの両方で close メソッドを呼び出している場合でも発生します。

コンストラクターでDBを開くためのコードを保持するDAO(から呼び出される)を使用してDBにアクセスしてAsyncTask.doInBackgroundいます。ActivityこのコンストラクターはonCreate()アクティビティのメソッドから呼び出されます。

同じアクティビティのメソッドから呼び出されるSQLiteDatabase、オブジェクトと同様に閉じるためのメソッドもあります。データベースの読み取り/書き込みは、AsyncTask のメソッドで実行されます。SQLiteOpenHelperonPause()doInBackground

close()のようにメソッドをオーバーライドしました。SQLiteOpenHelper

close()これをDAO クラスのメソッドから呼び出しています。

さらに説明が必要な場合はお知らせください。
ありがとう、
デボジット

編集 1:
これは、db から取得するためのコードです。

0 投票する
3 に答える
217 参照

android - アンドロイドでコンテキストと見なされるクラスはありますか、それとも何か特別なことをしなければなりませんか?

私はこのクラスを持っていますが、読みやすくするためにコードを省略しています:

エラーがどこにあるかをコメントしました。私は他の例をオンラインで見ましたが、他のすべての人がこれを SQLiteOpenHelper を拡張するクラスに送信しているため、機能していると思います。しかし、そうではありません。私のコードは次のとおりです。

私の仮定は間違っていますか、私が見逃しているものはありますか。

0 投票する
2 に答える
2469 参照

sqlite - sqlite レプリケーションについて

C++ Linux を使用して、アプリケーションの sqlite db で作業しています。sqlite db を別のマシンに複製する必要があります。

このため、sqlite にはレプリケーション機構がなく、ネットワーク API もないため、c++ fstream を使用して sqlite db ファイルを読み取り、他のマシンで新しい db ファイルを作成したいと考えています。

私は一日苦労しています。

誰でもこれで私を助けることができますか?

以下はコードです:

0 投票する
2 に答える
11560 参照

android - Androidデータベースへの同時書き込み(複数のサービスから)?

Android sqlite データベースと同時書き込みに重大な問題があります。より良い説明のために、実際の例を挙げます。

私はデータベースからアイテムのリストを表示しているデスクトップ ウィジェットを持っています (そして、バックグラウンドで、定期的にリモート サーバーから新しいデータを収集し、それらでデータベースを更新する DataService を持っています)。そのため、リスト内のアイテムをクリックすると、データベース内のクリックされたアイテムを更新する (= 書き込み操作を行う) 必要があります。しかし、DataService がデータベース内の新しいデータを更新しているときに、アイテムを正確にクリックすると、もちろん次のようなエラーがログに記録されます。

通常、シミュレートするのは困難ですが、たとえば 10 秒ごとに実行するように DataService をスケジュールすると (デモンストレーションのためだけに)、このエラーを非常に簡単にシミュレートできます。

私の質問は、これをどのように処理するかです。同時に2つの書き込みイベントがある場合、最初にのみ実行され、2番目はエラーとしてログに記録されることをドキュメントで読みました。奇妙に聞こえますが、別のオプションが必要です。たとえば、2 番目の書き込みは最初の書き込みが完了するまで待機します。それとも他の解決策ですか?ドキュメントを読み込もうとしていますが、この項目は Google ドキュメントでカバーされていないようです...私が持っているほとんどすべての情報は、公式ページ以外で見つけました。

PS: これは、私の DBHelper クラスの短縮版です。

0 投票する
2 に答える
6601 参照

android - Android の SQLite データベースへの同時アクセス - db は既に閉じられています

この主題に関する多くのトピックを読みましたが、誰も私の質問に答えることができませんでした.

並行スレッドからデータベースにアクセスします。SQLiteOpenHelper はシングルトンの設計パターンを実装しているため、アプリのインスタンスは 1 つしかありません。

次のようなコードでデータベースにアクセスします。

「db already closed」というエラーがまだ表示される理由がわかりません。getWritableDatabase() メソッドは、close() が呼び出されるまでデータベースをロックしないでください 他のスレッドからの他の getWritableDatabase() 呼び出しは、データベースが閉じられるまで待機する必要がありますか? そうですか、それとも何か見逃しましたか?

0 投票する
2 に答える
1894 参照

android - アクティビティを終了して再起動するまで、Android SQLite DB クエリが新しく挿入されたデータを返さない

Android アプリケーションで SQLite DB を使用して、サッカー選手を保存し、所属する名簿を維持しています。これらの名簿を管理するアクティビティには、2 つのダイアログ ウィンドウを開く機能があります。1 つは現在の名簿をデータベースに保存するため、もう 1 つはデータベースから既存の名簿をロードするためです。

名簿が保存され、名簿をロードするためのダイアログが開かれると、新しく保存された名簿が既存の名簿のクエリで見つかりません。アクティビティを終了して再開すると、新しい名簿がリストされ、問題なくロードできます。

DB に既存の名簿名を照会するコードは次のとおりです。

名簿をDBに挿入するコードは次のとおりです public void insertRoster(String roster_name, LeagueRoster roster){

最後に、2 つの異なるダイアログを作成するアクティビティ内のコードを次に示します。

誰かが何かアイデアを持っていれば、この問題について助けていただければ幸いです...

0 投票する
1 に答える
7268 参照

android - JSON文字列をSQLiteテーブルに解析する最速の方法は何ですか?

私はAndroidアプリケーションを作成しています。このアプリケーションでは、約1MBの約1000個の要素を含むjson文字列をダウンロードし、これらをそれぞれ解析してSQLiteデータベースに変換します。これを使用してListActivityにデータを入力します。

ダウンロードと解析は、アプリとのすべての対話で実行する必要があるものではありませんが(最初の実行時、またはユーザーがデータの更新を選択した場合のみ)、解析部分に時間がかかりすぎるのではないかと心配しています。 、約2〜3分で-電話アプリの用語では永遠のようです!

現在、Gsonを使用して各jsonオブジェクトを解析し、定義したカスタムオブジェクトに変換してから、SQLiteOpenHelperを使用してデータベースに入力しています。

私の質問は-これを実装するより速い方法はありますか?Gsonを使用せずに、jsonと直接対話する方が著しく高速でしょうか?それとも私は物事を遅くしている以下のコードで愚かなことをしていますか?

jsonをSQLiteに解析するためにAsyncTaskで使用しているメソッドは次のとおりです。

これは、SQLiteOpenHelperを拡張するVegDataHandlerクラスのaddCompanyメソッドです。

これは、SQLiteに追加する前に各json要素を保持するクラスです(簡潔にするために、ゲッターとセッターは省略しています)。

返信をよろしくお願いします。

0 投票する
1 に答える
2020 参照

android - CursorLoaders について混乱し、カスタム SQLiteOpenHelper でそれらを使用する

私は、人々が行う必要があるさまざまなタスクのアラームを設定できるようにするアプリを作成しています。私の現在の計画は、すべての関連データを SQLite データベースに保存することです。そのために、SQLiteOpenHelper を拡張するクラスを作成し、取り込まなければならないと予想されるすべての CRUD を処理するメソッドをそのクラスに詰め込みました。すべての処理を 1 つのスレッドで行うのは一般的に悪い考えであることを知っていたので、私はスレッド間で作業を分離する方法を調べたところ、CursorLoader と LoaderManager が見つかりました。これらは Android 互換性ライブラリで利用できるため、理想的でした。ただし、LoaderManagerは、ドキュメントのチュートリアルで行く ContentProvider が必要なようですであり、他のアプリがデータにアクセスできるようにするつもりはなかったので、ContentProviders で何かをする必要があるとは思っていませんでした。ContentProvider がないと、データベースが CursorLoader にフィードするための Uri を取得する方法がわかりません。SQLiteOpenHelper を拡張するクラスを引き続き使用し、LoaderManager を実装して、UI スレッドからカーソルを離してすべての ListFragments を保持できるようにする方法はありますか?

0 投票する
0 に答える
247 参照

android - データベースが別のライターによって閉じられている場合の「データベースが開いていません」

私のアプリにはたくさんFragmentsあります。ViewPagerアプリケーションの開始時に、そのうちの 3 つがデータベースに接続してデータを取得しようとします。

データベースの処理には、シングルトン パターンを使用しSQLiteOpenHelperます。データベースが必要なときは、次のように呼び出しますSQLiteDatabase db=DatabaseHelper.getInstance(this.getContext()).getWritableDatabase();

問題:

でデータベースを閉じないと、当然のdb.close()ことになります。android.database.sqlite.DatabaseObjectNotClosedException私もです。しかし、これはシングルトン アプローチであるため、フラグメントの 1 つがデータの取得を完了すると、データベースが閉じられ、残りのフラグメントはそれを使用できなくなります。

データベースから何かを読み取るたびに、データベースが開いているかどうかを確認するのは非常に冗長に思えます。他に何ができますか?