每个应用程序都要使用数据,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. [面试] Design Questions

    Uber总是考一些系统设计的题目,而且重复率很高,汇总了一下地里的所有design的题目,希望可以跟小伙伴们讨论下. Uber Design Questions 1.    让design uber ...

  2. 再记录一下如何配置oracle instantclient

    这问题遇到很多次,每次重装系统就遇到一次,却总是搞半天才搞定. 今天再次花费几个小时解决,终于有一个清晰的认识必须记录一下. 一.下载解压,不建任何目录,直接复制tnsname.ora过来.(当然也可 ...

  3. BZOJ4293: [PA2015]Siano

    Description 农夫Byteasar买了一片n亩的土地,他要在这上面种草. 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会长高a[i]厘米. Byteasar一共会进行m ...

  4. druid sql黑名单 报异常 sql injection violation, part alway true condition not allow

    最近使用druid,发现阿里这个连接池 真的很好用,可以监控到连接池活跃连接数 开辟到多少个连接数 关闭了多少个,对于我在项目中查看错误 问题,很有帮助, 但是最近发现里面 有条sql语句 被拦截了, ...

  5. redhat6 yum源配置

    第一次接触redhat系统,安装软件时,发现没有ubuntu的apt-get包管理器,自带的yum包管理器又什么都找不到,网上搜了好久,终于把yum配置好了,感谢博主们- 使用redhat系统自带的y ...

  6. 开源免费的HTML5游戏引擎

    青瓷引擎的成长 青瓷引擎自2015年4月项目启动开始,7月首次亮相2015年ChinaJoy,便得到业界的极大关注,随后开启限量测试,收到数百个开发者团队的试用申请及反馈,期间经历了18个内测版本,完 ...

  7. SQL Server

    1.通过触发器来级联删除: 具体的触发器代码如下: Create TRIGGER [dbo].[DeleteRelatedProducts] ON [dbo].[ProductCategory]  A ...

  8. awk使用shell变量

    awk使用shell变量  (可以计算浮点数) 其实在awk里,是不能直接使用shell变量的 方法是:awk -v 选项让awk 里使用shell变量 TIME=60 awk -v time=&qu ...

  9. C#时间戳转换

    ,,)).ToUniversalTime ().Ticks ) / ;//先取得当前的UTC时间,然后转换成计算用的周期数(简称计时周期数),每个周期为100纳钞(ns)=0.1微秒(us)=0.00 ...

  10. 方维 o2o app源码出售

    方维 o2o app源码出售 方维o2oapp源码出售 1.本人官方5万购买,现把方维o2o app 源码低价出售: 2.包括网站源码本地搭建包成功提供指导 3.包括网站说明文档,不包含app说明文档 ...