SQLite在Android上的基本用法

来源:互联网 发布:安卓解压软件 编辑:程序博客网 时间:2024/06/05 14:31
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在


很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结


合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生


于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL包括:
ATTACH DATABASE
BEGIN TRANSACTION
comment
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE
数据库基本的操作都是基于这些函数方法的,不同的办法可以实现数据库不同的功能特性。
数据库一般都会存在以下几个行为:
(1)创建数据库元素:表,列等结构。(可以参考office表格的样式去理解)
(2)登录数据库或者引入数据库。(SQlite不限于语言的不同,可以很轻松的用自己的擅长的语言去访问)
(3)数据库元素的具体操作动作:增加元素,更改元素,查找元素,删除元素。
(4)数据库的性能提升。(许多时候SQLite会有小、快、简单的特点,但是提高性能依然很重要)
(5)数据安全。(对于一定级别的数据,希望采取更为可靠地数据处理方案,SQLite也是优缺点的。)
下面一整段代码是基于android关于SQLite的简单操作,要求API是11以上版本:


package com.example.SQLite;


import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;


public class MainActivity extends Activity {
SQLiteDatabase sdb;
private ListView lsv;//为了方便显示数据库提供一个可视化的View
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lsv=(ListView) findViewById(R.id.lsvId);
//1.创建或打开一个数据库
sdb=openOrCreateDatabase(
"contacts.db",//数据库名字
Context.MODE_PRIVATE,//应用模式(应用程序私有)
null);//factory CursorFactory

//2.操作数据库
//2.1)创建表(表是数据库最基本存储单元)
createTable();
//2.2)向表中写入数据
//insertTab01();
//insertTab02();
//insertTab03();
//2.3)查询表中数据
//query01();//控制台输出
//query02();//显示在页面
//2.4)修改表中数据
//update01();
//update02();
query01();
//2.5)删除表中数据
delete01();
delete02();
query01();
//3.关闭数据库
sdb.close();
}
/**创建表*/
private void createTable(){
  //1.编写SQL语句(语法)
  //语法: create table 表名(列名 类型 [约束],.....)
 
  String sql=
  "create table if not exists contact(" +//+是字符串换行时系统自己加上的,与SQLite语句无关
  "_id integer primary key autoincrement," +//autoincrement (表示自增),这里注意Id的写法!
  "name text," +
  "phone text not null)";
 //2.发送SQL(将此语句交给SQLite去执行)
  sdb.execSQL(sql);
  Log.i("TAG", "table create ok!");
}
/**向表中写入数据*/
public void insertTab01(){
 String sql=
 "insert into contact values " +
 "(null,'zhenghe','137')";
 sdb.execSQL(sql);
}
/**向表中写入数据*/
public void insertTab02(){
//此写法,不允许为空的列必须
//出现在contact()括号中
String sql=
  "insert into contact(name,phone) " +
  "values('fuqian','138')";
sdb.execSQL(sql);
}
/**向表中写入数据(底层帮你拼接sql)*/
public void insertTab03(){
  ContentValues values=
  new ContentValues();//封装要写入的数据
  values.put("name", "xiaofeng");
  values.put("phone","177");
  long id=sdb.insert("contact",//tablename
  null,//nullColumnHack(非空列给的默认值)
  values);
  Log.i("TAG", "insert.id="+id);
}
/**查询表中数据*/
public void query01(){
String sql="select * from contact";
   Cursor c=sdb.rawQuery(sql, null);
  //String sql=//"*"代表所有字段
  // "select * from contact " +
  //"where phone=?";//"?"代表占位符
  // "where name like ? order by name desc";//模糊查询,并降序排序(升序为asc)
   //Cursor c=//内置一个指针,通过指针的移动取数据
   //sdb.rawQuery(sql,new String[]{"137"});//selectionArgs
   //sdb.rawQuery(sql,new String[]{"%e%"});//selectionArgs
   if(c==null){
   Log.i("TAG", "query error!");
   return;
   }
   if(!c.moveToFirst()){
   Log.i("TAG", "no data");
   return;
   }
   //取数据
   do{//上面已经移动一次指针,第一次直接取
   int id=c.getInt(
   c.getColumnIndex("_id"));
   String name=c.getString(c.getColumnIndex("name"));
   String phone=c.getString(c.getColumnIndex("phone"));
   Log.i("TAG", id+"/"+name+"/"+phone);
   }while(c.moveToNext());//循环一次取一行
   //关闭cursor
   c.close();
}
Cursor cursor;
public void query02(){
   cursor=
   sdb.query("contact",//table
null,//columns  ,null代表所有列
"_id=? or phone=? ",//where 子句
new String[]{"1","177"},//where 子句中?的值
null,//groupBy
null,//having
null);//orderBy
  //从cursor中取数据显示在页面上
   SimpleCursorAdapter adapter=
   new SimpleCursorAdapter(this,
   android.R.layout.simple_list_item_2,
   cursor, 
   new String[]{"phone","name"},//from查询字段
   new int[]{android.R.id.text1,android.R.id.text2},//to表示要显示的位置
   CursorAdapter.//观察者
   FLAG_REGISTER_CONTENT_OBSERVER);
  //关联适配器
   lsv.setAdapter(adapter);
}

public void update01(){
String sql=
"update contact set name=? " +
"where _id=?";
sdb.execSQL(sql,
new String[]{"zhouhan","4"});
}
public void update02(){
ContentValues values=
new ContentValues();
values.put("name","dayuan");
sdb.update("contact",
values,
"_id=?",
new String[]{"4"});
}
public void delete01(){
//删除所有
//String sql="delete from contact";
//删除指定数据
String sql=
"delete from contact" +
" where _id=?";
sdb.execSQL(sql,
new String[]{"4"});//id=4的记录被删除
}
public void delete02(){
//删除所有
//String sql="delete from contact";
//删除指定数据
sdb.delete("contact",
"_id>=?",new String[]{"4"});
}
/**Activity销毁时执行此方法*/
@Override
protected void onDestroy() {
super.onDestroy();
if(cursor!=null)
cursor.close();
}
}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 外地人在北京怎么办准生证 北京二孩准生证怎么办 在北京办准生证怎么办 北京2胎准生证怎么办 学号密码忘了怎么办 解散qq群不了怎么办 单身公寓晒衣服怎么办 在房间做饭油烟怎么办 两梯7户怎么办 身上有妊娠纹怎么办 小学寄读生学籍怎么办 实在租不到房子怎么办? 回迁房产权到期怎么办 人进看守所之后怎么办 在看守所见不到怎么办 政审爷爷有犯罪怎么办 看守犯人遇到贿赂怎么办 家属收到行政拘留通知书怎么办 有治安处罚记录怎么办 党员被打了怎么办 交通事故第一次笔录不对怎么办 老公被刑拘了怎么办 老公被拘留了怎么办 刑拘看守所不收怎么办 被贷款中介忽悠怎么办 被中介套路贷款怎么办 车牌变更后保险怎么办 被诬陷诈骗刑拘怎么办 把人头打破了怎么办 起诉后找不到人怎么办 欠款人转移财产怎么办 公安不退保释金怎么办 拘留没钱交罚款怎么办 对治安拘留不服 怎么办 老公被治安拘留怎么办 治安拘留找不到人怎么办 刑事拘留转治安拘留怎么办 遇到晦气的事怎么办 人死在看守所怎么办 检察院抗诉了我怎么办 异地在北京怎么办护照