0

SqLite でテーブルを削除する際に問題があります。

私が使用する場合-

db.delete(TABLE_NAME, null, null);

テーブルの内容は削除されますが、列名はそのまま残ります。列名も削除するにはどうすればよいですか?

db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME+"テーブルの名前"); も試しました。

しかし、それはまったく機能しません。

プログラムでテーブル全体を削除するにはどうすればよいですか、またはコードを使用して電話をルート化せずにデータベース全体を削除する方法はありますか (そうしないと、「アクセス許可が拒否されました」というエラーが発生します)。

これは、onCreate を処理し、テーブルを作成および削除するコードの一部です。

package com.example.appchecker;



import java.io.File;

import com.example.appchecker.FeedReaderContract.CycDetails;
import com.example.appchecker.FeedReaderContract.FeedEntry;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class FeedReaderDbHelper2 extends SQLiteOpenHelper {
    // If you change the database schema, you must increment the database version.
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "final31.db";
    public static boolean exists = false;
private static final String TEXT_TYPE = " TEXT";
private static final String COMMA_SEP = ", ";
private static final String SQL_CREATE_ENTRIES =
    " CREATE TABLE " +FeedEntry.TABLE_NAME + " (" +
    FeedEntry._ID + " INTEGER PRIMARY KEY" + COMMA_SEP +
    FeedEntry.COLUMN_NAME_NUMBER + TEXT_TYPE + COMMA_SEP +
    FeedEntry.COLUMN_NAME_APP_NAME + TEXT_TYPE + COMMA_SEP +
    FeedEntry.COLUMN_NAME_PKG_NAME + TEXT_TYPE + 
    // Any other options for the CREATE command
    ");";

private static final String SQL_CREATE_ENTRIES2 =
        " CREATE TABLE " +CycDetails.TABLE_NAME + " (" +
        CycDetails._ID + " INTEGER PRIMARY KEY" + COMMA_SEP +
         CycDetails.COLUMN_NAME_CYCLENAME + TEXT_TYPE + COMMA_SEP +
        CycDetails.COLUMN_NAME_DATE + TEXT_TYPE + COMMA_SEP +
       CycDetails.COLUMN_NAME_OSVERSION + TEXT_TYPE + COMMA_SEP +
        CycDetails.COLUMN_NAME_SWVERSION + TEXT_TYPE + 
        // Any other options for the CREATE command
        ");";



private static final String SQL_DELETE_ENTRIES1 =
    "DROP TABLE IF EXISTS " +   DATABASE_NAME.substring(0,DATABASE_NAME.length()-3)+".Mobile_App_Details";
private static final String SQL_DELETE_ENTRIES2 =
        "DROP TABLE IF EXISTS " + DATABASE_NAME.substring(0, DATABASE_NAME.length()-3)+".Cycle_Details";

public FeedReaderDbHelper2(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {




         db.execSQL(SQL_CREATE_ENTRIES);
         db.execSQL(SQL_CREATE_ENTRIES2);
         return;

 } /*Cursor cursor = db.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+FeedEntry.TABLE_NAME+"'", null);
    System.out.println("In on create1") ;
if(cursor==null)
{
        System.out.println("In on create")  ;
        db.execSQL(SQL_CREATE_ENTRIES);

    }
    else
    {
        System.out.println("Update phase")  ;
        exists=true;
    }
  */
   }

public static void deletetable(SQLiteDatabase db)
{



    db.delete(FeedEntry.TABLE_NAME, null, null);
    db.delete(CycDetails.TABLE_NAME, null, null);
    db.execSQL(SQL_DELETE_ENTRIES1);
     db.execSQL(SQL_DELETE_ENTRIES2);

}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // This database is only a cache for online data, so its upgrade policy is
    // to simply to discard the data and start over
    //System.out.println("Update phase")    ;
    db.execSQL(SQL_DELETE_ENTRIES1);
 db.execSQL(SQL_DELETE_ENTRIES2);
    //db.delete(FeedEntry.TABLE_NAME, null, null);
    onCreate(db);
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    onUpgrade(db, oldVersion, newVersion);
}
}

現在、MainActivity でも on_click で関数 deletetable をインスタンス化しています。Logcat はエラーを表示しませんが、取得した列名を出力すると、エントリが既に削除されている列名の一部が出力されます。それらの列は必要ありません。

また、アップグレード方法は一切使用していません。

4

3 に答える 3

1

ドロップ テーブル SQL の構文を修正する必要があります ( DROP TABLE IF EXISTS is two )。それが機能しない理由はありません。

アクセス許可拒否エラーが発生した場合は、別のアプリのデータベースではなく、自分のアプリのデータベースにアクセスしていることを確認してください。データベースを作成したときに、必要に応じて正しいパッケージ名を使用したことを再確認してください。

于 2013-10-15T03:29:33.087 に答える
0

データベースからテーブルを削除します。

db.execSQL("DROP TABLE IF EXISTS" + YOUR_TABLE);

于 2013-10-15T03:53:51.043 に答える
0

テーブルを削除するには、DROP TABLEステートメントを使用します。

テーブル名は、ステートメントで使用したものとまったく同じでなければなりません。CREATE TABLEあなたの場合、これは次のようになります。

SQL_DELETE_ENTRIES1 = "DROP TABLE IF EXISTS " + FeedEntry.TABLE_NAME;
SQL_DELETE_ENTRIES2 = "DROP TABLE IF EXISTS " + CycDetails.TABLE_NAME;
于 2013-10-15T07:37:47.843 に答える