sqlite数据库中SQLiteOpenHelper类的onUpgrade方法

很多时候我们需要在项目进行中为项目添加一张表,今天终于搞清楚了。

代码如下

package com.zy.dao;

import android.R.integer;
import android.R.string;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DbHelper extends SQLiteOpenHelper
{
	private static final int version = 2;
	private static final String DBNAME = "db_fa.db";

	public DbHelper(Context context)
	{
		super(context, DBNAME, null, version);
	}

	@Override
	public void onCreate(SQLiteDatabase db)
	{
		//创建收入表
		db.execSQL("create table if not exists tb_IncomeInfo  (income_id integer primary key autoincrement," +
				"income_price varchar(10),income_date varchar(20),income_account varchar(10)," +
				"income_payer varchar(10),income_category varchar(10),income_remark varchar(100))");
		
		//创建支出表
		db.execSQL("create table if not exists tb_ConsumeInfo (consume_id integer primary key autoincrement," +
				"consume_price varchar(10),consume_time varchar(20),consume_account varchar(10)," +
				"consume_address varchar(20),consume_category varchar(10),consume_remark varchar(100))");

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
	{	
		onCreate(db);
	}

}

添加新表后要在onUpgrade执行onCreate方法,并且要把版本号更新(这个很重要!),这里我把版本号改为了。不然是无法添加进去表的!



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,我们需要定义一个数据模型来表示生词本的单词和解释,如下所示: ```kotlin data class Word(val id: Long = -1, val word: String, val meaning: String) ``` 接下来,我们需要创建一个来管理SQLite数据库和表格的创建,更新和查询。这个应该继承自SQLiteOpenHelper,如下所示: ```kotlin class WordDatabaseHelper( context: Context, name: String? = null, factory: SQLiteDatabase.CursorFactory? = null, version: Int = 1 ) : SQLiteOpenHelper(context, name, factory, version) { companion object { private const val DATABASE_NAME = "word.db" private const val DATABASE_VERSION = 1 const val TABLE_NAME = "words" const val ID = "_id" const val WORD = "word" const val MEANING = "meaning" } override fun onCreate(db: SQLiteDatabase?) { val createTableSql = """ CREATE TABLE $TABLE_NAME ( $ID INTEGER PRIMARY KEY AUTOINCREMENT, $WORD TEXT NOT NULL, $MEANING TEXT NOT NULL ) """.trimIndent() db?.execSQL(createTableSql) } override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) { val dropTableSql = "DROP TABLE IF EXISTS $TABLE_NAME" db?.execSQL(dropTableSql) onCreate(db) } } ``` 在这个,我们定义了数据库的名称和版本,以及表格的名称和列名。在onCreate()方法,我们创建了一个名为words的表格,并定义了三个列:_id,word和meaning。在onUpgrade()方法,我们删除了旧表格并重新创建。 接下来,我们可以创建一个单例来管理数据库的操作,如下所示: ```kotlin object WordDatabaseManager { private lateinit var dbHelper: WordDatabaseHelper private lateinit var db: SQLiteDatabase fun init(context: Context) { dbHelper = WordDatabaseHelper(context, WordDatabaseHelper.DATABASE_NAME, null, WordDatabaseHelper.DATABASE_VERSION) db = dbHelper.writableDatabase } fun insert(word: Word): Boolean { val contentValues = ContentValues().apply { put(WordDatabaseHelper.WORD, word.word) put(WordDatabaseHelper.MEANING, word.meaning) } val result = db.insert(WordDatabaseHelper.TABLE_NAME, null, contentValues) return result != -1L } fun queryAll(): List<Word> { val cursor = db.query( WordDatabaseHelper.TABLE_NAME, arrayOf(WordDatabaseHelper.ID, WordDatabaseHelper.WORD, WordDatabaseHelper.MEANING), null, null, null, null, null ) val wordList = mutableListOf<Word>() while (cursor.moveToNext()) { val id = cursor.getLong(cursor.getColumnIndex(WordDatabaseHelper.ID)) val word = cursor.getString(cursor.getColumnIndex(WordDatabaseHelper.WORD)) val meaning = cursor.getString(cursor.getColumnIndex(WordDatabaseHelper.MEANING)) wordList.add(Word(id, word, meaning)) } cursor.close() return wordList } fun delete(id: Long): Boolean { val result = db.delete(WordDatabaseHelper.TABLE_NAME, "${WordDatabaseHelper.ID} = ?", arrayOf(id.toString())) return result > 0 } } ``` 在这个,我们使用WordDatabaseHelper创建了一个数据库,并定义了三个常见的操作:插入,查询和删除。在insert()方法,我们创建了一个ContentValues对象并将单词和解释添加到其,然后使用insert()方法将其插入到数据库。在queryAll()方法,我们使用query()方法查询所有单词并返回它们的列表。在delete()方法,我们使用delete()方法根据_id删除一个单词。 现在我们可以在Activity使用这个,如下所示: ```kotlin class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) WordDatabaseManager.init(this) binding.btnAdd.setOnClickListener { val word = binding.etWord.text.toString() val meaning = binding.etMeaning.text.toString() if (word.isNotEmpty() && meaning.isNotEmpty()) { val result = WordDatabaseManager.insert(Word(word = word, meaning = meaning)) if (result) { Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show() binding.etWord.setText("") binding.etMeaning.setText("") } else { Toast.makeText(this, "添加失败", Toast.LENGTH_SHORT).show() } } else { Toast.makeText(this, "请输入单词和解释", Toast.LENGTH_SHORT).show() } } binding.btnQuery.setOnClickListener { val words = WordDatabaseManager.queryAll() val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, words) binding.lvWords.adapter = adapter } binding.lvWords.setOnItemClickListener { _, _, position, _ -> val word = binding.lvWords.adapter.getItem(position) as Word val dialog = AlertDialog.Builder(this) .setTitle("删除单词") .setMessage("确定要删除单词${word.word}吗?") .setPositiveButton("确定") { _, _ -> val result = WordDatabaseManager.delete(word.id) if (result) { Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show() binding.btnQuery.performClick() } else { Toast.makeText(this, "删除失败", Toast.LENGTH_SHORT).show() } } .setNegativeButton("取消", null) .create() dialog.show() } } } ``` 在这个Activity,我们使用WordDatabaseManager来执行添加,查询和删除操作,并使用ListView显示所有单词。当用户点击一个单词时,我们会显示一个对话框询问用户是否要删除该单词。 现在,我们已经成功地创建了一个共享生词本应用程序,并使用SQLite数据库SQLiteOpenHelper实现了数据存储和管理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值