每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库—SQLite。SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了。SQLite已经被多种软件和产品使用,Mozilla FireFox就是使用SQLite来存储配置数据的,Android和iPhone都是使用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数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。

  下面介绍一下如何在Android平台创建SQLite数据库,方法很简单,我们需要继承这个接口类SQLiteOpenHelper,并实现其中的onCreate与onUpgrade方法:

public class MyDatabaseHelper extends SQLiteOpenHelper {

    private static final String db_name = "SQLite_db.db";//数据文件的名字
private static int NUMBER = 1;//当前数据库版本,用于升级
private static final String table_name = "students";//表名
private static String sql = null;//sql语句 public MyDatabaseHelper(Context context) {
super(context, db_name, null, NUMBER);//数据库文件保存在当前应用所在包名:<包>/database/
} @Override
public void onCreate(SQLiteDatabase db) {
sql = "CREATE TABLE " + table_name + " (" +
"id INTEGER PRIMARY KEY ," +
"name VARCHAR(50) NOT NULL)";//创建数据库的SQL语句 db.execSQL(sql);//执行SQL语句
} /**
* 当数据库进行升级是调用,这里通过NUMBER值来进行判断,数据库是否升级
*/
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //第一种写法
sql = "ALTER TABLE " + table_name + " ADD sex VARCHAR(2) NULL";
Log.i("sql", sql);
db.execSQL(sql); //第二种写法
//db.execSQL("ALTER TABLE students ADD sex VARCHAR(10) NULL");
}
}

  下面我们在主Activity中创建这个类,然后进行数据的生成:

public class Activityone extends Activity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one); //创建SqlLite数据库
SQLiteOpenHelper helper = new MyDatabaseHelper(this);
helper.getWritableDatabase();
}
}

  到这里我们关于SQLite的创建就为大家分享完毕,需要提示的就是onUpgrade()方法,这个方法一般不执行,当我们的数据库版本发生变化时,才会被执行。


  下面我们来一起学习一下如何在Android中来使用SQLite数据库,来完成对数据的增、删、改、查、统计。

  我们通过创建一个管理学生信息的数据库来完成对SQLite功能的介绍展示,首先为了方便对学生类进行管理,我们先创建一个学生类:

public class tab_students {

    public Integer id;//学生Id
public String name;//学生姓名
public String password;//学生密码
public String school;//学生学校 public tab_students(){ } public tab_students(int _id,String _name,String _password){
id=_id;
name=_name;
password=_password;
} public Integer getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String _name) {
name = _name;
} public String getPassword() {
return password;
} public void setPassword(String _password) {
password = _password;
} public String getSchool() {
return school;
} public void setSchool(String _school) {
school = _school;
} @Override
public String toString() {
return "id:"+this.getId()+" name:"+this.getName()+" password:"+this.getPassword();
} }

  有了学生类,下面我们创建数据库配置文件:

public class MyTabOpen extends SQLiteOpenHelper{

    private static final String db_sql = "SQLiter.db";
private static int NUMBER = 1;
private static final String tab_name = "students";
private static String sql = null; public MyTabOpen(Context context) {
super(context, db_sql, null, NUMBER);
} @Override
public void onCreate(SQLiteDatabase db) {
sql = "CREATE TABLE " + tab_name + " (" +
"id INTEGER PRIMARY KEY ," +
"name VARCHAR(20) NOT NULL ," +
"password VARCHAR(20) NOT NULL)";
db.execSQL(sql);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //在更新数据库时,因原先数据库表中已有数据,所以新增加的列属性只能设置为“可以为空”
db.execSQL("ALTER TABLE students ADD school VARCHAR(10) NULL"); } }

  对于这个文件,大家有什么疑问请看上面的SQLite数据库创建讲解。

  这里我们的主Activity的代码如下,对于主Activity的布局文件,就不在粘代码了,布局文件全是Button按钮:

public class Activityone extends Activity {

    private static tab_students stu = null;
private static tab_service ser = null;
private static int conn = 1; private TextView mytext = null;
private Button mybutton1 = null;//添加数据
private Button mybutton2 = null;//删除数据
private Button mybutton3 = null;//修改数据
private Button mybutton4 = null;//查询数据
private Button mybutton5 = null;//分页获取数据
private Button mybutton6 = null;//获取数据总数
private Button mybutton7 = null;//普通页面跳转 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one);
mytext = (TextView)findViewById(R.id.textview);
mytext.setText("增删改查序"+"("+"sql语句"+")"); mybutton1 = (Button)findViewById(R.id.button1);
mybutton2 = (Button)findViewById(R.id.button2);
mybutton3 = (Button)findViewById(R.id.button3);
mybutton4 = (Button)findViewById(R.id.button4);
mybutton5 = (Button)findViewById(R.id.button5);
mybutton6 = (Button)findViewById(R.id.button6);
mybutton7 = (Button)findViewById(R.id.button7); mybutton1.setOnClickListener(new mybuttonlistener());
mybutton2.setOnClickListener(new mybuttonlistener());
mybutton3.setOnClickListener(new mybuttonlistener());
mybutton4.setOnClickListener(new mybuttonlistener());
mybutton5.setOnClickListener(new mybuttonlistener());
mybutton6.setOnClickListener(new mybuttonlistener());
mybutton7.setOnClickListener(new mybuttonlistener()); } class mybuttonlistener implements OnClickListener{ @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1://添加数据
ser =new tab_service(getApplicationContext());
stu = new tab_students(conn++,"小米","abc123");
ser.save(stu);
break; case R.id.button2://删除数据
ser =new tab_service(getApplicationContext());
ser.del(1);
break; case R.id.button3://修改数据
ser =new tab_service(getApplicationContext());
stu = new tab_students(1,"HTC","acm123");
ser.update(stu);
break; case R.id.button4://查询数据
ser =new tab_service(getApplicationContext());
stu=ser.find(1);
System.out.println(stu.toString());
break; case R.id.button5://分页获取数据
ser =new tab_service(getApplicationContext());
List<tab_students> list = ser.getScrollDate(0,5);
for(tab_students stu : list){
System.out.println(stu.toString());
}
break; case R.id.button6://获取数据总数
long number = 0;
ser =new tab_service(getApplicationContext());
number=ser.gettab();
System.out.println("数据库中共有:"+number+"条记录.");
break; default:
Activityone.this.startActivity(new Intent(Activityone.this,Activitytwo.class));//普通跳转
break;
}
}
}
}

  大家可能已经看到了,这里我们对SQLite的操作,都是通过tab_service.java类完成了,下面就为大家揭晓如何对SQLite进行操作:

public class tab_service {

    private MyTabOpen mytabopen = null;
private static SQLiteDatabase db = null;
private static String sql = null;
private static final String tab_name = "students"; public tab_service(Context context) {
this.mytabopen = new MyTabOpen(context);//获得数据库操作实例
} //添加数据
public void save(tab_students students){
db = mytabopen.getWritableDatabase();
sql = "insert into "+tab_name+"(id,name,password) values(?,?,?)";
db.execSQL(sql, new Object[]{students.getId(),students.getName(),students.getPassword()});
db.close(); //为了提高性能sqliter数据库可以不关闭
} //删除数据
public void del(Integer id){
db = mytabopen.getWritableDatabase();
sql = "delete from "+tab_name+" where id = ?";
db.execSQL(sql, new Object[]{id});
db.close();
} //更新数据
public void update(tab_students students){
db = mytabopen.getWritableDatabase();
sql = "update "+tab_name+" set name=?,password=? where id=?";
db.execSQL(sql, new Object[]{students.getName(), students.getPassword(), students.getId()});
db.close();
} //查询数据
public tab_students find(Integer id){ //getReadableDatabase()与getWritableDatabase()通过查看源代码知道,getReadableDatabase()方法在磁盘空间满的时候,仍能返回数据库操作实例,不过此时的实例只能用于读不能写
db = mytabopen.getReadableDatabase();
sql = "select * from "+tab_name+ " where id=?";
Cursor cur = db.rawQuery(sql, new String[]{id.toString()});
if(cur.moveToFirst()){
String name = cur.getString(cur.getColumnIndex("name"));
String password = cur.getString(cur.getColumnIndex("password"));
return new tab_students(id,name,password);
}
cur.close();
db.close();
return null;
} //分页获取数据
public List<tab_students> getScrollDate(int again,int last){ List<tab_students> list = new ArrayList<tab_students>();
db = mytabopen.getReadableDatabase();
sql = "select * from "+tab_name+ "limit ?,? order by id asc";//根据查询结果的id对数据进行升序排列
//sql = "select * from " +tab_name+ " limit ?,?";
Cursor cur = db.rawQuery(sql, new String[]{String.valueOf(again), String.valueOf(last)});
while (cur.moveToNext()) {
int id = cur.getInt(cur.getColumnIndex("id"));
String name = cur.getString(cur.getColumnIndex("name"));
String password = cur.getString(cur.getColumnIndex("password")); tab_students stu = new tab_students(id, name, password);
list.add(stu);
}
cur.close();
db.close();
return list;
} //获取数据总数目
public long gettab(){
db = mytabopen.getReadableDatabase();
sql = "select count(*) from "+tab_name;
Cursor cur = db.rawQuery(sql, null);
cur.moveToFirst();
long result = cur.getLong(0);
return result;
}
}

  是不是感觉和我们的SQL数据库操作一样,sql语句没有什么区别,是的,他们完全一致。没学过数据库的小朋友是不是已经抓狂啦,不要担心,Android工程师想到了你们,Android为我们封装好了一套对SQLite数据库进行操作的规范,下面我们就一起来学习一下,如何通过Android提供的规范晚场上面的操作。

  这里我们只需要修改一下,我们上面对数据库操作的类:

public class tab_service_two {

    private MyTabOpen mytabopen = null;
private static SQLiteDatabase db = null;
private static final String tab_name = "students"; public tab_service_two(Context context) {
this.mytabopen = new MyTabOpen(context);//获得数据库操作实例
} //添加数据
public void save(tab_students students){
db = mytabopen.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("id", students.getId());
values.put("name", students.getName());
values.put("password", students.getPassword());
db.insert(tab_name, null, values);
db.close();
} //删除数据
public void del(Integer id){
db = mytabopen.getWritableDatabase();
db.delete(tab_name, "id=?", new String[]{id.toString()});
db.close();
} //修改数据
public void update(tab_students students){
db = mytabopen.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", students.getName());
values.put("password", students.getPassword());
db.update(tab_name, values, "id=?", new String[]{students.getId().toString()});
db.close();
} //查询数据
public tab_students find(Integer id){
//getReadableDatabase()与getWritableDatabase()通过查看源代码知道,getReadableDatabase()方法在磁盘空间满的时候,仍能返回数据库操作实例,不过此时的实例只能用于读不能写
db = mytabopen.getReadableDatabase();
//当要查询数据库表中的所以信息时,第二个参数可以使用设置为空来代替数组
Cursor cur = db.query(tab_name, new String[]{"name","password"}, "id=?", new String[]{id.toString()}, null, null, null); if(cur.moveToFirst()){
String name = cur.getString(cur.getColumnIndex("name"));
String password = cur.getString(cur.getColumnIndex("password"));
return new tab_students(id,name,password);
}
cur.close();
db.close();
return null;
} //分页获取数据
public List<tab_students> getScrollDate(int again,int last){
List<tab_students> list = new ArrayList<tab_students>();
db = mytabopen.getReadableDatabase(); Cursor cur = db.query(tab_name, null, null, null, null, null, "id asc", again+","+last);
while (cur.moveToNext()) {
int id = cur.getInt(cur.getColumnIndex("id"));
String name = cur.getString(cur.getColumnIndex("name"));
String password = cur.getString(cur.getColumnIndex("password")); tab_students stu = new tab_students(id, name, password);
list.add(stu);
}
cur.close();
db.close();
return list;
} //获取数据总数
public long gettab(){
db = mytabopen.getReadableDatabase();
Cursor cur = db.query(tab_name, new String[]{"count(*)"}, null, null, null, null, null);
cur.moveToFirst();
long result = cur.getLong(0);
return result;
}
}

  好了关于SQLite在Android平台的使用,就为大家介绍完毕,内容很简单,没有太大的难度,相信小伙伴一定能理解。新手学习,高手交流。

Android之SqlLite数据库使用的更多相关文章

  1. Android:SQLiteOpenHelper类(SQLlite数据库操作)详细解析

    前言 SQLite数据库操作在Android开发中非常常用 今天我将带大家全面了解关于SQLite数据库的操作(增.删.查.改) 目录 1. SQLite数据库介绍 SQLite是Android内置的 ...

  2. Android如何使用SQLlite数据库

    先写一个类,继承自SQLiteOpenHelper public class MyDatabaseHelper extends SQLiteOpenHelper { //声明一个Context pri ...

  3. 07_Android操作sqllite数据库(包括2中方式操作数据的方式),单元测试,BaseAdapter的使用,自定义view的综合使用案例

     1 目标从sqllite中读取数据并显示如下: MainActivity对应的界面 MainActivity2对应的界面           2  配置Android的清单文件 <?xml ...

  4. Android基础------SQLite数据库(一)

    1.SQLite介绍 SQLite是一款非常流行的嵌入式数据库,它支持SQL操作,并且只用很少的内存. Android在运行时集成了SQLite,所有每个Android应用程序都可以使用SQLLite ...

  5. Android 数据库管理— — —创建数据库

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

  6. Android高性能ORM数据库DBFlow入门

    DBFlow,综合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等库的优点.同时不是基于反射,所以性能也是非常高,效率紧跟greenDAO其后.基于注解,使用 ...

  7. Qt for Android 打包 SQLite 数据库

    Qt for Android 调用 SQLite 数据库时, 怎样将已经存在的数据库附加到 APK 中? 直接在你项目里面的Android源码的根目录下新建一个文件夹assets, 数据库就可以放里面 ...

  8. android SQLite(安卓数据库的插入显示删除)

    1.利用android自带数据库实现增加.删除.显示用户等操作 只是一个基本模型,为即将的与 复利计算apk整合做牺牲. 就不上传百度云供大家下载了 等整合了复利计算再上传. 数据的插入和显示:   ...

  9. 21.Android之SQLite数据库学习

    Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动 ...

随机推荐

  1. 网站常用UI整理

    1.UI插件包使用   Bootstrap 地址:http://v3.bootcss.com/getting-started/     Bootstrap buttons 按钮 地址:http://w ...

  2. echo.js 延迟加载图片控件

    echo.js的github地址:https://github.com/toddmotto/echo   echo是一个独立的JavaScript.轻量级的.延迟图片加载插件,echo压缩后体积不到1 ...

  3. [Protobuf] Mac系统下安装配置及简单使用

    Mac下Protobuf安装 Protobuf源码Github地址: https://github.com/google/protobuf 配置环境教程: https://github.com/goo ...

  4. Rust语言的多线程编程

    我写这篇短文的时候,正值Rust1.0发布不久,严格来说这是一门兼具C语言的执行效率和Java的开发效率的强大语言,它的所有权机制竟然让你无法写出线程不安全的代码,它是一门可以用来写操作系统的系统级语 ...

  5. 在VS2012下静态链接MFC的问题

    1>------ 已启动生成: 项目: MFCApplication1, 配置: Debug Win32 ------1>uafxcwd.lib(afxctrlcontainer2.obj ...

  6. ASCII字符集中的功能/控制字符

       ASCII字符集中的功能/控制字符     Function/Control Code/Character in ASCII Version: 2011-02-15 Author: gree ...

  7. bzoj3648: 寝室管理(环套树+点分治)

    好题..写了两个半小时hh,省选的时候要一个半小时内调出这种题目还真是难= = 题目大意是给一棵树或环套树,求点距大于等于K的点对数 这里的树状数组做了一点变换.不是向上更新和向下求和,而是反过来,所 ...

  8. gulp + webpack + sass 学习

    笔记: new webpack.optimize.CommonsChunkPlugin 核心作用是抽离公共代码,chunks:['index.js','main.js'] 另一个作用就是单独生成一个j ...

  9. 验证码类库CaptchaMvc

    CaptchaMvc是一个有弹性的.简单的解决方案,它能够解决你项目中所有与验证码相关的问题.你需要做的所有事情就是向你的项目中添加一个类库,添加之后验证码就准备就绪了.该项目拥有使用验证码所需要的所 ...

  10. .NET短距离领域通信-32feet.NET

    32feet.NET[http://32feet.codeplex.com/]是shared-source的项目,支持CF.net 2.0以及桌面版本.NET framework,提供短距离领域(pe ...