数据持久化之sqlite基本用法

一、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甘休工作,因为业务中间现身卓殊,所以添加操作不会实施,而且删除操作也不会实施。

**

**

网站地图xml地图