SQLite *** 作

SQLite *** 作,第1张

概述 *** 作数据库需要通过SQLiteOpenHelper的getReadableDatabase()或getWritableDatabase()来获得可读和可读写的SQLiteDatabase。 然后通过SQLiteDatabase的一系列方法来 *** 作数据库。 因为SQLiteOpenHelper是抽象类,需要自己写一个类来继承它。 下面通过一个例子来说明如何 *** 作数据库。 import android.c

*** 作数据库需要通过sqliteOpenHelper的getReadableDatabase()或getWritableDatabase()来获得可读和可读写的sqliteDatabase。

然后通过sqliteDatabase的一系列方法来 *** 作数据库。

因为sqliteOpenHelper是抽象类,需要自己写一个类来继承它。

下面通过一个例子来说明如何 *** 作数据库。


import androID.content.Context;import androID.database.sqlite.sqliteDatabase;import androID.database.sqlite.sqliteDatabase.CursorFactory;import androID.database.sqlite.sqliteOpenHelper;import androID.util.Log;/** * sqliteOpenHelper是一个抽象类,不能直接使用,需要自己写一个类继承它。 * 然后可以通过getReadableDatabase()获取一个可读的database;<br> * 通过getWritableDatabase()方法获取一个可读写的Database。<br> * 如果只有查询 *** 作,就用getReadableDatabase()就可以了。 * @author lucky star * */public class DatabaseHelper extends sqliteOpenHelper {	// 数据库版本号,从1开始,必须是大于0的整数。	public final static int VERSION = 1;		// 需要复写sqliteOpenHelper的这个构造方法。	public DatabaseHelper(Context context,String name,CursorFactory factory,int version) {		super(context,name,factory,version);		// Todo auto-generated constructor stub	}		public DatabaseHelper(Context context,int version) {		this(context,null,version);	}		public DatabaseHelper(Context context,String name) {		this(context,VERSION);	}	@OverrIDe	public voID onCreate(sqliteDatabase db) {		Log.d("DatabaseHelper","onCreate()");		// 创建数据时就创建好表结构。		db.execsql("create table user(ID int primary key,name varchar(32),age int)");		Log.d("DatabaseHelper","create table user.");	}	@OverrIDe	public voID onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {		Log.d("DatabaseHelper","onUpgrade()");	}}

import androID.app.Activity;import androID.content.ContentValues;import androID.database.Cursor;import androID.database.sqlite.sqliteDatabase;import androID.os.Bundle;import androID.util.Log;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.button;import androID.Widget.Toast;public class DatabaSEOperationActivity extends Activity {	// 创建数据库	private button createDatabaseBtn = null;	// 升级数据库	private button upgradeDatabaseBtn = null;	private button insertBtn = null;	private button updateBtn = null;	private button queryBtn = null;	private button deleteBtn = null;	private DatabaseHelper dh = null;	private sqliteDatabase sdb = null;		@OverrIDe	protected voID onCreate(Bundle savedInstanceState) {		// Todo auto-generated method stub		super.onCreate(savedInstanceState);		setContentVIEw(R.layout.database);		createDatabaseBtn = (button) findVIEwByID(R.ID.database_creaet_btn);		insertBtn = (button) findVIEwByID(R.ID.database_add_btn);		updateBtn = (button) findVIEwByID(R.ID.database_update_btn);		queryBtn = (button) findVIEwByID(R.ID.database_query_btn);		deleteBtn = (button) findVIEwByID(R.ID.database_delete_btn);		upgradeDatabaseBtn = (button) findVIEwByID(R.ID.database_upgrade_btn);				createDatabaseBtn.setonClickListener(new CreateDatabaseListener());		upgradeDatabaseBtn.setonClickListener(new UpgradeDatabaseListener());		insertBtn.setonClickListener(new InsertDataListener());		updateBtn.setonClickListener(new UpdateDataListener());		queryBtn.setonClickListener(new queryDataListener());		deleteBtn.setonClickListener(new DeleteDataListener());	}		class CreateDatabaseListener implements OnClickListener {		@OverrIDe		public voID onClick(VIEw v) {			// 创建的数据库名是:lucky_star_db			dh = new DatabaseHelper(DatabaSEOperationActivity.this,"lucky_star_db");			// 只执行上面一行代码是不会创建数据库的,需要调用它的getReadableDatabase()或getWritableDatabase()方法。			//dh.getReadableDatabase();			// 因为后面会用到增,删,改,查,必须调用getWritable()方法来得到sqliteDatabase对象,因此声明一个成员变量			// 这里用dh.getWritableDatabase()初始化。			sdb = dh.getWritableDatabase();		}	}		class UpgradeDatabaseListener implements OnClickListener {		@OverrIDe		public voID onClick(VIEw v) {			// 创建的数据库名是:lucky_star_db,创建的数据库版本号是1,这里升级数据库,版本号为2			dh = new DatabaseHelper(DatabaSEOperationActivity.this,"lucky_star_db",2);			// 只执行上面一行代码是不会创建数据库的,需要调用它的getReadableDatabase()或getWritableDatabase()方法。			//dh.getReadableDatabase();			// 因为后面会用到增,删,改,查,必须调用getWritable()方法来得到sqliteDatabase对象,因此声明一个成员变量			// 这里用dh.getWritableDatabase()初始化。			sdb = dh.getWritableDatabase();		}	}		class InsertDataListener implements OnClickListener {		@OverrIDe		public voID onClick(VIEw v) {			ContentValues values = new ContentValues();			values.put("ID",1);			values.put("name","诸葛亮");			values.put("age",29);			sdb.insert("user",values);			Log.d(DatabaSEOperationActivity.this.getClass().getname(),"insert data into db.");		}	}		class UpdateDataListener implements OnClickListener {		@OverrIDe		public voID onClick(VIEw v) {			ContentValues values = new ContentValues();			values.put("ID","貂蝉");			values.put("age",21);			sdb.update("user",values,"ID=? and age=?",new String[]{"1","29"});			Log.d(DatabaSEOperationActivity.this.getClass().getname(),"update data.");		}	}		class queryDataListener implements OnClickListener {		@OverrIDe		public voID onClick(VIEw v) {			ContentValues values = new ContentValues();			values.put("ID",21);			Cursor cursor = sdb.query("user",new String[]{"ID","name","age"},"ID=?",new String[] {"1"},null);			while (cursor.movetoNext()) {				int ID = cursor.getInt(cursor.getColumnIndex("ID"));				int age = cursor.getInt(cursor.getColumnIndex("age"));				String name = cursor.getString(cursor.getColumnIndex("name"));				String msg = "查询到数据:[ID:" + ID + ",name:" + name + ",age:" + age;				Log.d(DatabaSEOperationActivity.this.getClass().getname(),msg);				Toast.makeText(DatabaSEOperationActivity.this,msg,Toast.LENGTH_LONG).show();			}			Log.d(DatabaSEOperationActivity.this.getClass().getname(),"query data.");		}	}		class DeleteDataListener implements OnClickListener {		@OverrIDe		public voID onClick(VIEw v) {			sdb.delete("user",new String[] {"1"});			Log.d(DatabaSEOperationActivity.this.getClass().getname(),"delete data.");		}	}}

布局文件database.xml:
<?xml version="1.0" enCoding="utf-8"?><linearLayout  xmlns:androID="http://schemas.androID.com/apk/res/androID"  androID:orIEntation="vertical"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent">    <button     	androID:ID="@+ID/database_creaet_btn"    	androID:layout_wIDth="fill_parent"    	androID:layout_height="wrap_content"    	androID:text="@string/createDatabase"    />    <button     	androID:ID="@+ID/database_upgrade_btn"    	androID:layout_wIDth="fill_parent"    	androID:layout_height="wrap_content"    	androID:text="@string/upgradeDatabase"    />    <button     	androID:ID="@+ID/database_add_btn"    	androID:layout_wIDth="fill_parent"    	androID:layout_height="wrap_content"    	androID:text="@string/addData"    />    <button     	androID:ID="@+ID/database_update_btn"    	androID:layout_wIDth="fill_parent"    	androID:layout_height="wrap_content"    	androID:text="@string/updateData"    />    <button     	androID:ID="@+ID/database_query_btn"    	androID:layout_wIDth="fill_parent"    	androID:layout_height="wrap_content"    	androID:text="@string/queryData"    />    <button     	androID:ID="@+ID/database_delete_btn"    	androID:layout_wIDth="fill_parent"    	androID:layout_height="wrap_content"    	androID:text="@string/deleteData"    /></linearLayout>

效果图:


非常简单,6个按钮,一个按钮对应一种数据库 *** 作。

先看看创建数据库:

单击“创建数据库”按钮,屏幕上没有任何提示,那我们怎么查看是否创建成功了呢?


ps:因为我的环境变量没有配置,因此是直接进入adb所在目录执行的命令。

可以看到,有一个data目录,进入里面。


下面还有一个data目录,进入其中。


标红的部分是我的应用程序的包名,进入其中


进入databases


OK,这个就是我们的数据库名了。上面的activity中,创建数据库时指定的名字就是这个。

在终端中进入数据库,查看创建的数据库和表。




下面看插入数据到数据库。

单击“添加数据”按钮,

然后查看是否增加成功。


OK,增加数据成功,只不过是乱码。


OK,再看查看数据,单击查看数据。



可以看到查询数据OK了,保存的时候在数据库中保存的是乱码,查询出来时OK的。


OK,修改数据,单击修改按钮。


OK,修改数据成功。


看看删除数据是否OK,单击“删除”按钮,


OK,删除数据也是OK的。


最后,看看升级数据库。

单击“升级数据库”按钮。

数据库版本发生变化时会调用sqliteOpenHelper的onUpgrade()方法,在代码中我们输出一句话。

单击“升级数据库”按钮后,控制台输出:

04-07 13:52:28.538: DEBUG/DatabaseHelper(520): onUpgrade()

在创建数据库时会调用onCreate()方法,控制台输出:

04-07 13:44:09.292: DEBUG/DatabaseHelper(520): onCreate()


其实,在上面的每一个 *** 作都输出有日志,下面看看输出:

04-07 13:44:09.292: DEBUG/DatabaseHelper(520): onCreate()--》创建数据库时调用
04-07 13:44:09.302: DEBUG/DatabaseHelper(520): create table user.--》创建数据库时调用
04-07 13:45:33.445: DEBUG/com.and.test.DatabaSEOperationActivity(520): insert data into db.-->插入数据时
04-07 13:47:55.182: DEBUG/com.and.test.DatabaSEOperationActivity(520): 查询到数据:[ID:1,name:诸葛亮,age:29-->查询数据时
04-07 13:47:55.412: DEBUG/com.and.test.DatabaSEOperationActivity(520): query data.
04-07 13:49:19.495: DEBUG/com.and.test.DatabaSEOperationActivity(520): update data.-->更新数据时
04-07 13:50:30.862: DEBUG/com.and.test.DatabaSEOperationActivity(520): delete data.
04-07 13:52:28.538: DEBUG/DatabaseHelper(520): onUpgrade()-->数据库升级时。


在终端中删除数据库可以用rm 数据库文件名。如本例中rm lucky_star_db

总结

以上是内存溢出为你收集整理的SQLite *** 作全部内容,希望文章能够帮你解决SQLite *** 作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1181083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存