[解決済み] 選択しようとしたときに SQLite Exception no such column
質問
以下のようなDBヘルパークラスがあります。
public int studentExists(String studid) {
Cursor dataCount = mDb.rawQuery("select count(*) from usertable where " + KEY_STUDID + "=" + studid, null);
dataCount.moveToFirst();
int count = dataCount.getInt(0);
dataCount.close();
return count;
}
私のアプリでは、学生IDが以前に入力されたものかどうかを確認するために、これを使用しています。
学生IDがint型(346742)の場合は正常に動作しますが、英数字(PB3874)を追加しようとすると、アプリが強制終了します。
エラーです。
06-13 18:22:20.554: ERROR/AndroidRuntime(8088): android.database.sqlite.SQLiteException: no such column: pb3874.このようなカラムはありません。コンパイル中:select count(*) from usertable where studid=pb3874
データ型の問題ではないと思います(私はテキスト型を使っているので)。
private static final String DATABASE_CREATE =
"create table usertable (_id integer primary key autoincrement, "
+ "studid text not null);";
しかし、なぜこのようなエラーが発生するのかがわかりません。
no such column: pb3874
studidカラムから単純にその値を選択しようとしているためです。 また、なぜこれは任意のint値に対して完全に動作するのでしょうか? どなたか、問題解決のためのアドバイスをお願いします。
解決方法は?
ここで起こっていることは、SQLite が 'pb3874' を文字列/テキストリテラルではなく、実際にはカラム名であるとみなしていることです。
テキストリテラルであることを指定するには、テキスト値を適切なシングルクォートで囲む必要があります。
SQLインジェクション攻撃を防ぐために、ユーザーから入力を受けるときは常にパラメータ化されたクエリを使用します。
("select count(*) from usertable where " + KEY_STUDID + "=?", studid);
パラメタライズなし(ユーザー入力を取る場合は非常にお勧めしません)。
("select count(*) from usertable where " + KEY_STUDID + "='" + studid + "'", null);
数値が出なかった理由。SQLiteが数値リテラルを変換してくれたからです。
関連
-
[解決済み] 現在のテーマでスタイル 'coordinatorLayoutStyle' を見つけることができませんでした。
-
[解決済み] [Solved] Unsupported method: ベースコンフィグ.getApplicationIdSuffix()
-
[解決済み】リストビューにonclicklistenerを追加する(android)
-
[解決済み】apkファイルのインストール中に「パッケージが破損しているようです」というエラーが発生する。
-
[解決済み】起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりませんでした
-
[解決済み] TypeError: cb.apply は関数ではありません。
-
[解決済み] Xlint:deprecationを使用して再コンパイルする方法
-
[解決済み] Android Fragment onAttach() 非推奨
-
[解決済み] Android M パーミッション : shouldShowRequestPermissionRationale()関数の使用方法について混乱しています。
-
[解決済み] AndroidでSQLiteを使用する際に、並行処理の問題を回避するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] カスタムアダプタからnotifyDataSetChangeが機能しない
-
[解決済み] 設定 ':classpath' の依存関係をすべて解決できなかった。
-
[解決済み] [Solved] Error "File google-services.json is missing from module root folder. これがないとGoogle Services Pluginは機能しません" [重複]。
-
[解決済み】起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりませんでした
-
[解決済み】android.content.ActivityNotFoundException: 明示的なアクティビティクラスを見つけることができません。
-
[解決済み】Bluestackの向きを変更する : ポートレート/ランドスケープモード
-
[解決済み】Android Studioで最新バージョンのgradleを使用する方法
-
[解決済み] エラー - Android リソースのリンクに失敗しました (AAPT2 27.0.3 Daemon #0)
-
[解決済み] SDKの場所がandroid studioで見つからない
-
[解決済み] 複数のデバイスを接続しているときにADB Shellを使用するには?error: more than one device and emulator "で失敗します。