数据持久化之sqlite基本用法

摘要:
)“;db.execSQL;//此处最好使用占位符,因为信息是从edittext获取的。这些变量在查询语句中无法识别。删除db.exec SQL(”从Bookwhere pages中删除˃?

一、ACID

即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。

一致性:事务在完成时,必须使所有的数据都保持一致状态。

隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。有时也称串行化。

持久性:在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

二、SQLiteOpenHelper

SQLiteOpenHelper 是一个抽象类,SQLiteOpenHelper 中有两个抽象方法,分别是onCreate()和 onUpgrade(),我们必须在自己的帮助类里面重写这两个方法;SQLiteOpenHelper 中还有两个非常重要的实例方法,getReadableDatabase() 和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。

1、创建数据库

首先,新建自己的帮助类,执行建表语句

public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_BOOK = "create table book ("
+ "id integer primary key autoincrement, "
+ "author text, "
+ "price real, "
+ "pages integer, "
+ "name text)";
private Context mContext;
public MyDatabaseHelper(Context context, String name, CursorFactory
factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();
}

在activity中,新建MyDatabaseHelper对象,调用getWritableDatabase()方法

public class MainActivity extends Activity {
private MyDatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
Button createDatabase = (Button) findViewById(R.id.create_database);
createDatabase.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dbHelper.getWritableDatabase();
}
});
}
}

想查看表结构可以用sqlite explore查看。

2.基本操作

新建一个SQLiteDatabase对象获取dbhelper新建或找到的实例,sqlite提供了很多用于增删改查的方法,但是我觉得还是直接用execSQL方法和rawQuery方法直接用sql语句进行操作比较好。

String nameString=text1.getText().toString();
String priceString=text2.getText().toString();
String numberString=text3.getText().toString();
SQLiteDatabase db=dbhelper.getWritableDatabase();
String insertSql="insert into good(name,price,number)values(?,?,?)";
db.execSQL(insertSql,new String[]{nameString,priceString,numberString});//这里最好用占位符,因为是从edittext中获取的信息,在一条查询语句中无法识别这些变量

db.execSQL("delete from Book where pages > ?", new String[] { "500" });

db.execSQL("update Book set price = ? where name = ?", new String[] { "10.99",
"The Da Vinci Code" });

dbhelper=new MyDatabaseHelper(this,"Store.db", null, 1);
		SQLiteDatabase db=dbhelper.getWritableDatabase();
	//	Cursor cursor=db.query("good",new String[]{"_id","name","price","number"}, null, null,null, null, "name");//两种方式
		Cursor cursor=db.rawQuery("select * from good where number>3",null);

三、使用事务

SQLiteDatabase db = dbHelper.getWritableDatabase();
db.beginTransaction(); // 开启事务
try {
db.delete("Book", null, null);
if (true) {
// 在这里手动抛出一个异常,让事务失败
throw new NullPointerException();
}
ContentValues values = new ContentValues();
values.put("name", "Game of Thrones");
values.put("author", "George Martin");
values.put("pages", 720);
values.put("price", 20.85);
db.insert("Book", null, values);
db.setTransactionSuccessful(); // 事务已经执行成功
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction(); // 结束事务
}

beginTransaction是开启事务,setTransactionSuccessful是让事务成功,endbeginTransaction结束事务,因为事务中间出现异常,所以添加操作不会执行,而且删除操作也不会执行。



免责声明:文章转载自《数据持久化之sqlite基本用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DevOps专题|Lua引擎打造超轻量级客户端配置Gitlab pages和Gitlab CI下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Httpclient-(get、post(application/json)、post(application/form-data)、download、upload)

pom文件引入包:      <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dep...

PHP的openssl加密扩展使用小结

引言 互联网的发展史上,安全性一直是开发者们相当重视的一个主题,为了实现数据传输安全,我们需要保证:数据来源(非伪造请求)、数据完整性(没有被人修改过)、数据私密性(密文,无法直接读取)等。虽然现在已经有SSL/TLS协议实现的HTTPS协议,但是因在客户端上依赖浏览器的正确实现,而且效率又很低,所以一般的敏感数据(如交易支付信息等)还是需要我们使用加密方...

SQL Server中的事务日志管理(3/9):事务日志,备份与恢复

当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的。你只要确保每个数据库都有正确的备份。当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时。这系列文章会告诉你每个DBA应该知道的具体细节。 它不会经常提起,除非你的数据库运行在简单(SIMPLE)恢复模式,在事务日志上定期备份非常重要的。这会控制事务日志大小...

中间件简介

中间件 中间件(middleware)是基础软件的一大类,中间介处于操作系统与用户的应用软件的中间。中间件在操作系统,网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效的开发和集成复杂的应用软件。 应用-----中间件-分布式系统服务-----硬件、操作系统 为什么使用中间件:从硬件来看:CPU速...

数据绑定流程分析

1.    数据绑定流程原理★ ①   Spring MVC 主框架将 ServletRequest  对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象 ②   DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据类型转换、...

在lua的string库和正则表达式

一.前提要了解一下lua 的string几个方法 1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,... 2. string库中所有的function都不会直接操作字符串,而是返回一个结果 string.len(s):返回字符串的长度. string.lower(s):变小写. string.upper(s):变大写....