android sqlite 列名,关于android:删除sqlite中的表,包括列名

我在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);

}

}

目前我即使在MainActicity中也在on_click中实例化deletetable函数。 Logcat没有显示错误,但是当我打印检索到的列名时,它会打印一些已删除条目的列名。我不想要那些专栏。

而且我没有以任何方式使用升级方法。

您应该更正drop table SQL的语法(DROP TABLE IF EXISTS是两次),没有理由不起作用。

如果您获得权限被拒绝错误,请确保您正在访问您自己的应用程序的数据库,而不是其他应用程序的数据库。 如果需要,请在创建数据库时仔细检查是否使用了正确的软件包名称。

抱歉这是一个错字。 我编辑了我的问题。 问题不在于此。

显示一些代码,用于在出现错误时创建数据库和logcat。

要删除表,只需使用DROP TABLE语句。

表名应与您在CREATE TABLE语句中使用的名称完全相同。

在您的情况下,这将是:

SQL_DELETE_ENTRIES1 ="DROP TABLE IF EXISTS" + FeedEntry.TABLE_NAME;

SQL_DELETE_ENTRIES2 ="DROP TABLE IF EXISTS" + CycDetails.TABLE_NAME;

从数据库中删除表。

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

就像我说的那样,这并不是删除整个表格。 如果我将表保存在数据库中,我应该使用点运算符访问它吗? 这是db.execSQL("DROP TABLE IF EXISTS"+ DATABASE_NAME +"。"+ YOUR_TABLE);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Room是Google为Android平台开发的一个SQLite对象映射数据库框架,它提供了一种简单的方式来访问SQLite数据库。下面是使用Room进行SQLite查询的基本步骤: 1. 定义实体类:在Room是通过实体类来示的。你需要定义一个Java类来示数据库的每个,并使用注释来指定名、名等信息。 2. 定义DAO接口:DAO(Data Access Object)是用于访问数据库的接口。你需要定义一个接口来提供对实体类的CRUD操作。 3. 创建数据库:使用Room,你可以在应用程序创建一个SQLite数据库。你需要创建一个继承自RoomDatabase的抽象类,并定义抽象方法来获取DAO对象。 4. 执行查询操作:在DAO接口定义查询语句,并在应用程序调用该方法来执行查询操作。以下是一个使用Room进行查询的示例: ```java @Dao public interface UserDao { @Query("SELECT * FROM user WHERE id = :userId") User getUserById(int userId); @Query("SELECT * FROM user WHERE name LIKE :name") List<User> getUsersByName(String name); @Insert void insertUser(User user); } ``` 在上面的示例,@Query注释指定了查询语句,getUserById方法根据用户ID查询用户,getUsersByName方法根据名称查询用户,insertUser方法将用户插入数据库。 要使用上述查询方法,你需要创建一个RoomDatabase实例并获取UserDao对象。以下是一个使用Room进行查询的示例: ```java UserDatabase db = Room.databaseBuilder(getApplicationContext(), UserDatabase.class, "user.db").build(); UserDao userDao = db.userDao(); // 根据ID查询用户 User user = userDao.getUserById(1); // 根据名称查询用户 List<User> users = userDao.getUsersByName("John"); // 插入用户 User newUser = new User("Alice", "alice@example.com"); userDao.insertUser(newUser); ``` 在上面的示例,我们创建了一个UserDatabase实例,并使用其userDao()方法获得UserDao对象。然后我们可以使用UserDao对象的方法来执行查询和插入操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值