android关于数据库SQLite的简单使用

来源:互联网 发布:林珊珊的淘宝店质量 编辑:程序博客网 时间:2024/06/05 15:56

之前不想写博客,觉得麻烦,每次要用的时候去网上查一下一大堆,但是有时候想去翻一下某个知识点的时候,有时候又觉得每次都去找,还是浪费时间,所以觉得还是写一下,以后用起来方便一些。

今天想试下数据库,之前都写烂了,但是,几个月的RN下来,一直都是用的AsyncStorage这个类,所以数据库就有点遗忘了,然后自己写了一遍常用方法,运行的时候直接就炸了,这个错误提示是查询方法错误,然后去看了一下自己的代码,发现是这样的“Cursor cursor=database.rawQuery("select * from (where name =?),new String[]{name})”,看了一下,觉得这个括号有点怪怪的,然后就把括号删除了,然后查询就没有问题,其他的功能也没有什么问题,觉得记忆还是可以,还记得八九分。


先看下SQLiteOpenHelper这个类吧,我们需要自己定义一个类去实现这个抽象类,里面有两个方法需要我们重写1、onCreate方法用于创建表,可以根据需要创建多个表,2、onUpgrade方法是用于版本更新,可以不做处理。此外还有一个需要说明的地方是,SQLiteOpenHelper这个类,没有无参构造,所以需要创建一个构造函数,不过会有自动提示,为了使用方便,我们选择一个四参构造函数,本来构造函数是四参的,被我简化过后就只剩一个上下文对象。在super中可以看出这里面的四个参数本应该与上面对应,我只是把上面的后三个参数去掉了,第二个参数是数据库名称,第三个参数本来是CursorFactory游标对象,我们使用null代替,第四个参数是版本号。好了,SQLiteOpenHelper的继承就搞定了。

package trypost.dafeng.com.studyforever.sql;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by asus on 2017/8/21. */public class MySql extends SQLiteOpenHelper {    public static String TB_NAME="LiuZhiDan.db";    public MySql(Context context) {        super(context, TB_NAME, null, 1);    }    @Override    public void onCreate(SQLiteDatabase db) {        db.execSQL("create table user(name text,password text)");    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}

下面再来看下实际的用法,

1:增加对象,

/** * * @param user 新增的对象 */public void addUser(User user){    ArrayList<User> list=searchAllUser();//下文的查询数据库全部数据的方法,如果没有查询到对象,那么list长度为0    if (list.contains(user)){//关于User类中已经重写了hashCode和equal方法,并且只认定了name,即用户名作为唯一标识。        Toast.makeText(context,"你所添加的用户已经存在",Toast.LENGTH_SHORT).show();        return;//用于去重    }    values.put("name",user.getName());    values.put("password",user.getPassword());    database.insert("user",null,values);    values.clear();}

2、删除对象

/** * * @param name 删除对象的名称 */public void deleteUser(String name){    database.delete("user","name=?",new String[]{name});}

3、修改对象

/** * * @param oldName 要修改的名称 * @param newName 修改后的名称 */public void updateUser(String oldName,String newName){    User user=searchUser(oldName);    values.put("name",newName);    values.put("password",user.getPassword());    database.update("user",values,"name=?",new String[]{oldName});    values.clear();}

4、查询某个对象

/** * * @param name 要查询对象的名称 * @return 查询单个对象,查询不到数据,返回空对象 */public User searchUser(String name){    Cursor cursor=database.rawQuery("select * from user where name = ?",new String[]{name});    //Cursor cursor=database.query("user",new String[]{"name","password"},"name = ?",new String[]{"张三"},null,null,null);    if (cursor!=null){        while (cursor.moveToNext()){            String userName=cursor.getString(cursor.getColumnIndex("name"));            String userPassword=cursor.getString(cursor.getColumnIndex("password"));            return new User(userName,userPassword);        }    }    return null;}

5、查询整张表的数据

/** * * @return  查询所有对象,若user表为空,返回的集合不为空,但长度为0. */public ArrayList<User> searchAllUser(){    ArrayList<User> list=new ArrayList<>();    Cursor cursor=database.rawQuery("select * from user",null);    if (cursor!=null){        while (cursor.moveToNext()){            String name=cursor.getString(cursor.getColumnIndex("name"));            String password=cursor.getString(cursor.getColumnIndex("password"));            list.add(new User(name,password));        }    }    return list;}

 结束语,基本功能就这些了,愿你有所收获。



原创粉丝点击