Android 数据库 SQLite

首先关于SQLite的介绍百度上看看就大致了解的差不多了。

Android
操作数据库的关键步骤就在于实现API SQLiteOpenHelper,通常这个库辅助类来创建或打开数据库。

  废话不多说直接上代码解释吧:


 1 public class PersonDBOpenHelper extends SQLiteOpenHelper {
2 //context 上下文
3 //第二个是名字,如果名字空 为内存数据库 数据库名字
4 //CursorFactory 游标工厂
5 //version 数据库的版本号 最小为1
6 public PersonDBOpenHelper(Context context) {
7 super(context, "Person.db", null, 3);
8 // TODO Auto-generated constructor stub
9 //数据量存放再data/data/包名/database 下
10 }

11 /**
12 * 数据量在<b>第一次创建的时候</b>使用的方法
13 * 仅仅是在数据库第一次被创建的时候执行
14 */
15 @Override
16 public void onCreate(SQLiteDatabase db) {
17 // TODO Auto-generated method stub
18 Log.i("MyTag", "数据库被创建了");
19 String sql = "create table person (id integer primary key autoincrement," +
20 " name varchar(100), phone varchar(20))";
21
22 //db.beginTransaction();开始事务
23 db.execSQL(sql);
24 }

25 //数据库升级的时候被使用
26 //这里面常常添加跟新数据库的sq语句
27 @Override
28 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
29 // TODO Auto-generated method stub
30 Log.i("MyTag", "数据库更新了");

31 String sql = "insert into person (name,phone)values(‘zhangsan‘,‘110‘)";
32 String sql2 = "insert into person (name,phone)values(‘liss‘,‘1520345‘)";
33 String sql3 = "insert into person (name,phone)values(‘nuli‘,‘100‘)";
34 String sql4 = "insert into person (name,phone)values(‘fengfou‘,‘11001578‘)";
35 db.execSQL(sql4);
36 db.execSQL(sql3);
37 db.execSQL(sql2);
38 db.execSQL(sql);
39 Log.i("MyTag", "已经成功的插入了几行数据");
40 }
41
42 }

  再使用的时候如果只new出来上面的实现类oncreate()方法是不会执行的就是说数据库是不会创建的,通常都是执行了

getWritableDatabase()或者getReadableDatabase() 之后才会而执行。这点很重要。

关于数据库的操作有多种实现方法,可以像在javaweb那样操作数据库如下:


package com.person.dao;

import com.tai.db.PersonDBOpenHelper;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class PersonDao {

private PersonDBOpenHelper helper;

public PersonDao(Context cont) {
helper = new PersonDBOpenHelper(cont);
}

public void add(String name,String phone)
{
SQLiteDatabase Database = helper.getWritableDatabase();
String sql = "insert into person(name,phone)values(?,?)";
Database.execSQL(sql, new Object[]{name,phone});
Database.close();//关闭数据库是为了避免过多的连接
}

public boolean find(String name)
{
SQLiteDatabase Database = helper.getReadableDatabase();
Cursor cursor = Database.rawQuery("select * from person where name = ?", new String[] {name});
boolean result = cursor.moveToFirst();
cursor.close();//游标也是要关闭的
return result;
}

public void update(String newphone,String name)
{
SQLiteDatabase Database = helper.getWritableDatabase();
String sql = "update person set phone = ? where name=?;)";
Database.execSQL(sql, new Object[]{newphone,name});
Database.close();
}

public void delete(String name)
{
SQLiteDatabase Database = helper.getWritableDatabase();
String sql = "delete from person where name = ?;)";
Database.execSQL(sql, new Object[]{name});
Database.close();
}

}

要记得再使用过SQLiteDatabase以及游标Cursor后把它关闭。

上面是通过执行SQL语句来操作数据库,android也给我们提供了方便的API使用方法了可以参照下面的方法


 1 package com.person.dao;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import android.content.ContentValues;
7 import android.content.Context;
8 import android.database.Cursor;
9 import android.database.sqlite.SQLiteDatabase;
10 import android.util.Log;
11
12 import com.person.bean.Person;
13 import com.tai.db.PersonDBOpenHelper;
14
15 public class PersonDao2 {
16
17 private PersonDBOpenHelper helper;
18
19 public PersonDao2(Context cont) {
20 helper = new PersonDBOpenHelper(cont);
21 }
22
23 public boolean add(String name,String phone)
24 {
25 SQLiteDatabase Database = helper.getWritableDatabase();
26 ContentValues contentValues = new ContentValues();
27 contentValues.put("name", name);
28 contentValues.put("phone", phone);
29 long id = Database.insert("person", null, contentValues);
30 Database.close();//关闭数据库是为了避免过多的连接
31 return id!=-1;
32 }
33
34
35 public boolean find(String name)
36 {
37 SQLiteDatabase Database = helper.getReadableDatabase();
38 Cursor cursor = Database.query("person", null, "name = ?", new String[]{name}, null, null, null);
39 boolean result = cursor.moveToFirst();
40 cursor.close();//游标也是要关闭的
41 return result;
42 }
43
44 public boolean update(String newphone,String name)
45 {
46 SQLiteDatabase Database = helper.getWritableDatabase();
47 // String sql = "update person set phone = ? where name=?;)";
48 // Database.execSQL(sql, new Object[]{newphone,name});
49 ContentValues contentValues = new ContentValues();
50 contentValues.put("phone", newphone);
51 int row = Database.update("person", contentValues, "name = ?", new String[] {name});
52 Database.close();
53 return row!=-1;
54 }
55
56 public boolean delete(String name)
57 {
58 SQLiteDatabase Database = helper.getWritableDatabase();
59 // String sql = "delete from person where name = ?;)";
60 // Database.execSQL(sql, new Object[]{name});
61 int row = Database.delete("person", "name = ?", new String[]{name});
62 Database.close();
63 Log.i("MyTag", row+"");
64 return row!=-1;
65 }
66
67 public List<Person> findAll()
68 {
69 SQLiteDatabase Database = helper.getReadableDatabase();
70 List<Person> list = new ArrayList<Person>();
71 Cursor cursor = Database.query("person", null, null, null, null, null, null);
72 while (cursor.moveToNext()) {
73 int id = cursor.getInt(cursor.getColumnIndex("id"));
74 String name = cursor.getString(cursor.getColumnIndex("name"));
75 String phone = cursor.getString(cursor.getColumnIndex("phone"));
76 Person person = new Person(id,name,phone);
77 list.add(person);
78 }
79 cursor.close();
80 Database.close();
81 return list;
82 }
83 }

这里各个方法的参数都差不多,就是把平时我们用得SQL语句拆分开来,也就query的多一点别的都差不多。

android.database.sqlite.SQLiteDatabase.query(String
table, String[]
columns, String
selection, String[]
selectionArgs, String
groupBy, String
having, String
orderBy)

String table,表名
 String[]
columns,要查询列表的列。传递null将返回所有列。String selection,查询条件String[]
selectionArgs,查询条件对应的值

tring groupBy, String having, String orderBy
 这些简要易懂和sql一样。

时间: 2024-10-27 07:38:40

Android 数据库 SQLite的相关文章

Android数据库SQLite表内设置外键

Android数据库SQLite表内设置外键 介绍 Android默认的数据是SQLite,但SQLite3.6.19之前(在2.2版本中使用的是3.6.22,因此如果你的应用只兼容到2.2版本就可以放心使用外键功能)是不支持外键的,如果有两张表需要关联,用外键是最省事的,但不支持的话怎么办呢?这里就有一个解决办法,就是用事务将两张表关联起来,并且最后生成一张视图. 现有两张表 Employees Dept 视图 ViewEmps:显示雇员信息和他所在的部门 创建数据库 自定义一个辅助类继承SQ

学习Android数据库SQLite的笔记

使用SQLiteOpenHelper类操作数据库是官方提供的一个官方帮助类,操作数据库要使用到SQLiteDatabase,可以通过getReadableDatabase()或getWritableDatabase()获取,这两个方法都可以打开或创建一个数据库,不同的是当磁盘空间已满等情况造成的数据库不可写,getReadableDatabase()是可以成功打开数据库的,但只可以读取数据库,而使用getWritableDatabase()则会直接抛出异常. 首先必须创建一个继承SQLiteOp

Android数据库SQLite

数据库 数据库增删改查 添加 insert into info (name,phone) values ('zhangsan','110') 删除 delete from info where name='zhangsan' 修改 update info set phone ='999' where name ='zhangsan' 查询 select * from info where name='zhangsan' Android下数据库增删改查 void - db.execSQL() 增删

Android数据库(sqlite)加密方案

最近因为一些项目的安全性需要将数据库加密,一开始想到的就是先将数据库通过AES加密,然后运行时再解密,另一种是将数据库里的内容加密. 很快这两种方案都是不理想的,第一种加密方式形同虚设,第二种,如果加密的字段是要查找数据就变得麻烦. 所以第三种方案就是在内存里解密,在网上查到SQLITE是支持加密的, 所以就根据网上的指导一步步地将SQLITE编译成支持加密的. 那下一步就是怎样做成SDK去方便使用?第一个念头就是将原生的数据库使用方式移植过来,但做起来比开始想像的难了点,但最终也在修修补补中完

转载-Android数据库高手秘籍(一)——SQLite命令

原文地址: http://blog.csdn.net/guolin_blog/article/details/38461239 Android数据库高手秘籍(一)——SQLite命令 分类: Android数据库高手秘籍2014-09-04 09:10 7310人阅读 评论(42) 收藏 举报 Android数据库SQLite高手秘籍LitePal 转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/38461239 要想熟练地操作任

Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找到数据库文件的问题

做一个需要嵌入式数据库Sqlite 的unity3d项目,在pc机上运行良好,需要发布到Android平台上,于是,各种坑爹...会遇到找不到数据库文件的问题.当在pc机上使用sqlite时,当执行SqliteConnection dbConnection = new SqliteConnection("data source = test.db");语句时,如果有这个数据库文件则建立连接,如果没有则创建出这个文件,然后建立连接.当在Android平台上时,扯淡的事情就开始了,总之便不

【Android】Sqlite数据库增删改查

Android系统内置一个Sqlite数据库,如果app需要使用Sqlite数据库数据库存储数据,Android会为此app生成一个.db文件.这个数据库在data/data/<package_name>/databases里面,其中<package_name>为该安卓app的工程包名,这个目录必须root后才能看到.在Windows,单机的应用程序,存储数据,基本放到一个文件里面,正如游戏的存档,基本就是把当前的游戏状态存到一个用户很难找到的文件里面.每次存档读档就是一个从这个存

Android - 插入数据库(SQLite)错误

插入数据库(SQLite)错误 本文地址: http://blog.csdn.net/caroline_wendy Error: android.database.sqlite.SQLiteException: no such table: step (code 1): ,  while compiling: INSERT INTO step(duration,date,counter) VALUES (?,?,?). 错误:插入数据库错误,没有找到表,插入表的地方写入参数,而参数地方传入空值.

基础篇:6.Android数据库编程---SQLite

简介: 在Android平台上,继承了一个嵌入式关系型数据库---SQLite.SQLite具有跨平台特性,可以在所有主要的操作系统上运行.SQLite通过独占性和共享锁实现独立事务处理,因此多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据,在进行写操作之前,必须先获得独占锁.另一方面,SQLite采取动态数据类型,当某个值插入数据库时,SQLite会检查它的类型,如果该类型与所关联的列不匹配,SQLite则会进行强制转换.SQLite支持以下几种数据类型:NULL(空值).I