Android之数据库的创建

时间:2022-02-25 01:18:51

一、SQLite介绍

  SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.

  SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。

  SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。

SQLite 内部结构

  Android之数据库的创建

  SQLite 基本上符合 SQL-92 标准,和其他的主要 SQL 数据库没什么区别。它的优点就是高效,Android 运行时环境包含了完整的 SQLite。

  SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为“弱类型”(manifest typing.)。

此外,SQLite 不支持一些标准的 SQL 功能,特别是外键约束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 还有一些 ALTER TABLE 功能。

除了上述功能外,SQLite 是一个完整的 SQL 系统,拥有完整的触发器,交易等等。

二、SQLite特点

SQLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB。它具有如下特征:

1、轻量级

SQLite和C\S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也相当小。

2、独立性

SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需要“安装”,所以在使用的时候能够省去不少麻烦。

3、隔离性

SQLite数据库中的所有信息(比如表、视图、触发器)都包含在一个文件内,方便管理和维护。

4、跨平台

SQLite数据库支持大部分操作系统,除了我们在电脑上使用的操作系统之外,很多手机操作系统同样可以运行,比如Android、Windows Mobile、Symbian、Palm等。

5、多语言接口

SQLite数据库支持很多语言编程接口,比如C\C++、Java、Python、dotNet、Ruby、Perl等,得到更多开发者的喜爱。

6、安全性

SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。

SQLite官方网站(http://www.sqlite.org),了解更多内容请前往。

三、创建数据库类

SQLiteOpenHelper

  SQLiteOpenHelper是SQLiteDatabase的一个帮助类, 用来管理数据库的创建和版本的更新。

  一般是建立一个类继承它, 并实现它的onCreate和onUpgrade方法。

  onCreate(SQLiteDatabase db) 创建数据库时调用

  onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) 版本更新时调用

  getReadableDatabase() 创建或打开一个只读数据库

  getWritableDatabase() 创建或打开一个读写数据库

创建数据库

 package com.database.weixin;

 import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log; public class MyDatabaseOpenHelper extends SQLiteOpenHelper{ private static final String DB_NAME = "mydata.db"; // 数据库名称
private static final int version = 1; // 数据库版本 public MyDatabaseOpenHelper(Context context) {
super(context, DB_NAME, null, version);
} // 问题:什么时候执行
// 没有前生
@Override
public void onCreate(SQLiteDatabase db) {
//编写【从1版本到最新状态】建表语句
Log.i("systemout", "没有数据库,创建数据库v2.0成功");
String sql_message = "create table t_message (id int primary key,face varchar(50),name varchar(50),date varchar(50),content varchar(50),noRead Integer)"; db.execSQL(sql_message); for(int i = 0 ; i < 50 ; i++){ // 使用execSQL方式来实现
String sql = "insert into t_message (id,face,name,date,content,noRead) values (?,?,?,?,?,?)";//插入操作的SQL语句 Object[] obj = new Object[]{i,"houzi","black"+i,"11月28日","有空吗?今晚一起吃饭",12};
// 2,'houzi','black','11月28日','有空吗?今晚一起吃饭',12
db.execSQL(sql,obj);//执行SQL语句
} } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }

这里特别的地方是通过调用了SQLiteOpenHelper类的getReadableDatabase()方法来实现创建一个数据库的

 package com.main.weixin;

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.database.weixin.MyDatabaseOpenHelper;
import com.weixin.entity.Messages; 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.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView; public class MainActivity extends Activity { private SimpleAdapter sa;
private BaseAdapter ba;
private ListView lv;
private List<Messages> listMessage = new ArrayList<Messages>();
private List<Map<String,Object>> listMessage2 = new ArrayList<Map<String,Object>>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main); //创建数据库
46 MyDatabaseOpenHelper helper = new MyDatabaseOpenHelper(this);
47 SQLiteDatabase db = helper.getWritableDatabase();
48
49 //相当于JDBC
50 Cursor cursor = db.query("t_message", null, null, null, null, null, null);
51 if(cursor.moveToFirst()){
52 do{
53 Messages message = new Messages();
54 message.setFace(cursor.getString(cursor.getColumnIndex("face")));
55 message.setName(cursor.getString(cursor.getColumnIndex("name")));
56 message.setDate(cursor.getString(cursor.getColumnIndex("date")));
57 message.setContent(cursor.getString(cursor.getColumnIndex("content")));
58 message.setNoRead(cursor.getInt(cursor.getColumnIndex("noRead")));
59 listMessage.add(message);
60 }while(cursor.moveToNext());
61 }
62
63
64
65 //关闭数据库连接
66 db.close();
//......后面代码上一章有,这就不展示了

在android中,为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的

数据库位于Android设备/data/data/package_name/databases文件夹中。

Android之数据库的创建

在图像化界面就可以查询到刚刚插入的数据

Android之数据库的创建

当然用cmd 也可以用sqlite3 显示

Android之数据库的创建

在模拟器中显示数据

Android之数据库的创建