Android_SQLite数据库增删改查操作

一:什么是SQLite?

在Android平台上,集成了一个嵌入式关系型轻量级的数据库。

二:什么时候用的数据库?

有大量相似机构的数据需要存储时。

三:如何创建一个数据库?

1.创建一个SqliteOpenHelper的子类

2.添加一个构造方法,用来指定数据库的名称,版本号

3.实现oncreat 方法,数据库第一次创建时被调用,特别适合做数据表的初始化

4.实现onUpgrade方法,当数据库版本升级时被调用,特别适合做表结构的修改。

5.要创建数据库,需要创建一个帮助类的实例对象,并调用其     getReadableDatabase       getWritableDatabase     方法

实例代码如下:

MyOpenHelpter.java

public class MyOpenHelpter extends SQLiteOpenHelper {
//添加一个构造方法,用来指定数据库的名称,版本号
public MyOpenHelpter(Context context) {
super(context, "userInfo.db", null, 1);
}
//实现oncreat 方法,数据库第一次创建时被调用,特别适合做数据表的初始化
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20),phone varchar(11))");
}
//实现onUpgrade方法,当数据库版本升级时被调用,特别适合做表结构的修改。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

MainActivity.java

public class MainActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建帮助类对象
MyOpenHelpter myOpenHelpter=new MyOpenHelpter(this);
myOpenHelpter.getReadableDatabase();

}

}

getReadableDatabase: 先去获取一个可读可写的数据库对象,如果磁盘空间满了,无法进行写操作,就会以只读的方式打开数据库。
   getWritableDatabase: 直接以读写方式打开数据库,如果磁盘空间满,那么就会报错

四:数据库的增删改查方法

4.1:

1.通过创建一个数据帮助类对象可以创建一个数据库(在帮助类的onCreate方法中创建一个info表,有三个字段)

2.通过帮助类对象获取一个数据库操作对象SQlitDatabase(在主类中)

3.通过SqliteDatabase的一个excuteSql()方法可以执行Sql语句,但是这种方式容易写错,没有返回值,我们不知道执行成功没.

增加:
db.execSQL("insert into info(name,phone) values(?,?);", new Object[] {person. name, person.phone });
删除:
db.execSQL("delete from info where name=?;", new Object[]{name});
更新:
db.execSQL("update info set phone=? where name=?;", new Object[]{person.phone,person. name});
查找:
Cursor cursor = db.rawQuery("select * from info", null);
4.2:
SQlitDatabase提供了insert update delete query 方法可以直接写参数封装sql语句, 这种方式适合做增删改,不太适合做查询,不够灵活
增加:
ContentValues values=new ContentValues();
         values.put( "name",person.name );
         values.put( "phone",person.phone );
          long result=db.insert("info" , null, values);
删除:
int result=db.delete("info", "name= ?" , new String[]{name});
更新:
int result=db.update("info", values, "name= ?" , new String[]{person.name });
查找:
Cursor curson=db.query("info", new String[]{"name" ,"phone" }, nullnullnull , null, "name desc");

五、使用事务操作SQLite数据库

使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。

银行转账 执行一件事,要么全部成功,要么全部失败
          //开启事务
          db.beginTransaction();
          try {
               db.execSQL("update account set money= money-200 where name=?",new String[]{"李四"});
               int a = 1/0;//如果执行过程中发现异常 事务会进行回滚
               db.execSQL("update account set money= money+200 where name=?",new String[]{"张三"});
               //设置事务成功标记
               db.setTransactionSuccessful();
          } finally {
               //事务结束
               db.endTransaction();
          }

上一篇:4 live555源码分析(四)——live555 工作流程(一)


下一篇:POJ 2112.Optimal Milking (最大流)