0

こんにちは、一般的なコメントをデータベースに動的に挿入しています。私のクエリは次のようになります。

String sql = "insert into table (comment) values('"+ dynamic_comment + "');";

use が次のようなものを挿入すると、エラーが発生します。

私はうまくやっています

その時点で私のクエリは次のようになります。

insert into table (comment) values('I'm doing great');

「調子がいい」

Error: Caused by: android.database.sqlite.SQLiteException: near "t": 
syntax error (code 1): , while compiling: 
insert into timeline(comment) values('Can't belive it really works');

この問題を克服する方法と、データベースの操作中にこのように直面する可能性のある他の問題がいくつあるか教えてください。

ありがとう

4

2 に答える 2

2

プリペアドステートメントを使用する必要があります。生の文字列をクエリに連結することは、非常に長い間悪い習慣でした。

ここから:

SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("insert into table (comment) values(?)");
stmt.bindString(1, dynamic_comment);
stmt.execute();
于 2013-03-19T09:42:59.520 に答える
1

挿入する前に文字列変数をエスケープする必要があります。

String sql = "insert into table (comment) values('"+ DatabaseUtils.sqlEscapeString(dynamic_comment) + "');";

上記の方法は、SQL インジェクション攻撃を受けやすいです。安全のために、パラメトリック ステートメントの使用について詳しく学んでください。

あなたと同じクエリのサンプルは次のようになります。

SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("INSERT INTO `table` (`comment`) values(?)");
stmt.bindString( 1, dynamic_comment );
stmt.execute();
于 2013-03-19T09:41:42.433 に答える