Android Sqite数据库 <2>

Android 开发中实际使用sql语句不多,那么android就提供了一个"叉叉"helper的类:SQLiteOpenHelper,但是开发人员是通过继承这个类来实现对数据进行操作的.

步骤如下:

<0> : 定义一个管理数据管理类:

public class SQLManager {
    
    public static final String SQ_LITE_DATABASE_TABLE="tsql";
    public static final String SQL_TABLE_CREATE="create table "+SQ_LITE_DATABASE_TABLE+"{" +
            "id INTEGER PRIMARY KEY AUTOINCREMENT,user TEXT,password TEXT,nickname varchar(20) }";
    public static final String SQL_DROP_EXSIT_TABLE="drop table if exist tsql";

    public static final String TABLE_ID_FIELD="id";
    public static final String TABLE_USER_FIELD = "user";
    public static final String TABLE_PASSWORD_FIELD = "password";
    public static final String TABLE_NICKNAME_FIELD = "nickname";

}

 

<1> 先要新建一个几成SQLiteOpenHelper的类:

public class SQLHelper extends SQLiteOpenHelper{

}

<2> 这个新建的类还必须要有构造函数,数据库名和版本号可以构建中传入,也可以直接传入常量,如下面:

public SQLHelper(Context context){            
        super(context,DATABASE_NAME,null,DATABASE_VERSION);        
    }
    
    public SQLHelper(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }
private static final String DATABASE_NAME="user_db";
    private static final int DATABASE_VERSION=1;

<3> 在重载onCreate中创建或者打开数据库:

@Override
    public void onCreate(SQLiteDatabase sqldb) {
        // TODO Auto-generated method stub
        sqldb.execSQL(SQLManager.SQL_TABLE_CREATE);

    }

<4> 打开数据库后,即可以开始操作了,在操作之前需要认识一个类ContentValues,由于android提供封装好的操作方法,操作方法在插入更新数据时,需要开发人员现将一个集合的数据打好包,然后传入操作方法中,而APP的数据就要放大一个"包中",相当于一个中间人,那么ContentValues就起到打包或者说中间人的作用:

ContentValues cvs = new ContentValues();

用其打包数据:把数据放到指定的字段中即可:

cvs.put(SQLManager.TABLE_USER_FIELD, user);
        cvs.put(SQLManager.TABLE_PASSWORD_FIELD, password);
        cvs.put(SQLManager.TABLE_NICKNAME_FIELD, nickname);

其次操作数据时,要么就是读取数据,要么就是写入数据,一般情况下如果读取数据时,我们就获得读取数据库的对象就可以了,同样写入:

SQLiteDatabase sqldb=this.getReadableDatabase();
SQLiteDatabase sqldb = this.getWritableDatabase();

<5> : 执行插入操作数据:

public boolean insert(String user, String password, String nickname) {

        SQLiteDatabase sqldb = this.getWritableDatabase();

        ContentValues cvs = new ContentValues();
        cvs.put(SQLManager.TABLE_USER_FIELD, user);
        cvs.put(SQLManager.TABLE_PASSWORD_FIELD, password);
        cvs.put(SQLManager.TABLE_NICKNAME_FIELD, nickname);

        // public long insert(String table, String nullColumnHack, ContentValues
        // values)
        Long result = sqldb
                .insert(SQLManager.SQ_LITE_DATABASE_TABLE, null, cvs);

        if (result == -1) {
            return false;
        } else {
            return true;
        }

    }

<6> 执行更新操作:注意操作过程中条件的设置

public boolean update(String user, String password, String nickname) {

        SQLiteDatabase sqldb = this.getWritableDatabase();

        String where = SQLManager.TABLE_USER_FIELD + "=?";
        String whereargs[] = { user };

        ContentValues cvs = new ContentValues();
        cvs.put(SQLManager.TABLE_USER_FIELD, user);
        cvs.put(SQLManager.TABLE_PASSWORD_FIELD, password);
        cvs.put(SQLManager.TABLE_NICKNAME_FIELD, nickname);

        int result = sqldb.update(SQLManager.SQ_LITE_DATABASE_TABLE, cvs,
                where, whereargs);

        if (result == 0) {
            return false;
        } else {
            return true;
        }

    }

<7> 执行删除数据操作:

public boolean delete(String user) {

        SQLiteDatabase sqldb = this.getWritableDatabase();

        String where = SQLManager.TABLE_USER_FIELD + "=?";
        String whereargs[] = { user };

        int result = sqldb.delete(SQLManager.SQ_LITE_DATABASE_TABLE, where,
                whereargs);

        if (result == 0) {
            return false;
        } else {
            return true;
        }

    }

<8> : 执行查询操作:

public void query(){
        
        SQLiteDatabase sqldb=this.getReadableDatabase();
        
        String columns[]={SQLManager.TABLE_USER_FIELD,SQLManager.TABLE_PASSWORD_FIELD,SQLManager.TABLE_NICKNAME_FIELD};
        String orderby=SQLManager.TABLE_ID_FIELD;
        
        Cursor cr=sqldb.query(SQLManager.SQ_LITE_DATABASE_TABLE, columns, null, null, null, null, null);
        
        cr.moveToFirst();
        while(!cr.isAfterLast()){
            
            Log.i(TAG,"user : " + cr.getString(1) + " password : " + cr.getString(2)+" nickname : "+ cr.getString(3));            
            
            cr.moveToNext();
        }
                
    }

这个里面query可以传递查询条件,一般这个方法可以这样写:需要返回游标,上面直接打印了.

public Cursor  query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)

<9> 写完上面辅助操作数据库类,进入具体使用阶段:

private SQLHelper sqlhelper;
sqlhelper = new SQLHelper(this);
sqlhelper.insert(...)
....

 

具体的例子网上很多,个人觉得只要看得懂API,再要记住操作流程,当然实际上寡人是做了demo的.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值