Android之SQLite的使用(一)

一、SQLite数据库的使用

SQLite操作API
- Android SDK提供了一系列对数据库进行操作的类和接口。

常用的数据库操作类有:
1.SQLiteOpenHelper类:该类是一个抽象类,用于创建数据库和数据库版本更新。(连接数据库)
2.SQLiteDatabase类:    该类是一个数据库访问类,封装了一系列数据库操作的APl,可以对数据                                             进行增删改查操作。(操作数据库)
3.Cursor接口:是一个游标接口,在数据库操作中作为返回值,相当于结果集esultSet。(查询)
1、连接SQLite数据库
(1) SQLiteOpenHelper类与数据库的连接
当应用程序需要创建、连接数据库时,需要使用
android.database.sqlite包中的SQLiteOpenHelper的实例能完成创建、连接数据库,管理数据库的版本号(用户可自定义一个版本号)以及更新数据库等工作。
sQLiteOpenHelper类,它是一个抽象类,该类用于创建数据库和数据库版本更新。

创建类,实现SQL iteOpenHelper

public class personhelper extends SQLiteOpenHelper {
//实现抽象类和构造方法,方法
    public personhelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
//构造函数(上下文,数据库名,工厂可以为null,版本号从1开始)
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
     //数据库第一次创建时被使用   
    }
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    //数据库更新时使用
    }
}

(2)关闭数据库用close()方法。

(3)(3)数据库所在目录
系统将应用程序创建的数据库存放在系统提供的数据区内,目录是:ldataldata\应用程序的包名ldatabasesl

2.数据库的常用操作
2、SQLiteDatabase类的两个重要方法

SQLiteDatabase getReadableDatabase()

SQLiteDatabase getWritableDatabase()
SQLiteDatabase提供了许多操作数据库的方法,本节介绍两个常用的重要的方法execSQL()和rawQuery()方法。execSQL()不能是查询语句。

public class MainActivity extends AppCompatActivity {
    personhelper person;
    EditText et;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        person=new personhelper(this,"personer.db",null,2);
        et=(EditText) findViewById(R.id.et);
        SQLiteDatabase db=person.getWritableDatabase();
        db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20),phone varchar(20))");
    }
//插入
     public void insert(View view){
         SQLiteDatabase db=person.getWritableDatabase();
         //方法一
        db.execSQL("insert into info(name,phone) values ('wangwu1','1119')");
        //方法二
         db.execSQL("insert into info(name,phone) values (?,?)",new String[]{"xue","1110"});
     }
//更新
     public void updata(View v){
         SQLiteDatabase db=person.getWritableDatabase();
         db.execSQL("update info set phone='110' where name='zhangsan'");
     }
//删除
     public void delete(View v){
         SQLiteDatabase db=person.getWritableDatabase();
         //方法一
         db.execSQL("delete from info where name='zhangsan1'");
         //方法二
         db.execSQL("delete from info where name=?",new String[]{et.getText().toString()});
     }


}

(2) rawQuery方法
public Cursor rawQuery (String sql, String[selectionArgs)该方法的第一个参数sql应当是一个SELECT语句,方法的第2个参数可以是null。例如;
sQLiteDatabase db= getWritableDatabase();
String sql ="SELECT*FROM book WHRER id ='879-23'AND name = 'java";
Cursor cursor =db. rawQuery (sql,null);
列代码等价于前面的代码:
SQLiteDatabase db= getWritableDatabase();
String sql ="SELECT *FROM book WHRER id = ? AND name = ?";

Stringl selectionArgs ={"879-23"," java";
Cursor cursor = db. rawQuery (sql,selectionArgs);

//查找
     public void selet(View v){
         SQLiteDatabase db=person.getReadableDatabase();
         Cursor cursor=db.rawQuery("select * from info",null);//null占位符
         List<personfile> person=new ArrayList<personfile>();//集合
         while (cursor.moveToNext()){//返回一个boolean类型的值
           personfile Personfile=new personfile();
           Personfile.setId(cursor.getInt(0));
           Personfile.setName(cursor.getString(1));//列的索引值
           Personfile.setPhone(cursor.getString(2));//cursor.getColumnIndex("phone")可以返回列的索引值
            person.add(personfile);
         }
     }


(3) Cursor
rawQuery方法将查询结果返回到一个Cursor类的实例中,Cursor类似JavaAPI中的ResultSet类。也就是说SQL查询语句对数据库的查询操作将返回一个Cursor对象,Cursor对象是由统一形式的列组织的数据行组成,习惯上称Cursor对象为结果集
例如,对于Cursor cursor = db.rawQuery("SELECT*FROM book");结果集cursor的列数和表goods的列数相同,
而对于Cursor cursor=db.rawQuery("SELECT name,price FROM book");结果集cursor只有两列,第一列是name列、第二列是price列。

结果集cursor最初的查询游标在第1行之前,结果集cursor使用
moveToNext()方法将查询游标移到下一数据行,获得一行数据后,结果集cursor可以使用诸如getXxx方法获得字段值(列值),将位置索引传递给getXxx方法的参数即可
如果moveToNext()方法已经到了结果集cursor的最后一行的后面,moveToNext()方法返回false,否则返回true。另外Cursor还有常用的
moveToPrevious()方法、moveToFirst()方法和moveToLast()方法(用于将查询游标移动到结果集的最后一行,如果结果集为空,该方法返false,否则返回true)。

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值