一、SQLite介绍

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

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

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

SQLite 内部结构

  

  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文件夹中。

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

当然用cmd 也可以用sqlite3 显示

在模拟器中显示数据

Android之数据库的创建的更多相关文章

  1. 关于android中数据库的创建以及基础的增删改查的相应操作

    这里主要是掌握一些基本的相应的知识,具体的是阿金是等到明天在进行. 相应的知识点如下: 对于数据库中的一些常识.SQLite 没有服务器进程,它通过文件保存数据,该文件是跨平台的,可以放在其他平台中使 ...

  2. Android入门(十)SQLite创建升级数据库

    原文链接:http://www.orlion.ga/603/ 一.创建数据库 Android为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类, 借助这个类就可 ...

  3. (转)Android学习笔记---SQLite介绍,以及使用Sqlite,进行数据库的创建,完成数据添删改查的理解

    原文:http://blog.csdn.net/lidew521/article/details/8655229 1.SQLite介绍:最大特点是,无数据类型;除了可以使用文件或SharedPrefe ...

  4. android 数据库的创建

    主java package com.itheima.createdatabase; import android.app.Activity; import android.content.Contex ...

  5. 10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)

    1.Android数据库简单介绍. Android系统的framework层集成了Sqlite3数据库.我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下长处: (1) ...

  6. Android SQLiteOpenHelper Sqlite数据库的创建与打开

    Android Sqlite数据库是一个怎样的数据库? 答:是一种嵌入式小型设备,移动设备,的数据库,应用在穿戴设备(例如:智能手表,计算手环 等等),移动设备(例如:Android系统类型的手机 等 ...

  7. 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建

    数据库的创建和sql语句增删改查 1. 载入驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, nam ...

  8. Android -- SQLite 数据库创建,增删改查,事务处理

    1. 概述 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类 ...

  9. Android开发SQLite数据库的创建

    package com.example.db; import android.content.Context; import android.database.sqlite.SQLiteDatabas ...

随机推荐

  1. 使用localResizeIMG微信压缩上传图片安卓报错 weixin://preInjectJSBridge/fail

    微信上传图片是经常使用的功能,首先说一下使用的是:localResizeIMG进行图片压缩上传.感觉还是很好用,基本上功能都能满足. 但是最近在开发这个功能时遇到一个奇怪的问题,就是iphone|ip ...

  2. 百度echart使用心得,百度图表。

    百度echart算是百度针对数据展示做的一个图表插件吧,一般我们使用都不是问题,主要还是对于对动态数据的解析.我这里使用饼状图,和柱状图为例: 首先,我们需要定义一个绘图的容器:(class是我自己定 ...

  3. hashmap两种遍历方法

    第一种:使用entryset来进行遍历 Map map=new HashMap(); Iterator iter=map.entrySet().iterator(); while(iter.hasNe ...

  4. Xenko基础API笔记2-Enum Keys按键

    Name   Description A The 'a' key. Add The 'add' key. Apps The 'apps' key. Attn The 'attn' key. B The ...

  5. [转]:Delphi 中的哈希表(1): THashedStringList

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  6. SICP练习记录

    -------------求一个数的平方根(牛顿法平方根求解法): (define (sqrt-iter guess x) (if (good-enough? guess x) guess (sqrt ...

  7. 谈谈Ruby中的类变量

    Ruby中的类变量,很多文章都是不太建议使用的,主要原因在于他的一些特性容易导致犯一些错误,尤其在广泛使用元编程的时候. 初步接触类变量可能觉得他跟C++的类静态成员和Java中的静态变量没什么区别, ...

  8. Linux常用性能调优工具索引

    root@ubuntu:~# dstat----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--usr sys i ...

  9. 常量函数、常量引用参数、常量引用返回值[C++]

    1. 关于常量引用正像在C语言中使用指针一样,C++中通常使用引用 有一个函数... foo()并且这个函数返回一个引用...... & foo()...., 一个指向位图(Bitmap)的引 ...

  10. WCF Misconfiguration: Insufficient Audit Failure Handling

    Abstract: The program is configured not to generate an exception when it fails to write to an audit ...