0
点赞
收藏
分享

微信扫一扫

SQLite数据库


 Android下的Sqlite数据库

            SQLite,是一款轻型的数据库,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而 且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需 要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很 多程序语言相结合,SQLite第一个Alpha版本诞生于2000年5月。 至2016年已经有16个年头, SQLite也迎来了一个版本 SQLite 3已经发布。 

如何创建数据库
创建数据库帮助类(构造器)

//数据库表⽂文件 
public static final String DB_NAME="contact.db"; //数据库版本
public static final int DB_VERSION=1;

public DbOpenHelper(Context context) {

//context 一言难尽//name 数据库名//factory表示游标//version版本

super(context, DB_NAME, null, DB_VERSION);

}

 

创建一般文件

File file=new File(getFilesDir(),"mock.txt");  

file.createNewFile();

 

创建数据库文件

MyOpenHelper helper=new MyOpenHelper(this);

helper.getReadableDatabase();

 

创建数据库表

@Override 
//数据库⽂文件创建的时候调⽤用该⽅方法
public void onCreate(SQLiteDatabase db) {
System.out.println("onCreate");
//创建数据库表
db.execSQL("create table contactinfo(_id integer primary key autoincrement," +"username varchar(20),phone varchar(15));");
}

数据库更新

//数据库更新 只要跟之前的数据库版本不⼀一样 则会调⽤用 该⽅方法可以修改数据库表的各种数 据 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// oldVersion表示旧版本 newVersion 新版本
Log.v("liwangjiang", "onUpgrade"+" oldVersion=" +oldVersion+" newVersion="+newVersion);

}

 

保存数据库文件:/data/data/包名/databases/xxx.db

    数据库增删改查的SQL语句 

    增加(插入联系人 手机号到数据库):


     insert into contactinfo (username,phone) values('zhangsan','150188888888');


 

    修改(设置zhangsan的手机为1501111111):

 

    update contactinfo set phone='150111111111' where username='zhangsan';
 

    删除(删除那个叫李四的联系人):
    delete from contactinfo where username='lisi';

    查询(查询电话为15022222222的用户):
    select username,phone from contactinfo where phone='15022222222'; 

 

数据库增删改查代码实现

    开发步骤:

            1.首先在Sqlite expert工具中确保SQL语句正常运行. 

            2.创建Dao层 封装你需要的Dao业务(CURD) 

            3.创建界面去调用

public class ContactDao {
private DbOpenHelper dbOpenHelper;
public ContactDao(Context context){
dbOpenHelper = new DbOpenHelper(context);
}
public boolean insertContact(String username,String phone){
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
//插入数据第一个tabel表示表名
//第二个是表示nullColumnHack表示是否为空
//values表示键值对
ContentValues values = new ContentValues();
values.put(DbOpenHelper.USERNAME, username);
values.put(DbOpenHelper.PHONE, phone);
//返回-1表示错误
long i = db.insert(DbOpenHelper.TABLE_NAME, null, values);
return i!=-1;
}
public boolean updataContact(String username,String newPhone){
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
//table表示表名
//values 表示更新的键值对
//whereClause where语句
//whereArgs where语句绑定的值

ContentValues values = new ContentValues();
values.put(DbOpenHelper.PHONE, newPhone);
int i = db.update(DbOpenHelper.TABLE_NAME, values,
DbOpenHelper.USERNAME+"=?", new String[]{username});
return i>0;
}
public boolean deleteContact(String username){
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
//table 表示表名
//whereClause表示where语句
//whereArgs表示绑定的值
int i = db.delete(DbOpenHelper.TABLE_NAME, ""+DbOpenHelper.USERNAME+"=?",new String[]{username});
return i>0;
}
public String selectContact(String phone){
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
//table 表示表名
//columns 返回多少列 比如 new String[]{'列名','列名2'} 行数
//selection where语句
//selectionArgs表示绑定的值

Cursor cursor = db.query(DbOpenHelper.TABLE_NAME,new String[]{DbOpenHelper.USERNAME,DbOpenHelper.PHONE} ,
""+dbOpenHelper.PHONE+"=?", new String[]{phone}, null, null, null);
String result="";
while(cursor.moveToNext()){
//根据列名返回索引
int usernameIndex=cursor.getColumnIndex(DbOpenHelper.USERNAME);
String username = cursor.getString(usernameIndex);

int phoneIndex = cursor.getColumnIndex(DbOpenHelper.PHONE);
String phones = cursor.getString(phoneIndex);
result+=("名字 : "+username+" 电话 : "+phones+" \n");
}
return result;
}

}

 

//直接复制即可


 


在这里有   SQLiteOpenHelper对象.getWritableDatabase();或getReadableDatabase();两种的区别在


1.getWritableDatabase();


        --用于写数据比如你要插入一条数据插入进去是写数据    写数据就要使用getWritableDatabase();方法返回一个SQLiteDatabase对象


2.getReadableDatabase();
            --用于读数据比如你要查看一条数据就是读在数据表中读取数据进来    写数据就要使用getReadableDatabase();方法返回一个SQLiteDatabase对象


 


 

以上方法他执行玩没有返回值下面图片注释可以了解

SQLite数据库_数据库

 

 

Sqlite3工具的使用

    Sqlite3工具的位置:

         ..\android-adt-bundle\sdk\tools\sqlite3.exe

如何进入sqlite3命令行:

             1. 先执行adb -s 模拟器名称 shell 

             2. linux shell命令: cd /data/data/包名/databases 到databases目录下 pwd 查看当前的 目录位置 

Sqlite3工具常用操作:

     sqlite3 数据库文件名(进入了数据库) 

     查看该文件下的所有数据库表 .tables

     查看某个数据库表结构 select * from 表名; 

     退出sqlite3 .quit 

 

数据库增删改查的Google实现 

Sqlite3



File file=new File("xxxx");
1.flie.createNewFile();
2.创建一个输出流


如何创建一个数据库文件
继承SqliteOpenHelper类  在构造器里面设置数据库文件的名称 数据库的版本
SqliteOpenHelper helper=new SqliteOpenHelper();  
helper.getWriteableDatabase()/getReadableDatabase() 


一个数据库文件可以有多张数据库表
SqliteOpenHelper提供了两个方法:onCreate()   onUpgrad()


onCreate()什么时候被调用   数据库文件被创建的时候调用
可以在该方法里面执行创建多张数据库表的操作


onUpgrad()什么时候调用  判断新安装的应用的版本号跟手机原有应用的版本号是否不同
修改数据库表   db,oladVersion,newVersion




如何执行CURD
1.通过sql语句   SqliteDatabase.executeSQL(sql,bindArgs[]);
2.通过google的API   SqliteDatabase.delete()


3.查询   
通过sql:   Cursor=SqliteDatabase.rawQuery()
通过google的API    Cursor=SqliteDatabase.query()


Cursor:数据集
1.返回多条数据   while(cursor.moveToNext()){   }
2.返回的多条数据中 移动到某一行   if(cursor.moveToPosition(int pos)){  }
3.只返回一条数据   if(cursor.moveToFirst()){   }


4.读取数据:
列的索引=cursor.getColumnIndex(列名) 
cursor.get数据类型(列的索引)


对外提供服务 (使用单元测试)
/data/data/package name/databases/xxxx.db


//事务数据库 都是安卓系统在维护
/data/data/package name/databases/xxxx-后缀.db


 

举报

相关推荐

0 条评论