每个应用程序都要使用数据,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. 【转】php Thread Safe(线程安全)和None Thread Safe(NTS,非 线程安全)之分

    Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分,这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍. ...

  2. 移动端Web页面问题(转载)

    1.安卓浏览器看背景图片,有些设备会模糊.   用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率 ...

  3. springBoot上传文件大小设置

    框架架构: springboot+hibernate+freemarker+ueditor, tomcat内嵌在springboot里面,由于是内嵌,用ueditor上传图片,tomcat默认上传为1 ...

  4. ACCEPTANCE CRITERIA FOR USER STORIES

    One of the teams I have recently coached quickly got a grasp of how to phrase user stories but found ...

  5. Python之路【第六篇】python基础 之面向对象进阶

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象  和  issubclass(su ...

  6. Metaio在Unity3D中报错 Start: failed to load tracking configuration: TrackingConfigGenerated.xml 解决方法

    报错:Start: failed to load tracking configuration: TrackingConfigGenerated.xml Start: failed to load t ...

  7. laravel 生成验证码的方法

    在Laravel中有很多图片验证码的库可以使用,本篇介绍其中之一:gregwar/captcha,这个库比较简单,在Laravel中比较常用.下面我们就来介绍下使用细节: 首先, composer.j ...

  8. ★★★Oracle sql 传参特别注意★★★

    最近遇到一个非常烦人的问题,用传参的方式执行sql语句结果老是报 Oracle ORA-01722: 无效数字 一直无法找到原因. 表结构大致如下: table test_station ( tblR ...

  9. 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581c2c46bef1702a2db3ae53 Dev Club 是一个交流移动 ...

  10. ENode框架Conference案例分析系列之 - 上下文划分和领域建模

    前面一片文章,我介绍了Conference案例的核心业务,为了方便后面的分析,我这里再列一下: 业务描述 Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的 ...