SQLite数据库简单的认识
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
SQLite特性
下面是访问SQLite官方网站: http://www.sqlite. org/ 时第一眼看到关于SQLite的特性.
1. ACID事务
2. 零配置 – 无需安装和管理配置
3. 储存在单一磁盘文件中的一个完整的数据库
4. 数据库文件可以在不同字节顺序的机器间自由的共享
5. 支持数据库大小至2TB
6. 足够小, 大致3万行C代码, 250K
7. 比一些流行的数据库在大部分普通数据库操作要快
8. 简单, 轻松的API
9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定
10. 良好注释的源代码, 并且有着90%以上的测试覆盖率
11. 独立: 没有额外依赖
12. Source完全的Open, 你可以用于任何用途, 包括出售它
13. 支持多种开发语言,C, PHP, Perl, Java, ASP .NET,Python
下面我以一个完整的Demo例子来展示对SQLite数据库操作,包括对数据库表的增、删、改、查等基本操作。下面的一个截图是该演示Demo的项目框架图:
通过上面的截图可以看到该项目src目录下包含两个类:MainActivity.java 和 MySQLiteOpenHelper.java 。其中MySQLiteOpenHelper.java是对数据库操作辅助类。
布局文件main.xml的代码:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView android:id="@+id/tv_title"
- android:layout_width="fill_parent" android:layout_height="wrap_content"
- android:text="Hello, Welcome to Andy's blog!" android:textSize="16sp"/>
-
- <Button android:id="@+id/newTable" android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:text="1.新建数据表"/>
- <Button android:id="@+id/addOne" android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:text="2.插入一条记录"/>
- <Button android:id="@+id/query" android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:text="3.查询数据库"/>
- <Button android:id="@+id/editOne" android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:text="4.修改一条记录"/>
- <Button android:id="@+id/deleteOne" android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:text="5.删除一条记录"/>
- <Button android:id="@+id/deleteTable" android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:text="6.删除数据表"/>
-
- <TextView android:id="@+id/tv_result"
- android:layout_width="fill_parent" android:layout_height="wrap_content"
- android:text="测试显示的结果" android:textSize="16sp"/>
-
- </LinearLayout>
MainActivity.java代码:
- package com.andyidea.sqlite;
- import java.io.File;
- import java.io.IOException;
- 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 android.widget.Toast;
- public class MainActivity extends Activity {
- private Button btn_newTable,btn_addOne,btn_query,
- btn_editOne,btn_deleteOne,btn_deleteTable;
- private TextView tv;
- private MySQLiteOpenHelper myOpenHelper;
- private SQLiteDatabase sqlitedb;
-
-
-
-
-
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- initializeViews();
-
-
- myOpenHelper = new MySQLiteOpenHelper(this);
-
-
-
-
-
-
-
-
-
-
-
-
- }
-
-
-
-
- private void initializeViews(){
- tv = (TextView)findViewById(R.id.tv_result);
- btn_newTable = (Button)findViewById(R.id.newTable);
- btn_addOne = (Button)findViewById(R.id.addOne);
- btn_query = (Button)findViewById(R.id.query);
- btn_editOne = (Button)findViewById(R.id.editOne);
- btn_deleteOne = (Button)findViewById(R.id.deleteOne);
- btn_deleteTable = (Button)findViewById(R.id.deleteTable);
-
- btn_newTable.setOnClickListener(new ClickEvent());
- btn_addOne.setOnClickListener(new ClickEvent());
- btn_query.setOnClickListener(new ClickEvent());
- btn_editOne.setOnClickListener(new ClickEvent());
- btn_deleteOne.setOnClickListener(new ClickEvent());
- btn_deleteTable.setOnClickListener(new ClickEvent());
- }
-
- class ClickEvent implements OnClickListener{
- @Override
- public void onClick(View v) {
- try{
-
- sqlitedb = myOpenHelper.getWritableDatabase();
-
-
-
-
- if(v == btn_newTable){
- String TABLE_NAME = "andy";
- String ID = "id";
- String TEXT = "text";
- String str_sql2 = "CREATE TABLE " + TABLE_NAME + "(" + ID
- + " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT
- + " text );";
- sqlitedb.execSQL(str_sql2);
- tv.setText("新建数据表成功!");
-
- }else if(v == btn_addOne){
-
-
-
-
- ContentValues cv = new ContentValues();
- cv.put(MySQLiteOpenHelper.TEXT, "新数据");
- sqlitedb.insert(MySQLiteOpenHelper.TABLE_NAME, null, cv);
-
-
-
-
-
-
-
-
-
-
-
-
-
- tv.setText("添加新数据成功!");
-
- }else if(v == btn_query){
- Cursor cur = sqlitedb.rawQuery("SELECT * FROM "+MySQLiteOpenHelper.TABLE_NAME, null);
- if(cur != null){
- String temp = "";
- int i = 0;
- while(cur.moveToNext()){
- temp += cur.getString(0);
- temp += cur.getString(1);
- i++;
- temp += "/n";
- }
- tv.setText(temp);
-
- }
- }else if(v == btn_editOne){
-
- ContentValues cv = new ContentValues();
- cv.put(MySQLiteOpenHelper.TEXT, "更新后的数据");
- sqlitedb.update("andy", cv, "id " + "=" + Integer.toString(1), null);
-
-
-
-
-
-
-
-
-
- tv.setText("修改数据成功!");
-
- }else if(v == btn_deleteOne){
-
- sqlitedb.delete("andy", MySQLiteOpenHelper.ID + "= 1", null);
-
-
-
-
-
-
-
-
- tv.setText("删除数据成功!");
-
- }else if(v == btn_deleteTable){
- sqlitedb.execSQL("DROP TABLE andy");
- tv.setText("删除数据表成功!");
-
- }
- }catch(Exception e){
- tv.setText("操作失败");
- }finally{
- sqlitedb.close();
- }
- }
-
- }
- }
MySQLiteOpenHelper辅助器类代码:
- package com.andyidea.sqlite;
- import android.content.Context;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- import android.util.Log;
-
-
-
-
-
- public class MySQLiteOpenHelper extends SQLiteOpenHelper {
- public static final String DATABASE_NAME = "AndyDemo.db";
- public static final int VERSION = 1;
- public static final String TABLE_NAME = "andy";
- public static final String ID = "id";
- public static final String TEXT = "text";
-
- public MySQLiteOpenHelper(Context context) {
- super(context, DATABASE_NAME, null, VERSION);
- }
-
-
-
- @Override
- public void onCreate(SQLiteDatabase db) {
-
- String strSQL = "CREATE TABLE " + TABLE_NAME + "(" + ID
- + " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT + " text );";
-
- db.execSQL(strSQL);
- }
-
-
-
-
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- Log.e("AndyDemo", "onUpgrade");
- }
- }
当我们需要把数据库创建在SDCard中时,需要在AndroidManifest.xml文件中添加对SDCard操作的权限,如下:
- <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
通过以上步骤的操作,对SQLite数据库的操作有了大概的认识。下面我们来看看程序运行的效果。
由于该Demo的代码比较多,需要该源码的请到资源中下载:http://download.csdn.net/detail/cjjky/4236087,谢谢。
欢迎大家关注 ^-^