2011-09-11 13 views
0

行が存在することがわかっているテーブルの行を削除しようとしています。私が試した:Android sqliteの行の削除の失敗

final String s = "DELETE from %s where Name = '%s'";   
String sql = String.format(s, GetTableName(), sListName); 
Cursor cr= GetUserDb().GetSQLiteDb().rawQuery(sql, null); 

と私が試した:

String sWhere = String.format("Name = '%s'", sListName); 
long lRowsUpdated = GetUserDb().GetSQLiteDb().delete(GetTableName(), sWhere, null); 


** sWhere >> Name = 'groceries' ** 
** sql >> DELETE from Lists where Name = 'groceries' ** 

にはクラッシュやlogcat例外はありませんが、行はまだ削除されません。私は行方不明のものがありますか?たぶん私は別の場所にロックするか、マニフェストなどで特定のアクセス許可を設定する必要がありますか?

+0

私の主キーはsListNameです。これは重要かどうかわからないTEXTです... – Mike6679

+0

umm ... String.format()については確かですか?それは正しいステートメントを返しますか? String sql = String.format(s、new Object [] {GetTableName()、sListName});を試してください。 – mihail

+0

@mihail - ありがとう。私はsql = DELETEをList = Nameから 'groceries'に変更しても行を削除せず、エラーもスローされないというあなたの提案を試みました。私はこの問題がまったく別のものだと思っています.... – Mike6679

答えて

2

使用すると、(削除)SqliteDatabaseから - これは、影響を受けた行の数を返します。例えば。

+0

ありがとう私はあなたが私の元のポストと幸運で見ることができるようにそれを試みました。 – Mike6679

+0

create文と値の例を表示してください。コードに何も問題はありません。値でなければなりません。 –

+0

私は、元の投稿 – Mike6679

0

これを試してみてください:

 SQLiteStatement stmt = db.compileStatement("DELETE FROM " + getTableName() + "WHERE Name=?"); 
     stmt.bindString(1, sListName); 
    stmt.execute(); 
+0

しかし、stmt.execute()が成功するかどうかを知っていますか? – Mike6679

+0

何らかの理由でAndroidに、11より低いAPIバージョンで削除された行数(executeUpdateDelete())を返すメソッドがありません...しかし、個人的に私が知っている行を削除しています。それが成功しなければ、それは行が存在しないことを意味します - とにかく私は望む結果を得ます。 – IncrediApp

+0

最後にstmt.close()を呼び出すことを忘れないでください。 – IncrediApp

0

あなたのキーを持っている列がsListNameの場合は、削除する必要があります。sListName = '%s'は、削除する必要がある場合を除いて削除してください( 'tab name =?'、新しい文字列[] {aString}あなたが削除しようとしている名前と呼ばれるもう1つの列ですが、それがプライマリキーではない場合は、削除で2行が得られる可能性があります。

いつでもエミュレータとadbシェルを使用して、sqlite3シェルコマンドを実行してSQL文を試してみることができます。あなたがあなたの行を入力して影響を受ける行が0になった場合、あなたは文が崩れていることを知っています。

組み込みCurorAdapterまたはContentProvidersを使用していない場合、プライマリキーの名前を_IDにする必要はありません。名前は任意です。型については、SQLite3では、実際にそれをキャストする方法についての示唆に過ぎません。必要な列に任意のデータを入れることができます。

+0

ありがとうございます。私のステートメントは0行を返します。つまり、何も削除されませんでした。私は使用します:どこでsListName = 'テスト'を削除するので、私のSQL文が正しいことを知っています。私はこれを確認するためにこれの前にクエリを実行するので、行がそこにあることを知っています....私はちょうど問題が何かを理解できません。それは私が走った最後のクエリが何とか問題を引き起こしているのでしょうか? – Mike6679

+0

テーブルスキーマとは何ですか?私はそれが列名/変数名/クエリ名の問題を引き起こしているミックスアップの問題ではないと確信していない。 – Sleepybear

関連する問題