-2

Sqlite データベース挿入機能があります

ContentValues values=new ContentValues();
values.put(CardTable.KEY_USERID, card_id);
values.put("id", some id);
values.put("namr", some name);
......
getContentResolver().insert(CardManagingProvider.CONTENT_URI_DETAIL, values);

挿入クエリが機能しません。の値の 1 つがvalues長い文字列 (画像の Base64 エンコード形式) であるためですか? 誰でも私に何か提案をお願いできますか?

4

1 に答える 1

0

ここで SQLite の長さ制限を確認できます。

文字列または SQLite の BLOB の最大バイト数は、プリプロセッサ マクロ SQLITE_MAX_LENGTH によって定義されます。このマクロのデフォルト値は 10 億 (1 億または 1,000,000,000) です。次のようなコマンドライン オプションを使用して、コンパイル時にこの値を増減できます。

-DSQLITE_MAX_LENGTH=123456789 現在の実装では、231-1 または 2147483647 までの文字列または BLOB の長さのみがサポートされます。また、hex() などの一部の組み込み関数は、その時点よりかなり前に失敗する可能性があります。セキュリティが重要なアプリケーションでは、文字列と blob の最大長を増やさないことが最善です。実際、可能な場合は、文字列とブロブの最大長を数百万の範囲に減らすことをお勧めします。

Base64 がこれらの制限を超えているかどうかを判断できますが、そうではない可能性があります。

ただし、Base64 文字列をデータベースに保存しないことをお勧めします。データベースが大きいほど、SQL ステートメントの処理に時間がかかります。イメージの URI のみをデータベースに保存し、その URI を使用してディスク/Web からイメージを検索/ロードすることをお勧めします。

于 2012-05-29T15:22:14.183 に答える