*** 作数据库需要通过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 *** 作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)