sqllite数据库学习
2017-11-28 10:02
141 查看
SQLite是Android内置的一个小型、关系型、属于文本型的数据库。Android提供了对 SQLite数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据库,但是应用程序之外的就不能访问。Android中,通过SQLiteOpenHelper类来实现对SQLite数据库的操作。要使用sqlite数据库,必须新建一个类继承sqlliteopenhelper这个类,并重写其中的方法.在内部存储,卸载应用会被删除
一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种数据类型:1.NULL:空值。2.INTEGER:带符号的整型,具体取决有存入数字的范围大小。3.REAL:浮点数字,存储为8-byte IEEE浮点数。4.TEXT:字符串文本。5.BLOB:二进制对象。在SQLite中创建表的时候,可以不一定非要指定类型.单推荐在使用表的时候写上数据类型, 可读性更好.
第一步:创建一个类继承SQLiteOpenHelper
第二步.拿到创建数据库的上下文.
* getWritableDatabase():打开可读写的数据库
* getReadableDatabase():在磁盘空间不足时打开只读数据库,否则打开可读写数据库
第三步,操作数据库
3.1利用原生sql进行操作
3.2利用安卓api操作
public void insertApi(){
//把要插入的数据全部封装至ContentValues对象
ContentValues values = new ContentValues();
values.put("name", "游天龙");
values.put("phone", "15999");
values.put("salary", 16000);
db.insert("person", null, values);
}
public void deleteApi(){
int i = db.delete("person", "name = ? and _id = ?", new String[]{"小志的儿子", "3"});
System.out.println(i);
}
public void updateApi(){
ContentValues values = new ContentValues();
values.put("salary", 26000);
int i = db.update("person", values, "name = ?", new String[]{"游天龙"});
System.out.println(i);
}
public void selectApi(){
Cursor cursor = db.query("person", null, null, null, null, null, null, null);
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
String salary = cursor.getString(cursor.getColumnIndex("salary"));
System.out.println(name + ";" + phone + ";" + salary);
}
}
public void transaction(){
try{
//开启事务
db.beginTransaction();
ContentValues values = new ContentValues();
values.put("salary", 12000);
db.update("person", values, "name = ?", new String[]{"小志"});
values.clear();
values.put("salary", 16000);
db.update("person", values, "name = ?", new String[]{"小志的儿子"});
int i = 3/0;
//设置 事务执行成功
db.setTransactionSuccessful();
}
finally{
//关闭事务,同时提交,如果已经设置事务执行成功,那么sql语句就生效了,反之,sql语句回滚
db.endTransaction();
}
}
一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种数据类型:1.NULL:空值。2.INTEGER:带符号的整型,具体取决有存入数字的范围大小。3.REAL:浮点数字,存储为8-byte IEEE浮点数。4.TEXT:字符串文本。5.BLOB:二进制对象。在SQLite中创建表的时候,可以不一定非要指定类型.单推荐在使用表的时候写上数据类型, 可读性更好.
第一步:创建一个类继承SQLiteOpenHelper
public class MyOpenHelper extends SQLiteOpenHelper { public MyOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub } //数据库创建时,此方法会调用 @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table person(_id integer primary key autoincrement, name char(10), salary char(20), phone integer(20))"); } //数据库升级时,此方法会调用 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { System.out.println("数据库升级了"); } }
第二步.拿到创建数据库的上下文.
//创建OpenHelper对象 MyOpenHelper oh = new MyOpenHelper(getContext(), "person.db", null, 1); //获得数据库对象,如果数据库不存在,先创建数据库,后获得,如果存在,则直接获得 SQLiteDatabase db = oh.getWritableDatabase();注意:数据库打开的两种方式
* getWritableDatabase():打开可读写的数据库
* getReadableDatabase():在磁盘空间不足时打开只读数据库,否则打开可读写数据库
第三步,操作数据库
3.1利用原生sql进行操作
public void insert(){ /*插入操作*/ db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志", 14000, "13888"}); } /*删除操作*/ public void delete(){ db.execSQL("delete from person where name = ?", new Object[]{"小志"}); } /*更新操作*/ public void update(){ db.execSQL("update person set phone = ? where name = ?", new Object[]{186666, "小志的儿子"}); } /*选择操作*/ public void select(){ Cursor cursor = db.rawQuery("select name, salary from person", null); while(cursor.moveToNext()){ //通过列索引获取列的值 String name = cursor.getString(cursor.getColumnIndex("name")); String salary = cursor.getString(1); System.out.println(name + ";" + salary); } }
3.2利用安卓api操作
public void insertApi(){
//把要插入的数据全部封装至ContentValues对象
ContentValues values = new ContentValues();
values.put("name", "游天龙");
values.put("phone", "15999");
values.put("salary", 16000);
db.insert("person", null, values);
}
public void deleteApi(){
int i = db.delete("person", "name = ? and _id = ?", new String[]{"小志的儿子", "3"});
System.out.println(i);
}
public void updateApi(){
ContentValues values = new ContentValues();
values.put("salary", 26000);
int i = db.update("person", values, "name = ?", new String[]{"游天龙"});
System.out.println(i);
}
public void selectApi(){
Cursor cursor = db.query("person", null, null, null, null, null, null, null);
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
String salary = cursor.getString(cursor.getColumnIndex("salary"));
System.out.println(name + ";" + phone + ";" + salary);
}
}
public void transaction(){
try{
//开启事务
db.beginTransaction();
ContentValues values = new ContentValues();
values.put("salary", 12000);
db.update("person", values, "name = ?", new String[]{"小志"});
values.clear();
values.put("salary", 16000);
db.update("person", values, "name = ?", new String[]{"小志的儿子"});
int i = 3/0;
//设置 事务执行成功
db.setTransactionSuccessful();
}
finally{
//关闭事务,同时提交,如果已经设置事务执行成功,那么sql语句就生效了,反之,sql语句回滚
db.endTransaction();
}
}
相关文章推荐
- java sqllite 数据库学习测试
- SQLLite数据库学习
- 2015.5.13安卓学习笔记之sqllite数据库
- 数据库学习3
- 微软企业库5.0 学习之路——第三步、为项目加上异常处理(采用自定义扩展方式记录到数据库中)
- OAF学习笔记-23-OAF中将数据库中的表导出生成xls ,xlsx,csv 等格式
- TimesTen 应用层数据库缓存学习:3. 环境准备 - DB 12cR1版本
- MYSQL数据库 - 学习笔记1 - 数据库基本操作
- PostgreSQL数据库日常学习笔记8-NOT,LIKE
- PHP学习:数据库(二)
- 学习mysql(2)-如何设计数据库(一)
- Mars老师的Android学习基本路线Linux、数据库、网络协议、服务器端开发知识基础知识
- Linux学习之 嵌入式数据库
- 数据库设计学习记录
- SQLLite数据库创建和使用
- 从文本文件中一行行读出数据,写进数据库(自己学习用)
- MemSQL学习笔记-类似MySQL的数据库
- 学习笔记:数据库的安装和基本语法
- 对数据库索引的数据结构学习
- 数据库备份的学习过程