Android入门笔记之Sqlite

发布时间:2016-12-8 4:13:05 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Android入门笔记之Sqlite",主要涉及到Android入门笔记之Sqlite方面的内容,对于Android入门笔记之Sqlite感兴趣的同学可以参考一下。

Android入门笔记之Sqlite <1>简介 SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。 SQLite由以下几个部分组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),是调试、修改和扩展SQLite的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite虚拟机中执行的程序集。 值得一提的是,袖珍型的SQLite竟然可以支持高达2TB大小的数据库,每个数据库都是以单个文件的形式存在,这些数据都是以B-Tree的数据结构形式存储在磁盘上。 在事务处理方面,SQLite通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程想数据库执行写操作之前,必须获得独占锁。在获得独占锁之后,其他的读或写操作将不会再发生。 SQLite采用动态数据类型,当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的列不匹配,SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储,SQLite称这为“弱类型”。但有一个特例,如果是INTEGER PRIMARY KEY,则其他类型不会被转换,会报一个“datatype missmatch”的错误。 概括来讲,SQLite支持NULL、INTEGER、REAL、TEXT和BLOB数据类型,分别代表空值、整型值、浮点值、字符串文本、二进制对象。  <2>关键步骤 一、 创建数据库 通过openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)方法创建数据库。     iteDatabase db=this.openOrCreateDatabase("test_db.db", Context.MODE_PRIVATE, null); 或者SQLiteDatabasedb2 = SQLiteDatabase.openOrCreateDatabase("/data/data/com.test/databases/test_db2.db3",null); 如上两种方式均能创建数据库,this.openOrCreateDatabase是对SQLiteDatabase.openOrCreateDatabase而来,如代码所见,原生的SQLiteDatabase.openOrCreateDatabase()方法第一参数要求输入绝对路劲,而所有的数据库都是储存于“data/data/应用报名/databases”目录下,所以输入完全的绝对路劲是一件重复且繁杂的工作。采用this.openOrCreateDatabase则省去了此操作。 另外还可以通过写一个继承SQLiteOpenHelper类的方式创建数据库,此种方式是一种更加进阶的创建方式。  SQLiteOpenHelper的使用方法  SQLiteOpenHelper是一个辅助类来管理数据库的创建和版本。  可以通过继承这个类,实现它的一些方法来对数据库进行一些操作。  所有继承了这个类的类都必须实现下面这样的一个构造方法:  public DatabaseHelper(Context context, Stringname, CursorFactory factory, int version)     第一个参数:Context类型,上下文对象。     第二个参数:String类型,数据库的名称     第三个参数:CursorFactory类型     第四个参数:int类型,数据库版本  下面是这个类的几个方法:  方法名 返回类型 描述 备注  getReadableDatabase() synchronized SQLiteDatabase 创建或打开一个数据库可以通过这两个方法返回的SQLiteDatabase对象对数据库进行一系列的操作,如新建一个表,插入一条数据等  getWritableDatabase() synchronized SQLiteDatabase 创建或打开一个可以读写的数据库 onCreate(SQLiteDatabase db) abstract void 第一次创建的时候调用 onOpen(SQLiteDatabase db) void 打开数据库 onUpgrade(SQLiteDatabase db,int oldVersion,intnewVersion) abstract void 升级数据库 close() synchronized void 关闭所有打开的数据库对象 <3>出现的问题        可从DDMS中导出db文件。 <4>代码及解释        Activity_sqlite.xml: <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/dbcreate" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="create" /> <Button android:id="@+id/dbupgrade" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="upgrade" /> <Button android:id="@+id/dbinsert" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="insert" /> <Button android:id="@+id/dbdelete" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="delete" /> <Button android:id="@+id/dbselect" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="select" /> <Button android:id="@+id/dbupdate" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="update" /> <TextView android:id="@+id/dbview" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="view" /> </LinearLayout>SqliteActivity.java: package com.func; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import com.test.R; public class SqliteActivity extends Activity{ /** * @ProjectName: [androidtest] * @Package: [com.func.SqliteActivity.java] * @ClassName: [SqliteActivity] * @Description: * @Author: [gmj] * @CreateDate: [2013-9-7 下午8:00:49] * @Version: [v1.0] */ private Button createDatabaseButton = null; private Button updateDatabaseButton = null; private Button insertButton = null; private Button updateButton = null; private Button selectButton = null; private Button deleteButton = null; private TextView tv = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sqlite); createDatabaseButton = (Button) findViewById(R.id.dbcreate); updateDatabaseButton = (Button) findViewById(R.id.dbupgrade); insertButton = (Button) findViewById(R.id.dbinsert); updateButton = (Button) findViewById(R.id.dbupdate); selectButton = (Button) findViewById(R.id.dbselect); deleteButton = (Button) findViewById(R.id.dbdelete); tv = (TextView) findViewById(R.id.dbview); createDatabaseButton.setOnClickListener(new CreateDatabaseOnClickListener()); updateDatabaseButton.setOnClickListener(new UpdateDatabaseOnClickListener()); insertButton.setOnClickListener(new InsertOnClickListener()); updateButton.setOnClickListener(new UpdateOnClickListener()); selectButton.setOnClickListener(new SelectOnClickListener()); deleteButton.setOnClickListener(new DeleteOnClickListener()); } class CreateDatabaseOnClickListener implements OnClickListener { public void onClick(View v) { // 创建了一个DatabaseHelper对象,只执行这句话是不会创建或打开连接的 SqliteHelper dbHelper = new SqliteHelper(SqliteActivity.this , "test_db"); SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); } } // updateDatabaseButton点击事件监听器 class UpdateDatabaseOnClickListener implements OnClickListener { public void onClick(View v) { // TODO Auto-generated method stub SqliteHelper dbHelper = new SqliteHelper(SqliteActivity.this , "test_db" , 2); // 得到一个只读的SQLiteDatabase对象 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); } } // insertButton点击事件监听器 class InsertOnClickListener implements OnClickListener { public void onClick(View v) { // 创建ContentValues对象 ContentValues values = new ContentValues(); // 向该对象中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致 values.put("id", 1); values.put("name", "abc"); // 创建DatabaseHelper对象 SqliteHelper dbHelper = new SqliteHelper(SqliteActivity.this , "test_db" , 2); // 得到一个可写的SQLiteDatabase对象 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); // 调用insert方法,就可以将数据插入到数据库当中 // 第一个参数:表名称 // 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值 // 第三个参数:ContentValues对象 sqliteDatabase.insert("user", null, values); } } // updateButton点击事件监听器 class UpdateOnClickListener implements OnClickListener { public void onClick(View v) { // 创建一个DatabaseHelper对象 SqliteHelper dbHelper = new SqliteHelper(SqliteActivity.this , "test_db" , 2); // 得到一个可写的SQLiteDatabase对象 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); // 创建一个ContentValues对象 ContentValues values = new ContentValues(); values.put("name", "ggg"); // 调用update方法 // 第一个参数String:表名 // 第二个参数ContentValues:ContentValues对象 // 第三个参数String:where字句,相当于sql语句where后面的语句,?号是占位符 // 第四个参数String[]:占位符的值 sqliteDatabase.update("user", values, "id=?", new String[] { "1" }); System.out.println("-----------update------------"); } } // selectButton点击事件监听器 class SelectOnClickListener implements OnClickListener { public void onClick(View v) { String id = null; String name = null; //创建DatabaseHelper对象 SqliteHelper dbHelper = new SqliteHelper(SqliteActivity.this , "test_db" , 2); // 得到一个只读的SQLiteDatabase对象 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); // 调用SQLiteDatabase对象的query方法进行查询,返回一个Cursor对象:由数据库查询返回的结果集对象 // 第一个参数String:表名 // 第二个参数String[]:要查询的列名 // 第三个参数String:查询条件 // 第四个参数String[]:查询条件的参数 // 第五个参数String:对查询的结果进行分组 // 第六个参数String:对分组的结果进行限制 // 第七个参数String:对查询的结果进行排序 Cursor cursor = sqliteDatabase.query("user", new String[] { "id", "name" }, "id=?", new String[] { "1" }, null, null, null); // 将光标移动到下一行,从而判断该结果集是否还有下一条数据,如果有则返回true,没有则返回false while (cursor.moveToNext()) { id = cursor.getString(cursor.getColumnIndex("id")); name = cursor.getString(cursor.getColumnIndex("name")); } tv.setText("id: "+id + "\nname: "+name); System.out.println("-------------select------------"); System.out.println("id: "+id); System.out.println("name: "+name); } } // deleteButton点击事件监听器 class DeleteOnClickListener implements OnClickListener { public void onClick(View v) { //创建DatabaseHelper对象 SqliteHelper dbHelper = new SqliteHelper(SqliteActivity.this , "test_db" , 2); //获得可写的SQLiteDatabase对象 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); //调用SQLiteDatabase对象的delete方法进行删除操作 //第一个参数String:表名 //第二个参数String:条件语句 //第三个参数String[]:条件值 sqliteDatabase.delete("user", "id=?", new String[]{"1"}); System.out.println("----------delete----------"); } } } SqliteHelper.java: package com.func; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.widget.Toast; public class SqliteHelper extends SQLiteOpenHelper{ public SqliteHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } public SqliteHelper(Context context, String name, int version){ this(context,name,null,version); } public SqliteHelper(Context context, String name){ this(context,name,1); } @Override public void onCreate(SQLiteDatabase arg0) { // TODO Auto-generated method stub System.out.println("create a db"); arg0.execSQL("create table user(id int , name varchar(20))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub System.out.println("upgrade a db"); } }  

上一篇:yum 源配置
下一篇:谷歌藏了一个大杀器来消灭碎片化

相关文章

相关评论