Android 数据库操作

LZQ plus

发布于 2018.03.07 00:00 阅读 2436 评论 0

Android 数据库操作

1、数据库的创建与其中的注意事项。

public class DBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "thecar.db";

    private static final int DATABASE_VERSION = 1;


    public DBHelper(Context context) {

        //CursorFactory设置为null,使用默认值

        super(context, DATABASE_NAME, null, DATABASE_VERSION);

    }

    @Override

    public void onCreate(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE IF NOT EXISTS account" +

                "(_id INTEGER PRIMARY KEY AUTOINCREMENT, p_name VARCHAR,p_level VARCHAR, p_address VARCHAR, p_tel VARCHAR, p_card VARCHAR, " +

                "c_num VARCHAR, c_model VARCHAR, c_card VARCHAR, c_trip VARCHAR,remarks TEXT)");

    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("ALTER TABLE account ADD COLUMN other STRING");

    }

}

DATABASE_NAME :数据库名称。

DATABASE_VERSION :数据库版本,如果数据库版本发生了改变,那么就会执行onUpgrade()方法。其中:"ALTER TABLE account ADD COLUMN other STRING"的意思是在account中添加一个新的STRING 类型的“other”列。
onCreate():方法中有一个“CREATE TABLE IF NOT EXISTS”,意思就是如果不存在则建立。

 

2、数据库操作,基本的增删盖茶(盖茶什么鬼)。

public class DBManager {

    private DBHelper helper;

    private SQLiteDatabase db;

    public DBManager(Context context) {

        helper = new DBHelper(context);

        db = helper.getWritableDatabase();

    }

    public void addOne(MyBean bean) {

        db.beginTransaction();  //开始事务

        try {

            db.execSQL("INSERT INTO account VALUES(null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",

                    new Object[]{bean.getpName(), bean.getpLevel(), bean.getpAddress(),

                            bean.getpTel(), bean.getpCard(), bean.getcNum(), bean.getcModel(),

                            bean.getcCard(), bean.getcTrip(), bean.getRemarks()});

            db.setTransactionSuccessful();  //设置事务成功完成

        } finally {

            db.endTransaction();    //结束事务

        }

    }

    //修改一个记录

    public void updateOne(MyBean bean) {

        ContentValues cv = new ContentValues();

        cv.put("p_name", bean.getpName());
          ......
           一些字段
          ......           
        cv.put("remarks", bean.getRemarks());

        db.update("account", cv, "_id = ?", new String[]{String.valueOf(bean.getId())});

    }

    public void deleteOne(MyBean bean) {

        db.delete("account", "_id = ?", new String[]{String.valueOf(bean.getId())});

    }

    public List<MyBean> queryAll() {

        ArrayList<MyBean> beanList = new ArrayList<MyBean>();

        Cursor c = queryTheCursor();

        while (c.moveToNext()) {

            MyBean bean = new MyBean();

            bean.setId(c.getInt(c.getColumnIndex("_id")));

              ......
               一些字段
              ...... 

            bean.setRemarks(c.getString(c.getColumnIndex("remarks")));

            beanList.add(bean);

        }

        c.close();

        return beanList;

    }


    public List<MyBean> queryByName(String name) {

        ArrayList<MyBean> beanList = new ArrayList<MyBean>();

        Cursor c = queryTheCursor(name);

        while (c.moveToNext()) {

            MyBean bean = new MyBean();

            bean.setId(c.getInt(c.getColumnIndex("_id")));
              ......
               一些字段
              ...... 

            bean.setRemarks(c.getString(c.getColumnIndex("remarks")));

            beanList.add(bean);

        }

        c.close();

        return beanList;

    }


    public List<MyBean> queryBySome(String pName, String cNum) {

        ArrayList<MyBean> beanList = new ArrayList<MyBean>();

        Cursor c = queryTheCursor(pName,cNum);

        while (c.moveToNext()) {

            MyBean bean = new MyBean();

            bean.setId(c.getInt(c.getColumnIndex("_id")));

              ......
               一些字段
              ...... 

            bean.setRemarks(c.getString(c.getColumnIndex("remarks")));

            beanList.add(bean);

        }

        c.close();

        return beanList;

    }

    public Cursor queryTheCursor(String pName, String cNum) {

        String sql = "SELECT * FROM account WHERE p_name LIKE '%" + pName + "%' " +

                "AND c_num LIKE '%" + cNum + "%'";

        Cursor c = db.rawQuery(sql, null);

        return c;

    }


    public Cursor queryTheCursor() {

        String sql = "SELECT * FROM account";

        Cursor c = db.rawQuery(sql, null);

        return c;

    }


    public Cursor queryTheCursor(String name) {

        String sql = "SELECT * FROM account where p_name ='"+name+"'";

        Cursor c = db.rawQuery(sql, null);

        return c;

    }


    /**

     * 关闭数据库

     */

    public void closeDB() {

        db.close();

    }

}

 

updateOne() -> ContentValues的使用:

一般地:

ContentValues cv = new ContentValues();
cv.put("数据库字段名", 对应的值);
db.update("表名", cv, "_id = ?(这个地方相当于where)", new String[]{String.valueOf(bean.getId())});
query -> Cursor(每行的集合)的使用:

基本上:

String sql = "SELECT * FROM account";
Cursor c = db.rawQuery(sql, null); 
while (c.moveToNext()){…}

 
而这个DBManager怎么用,在该用的时候或者地方new一个就好了。