Sqlitedatabase的初步认识与使用

android Sqlitedatabase的初步学习


首先,sqlite适合用来储存大量数据结构相同的数据。

数据库的创建

1.创建一个类集成SqliteOpenHelper,需要添加一个构造方法,实现两个方法oncreate ,onupgrade构造方法中的参数介绍:

    super(Context,String name,factory,version);
    super(context, "info.db", null,1);
    //context :上下文   , name:数据库文件的名称    factory:用来创建cursor对象,默认为null 
    //version:数据库的版本号,从1开始,如果发生改变,onUpgrade方法将会调用,4.0之后只能升不能降

2 .创建这个帮助类的一个对象,调用getReadableDatabase()方法,会帮助我们创建打开一个数据库

3.复写oncreate和onupgrdate方法:
oncreate方法是数据库第一次创建的时候会被调用; 特别适合做表结构的初始化,需要执行sql
语句;SQLiteDatabase db可以用来执行sql语句

4.帮助类对象中的getWritableDatabase 和 getReadableDatabase都可以帮助我们获取一个数据库
操作对象SqliteDatabase.
区别:
getReadableDatabase:
先尝试以读写方式打开数据库,如果磁盘空间满了,他会重新尝试以只读方式打开数据库。
getWritableDatabase:
直接以读写方式打开数据库,如果磁盘空间满了,就直接报错。

数据库的增删改查

1.创建一个帮助类的对象,调用getReadableDatabase方法,返回一个SqliteDatebase对象

2.使用SqliteDatebase对象调用insert,update,delete ,query方法做增删改查。

3.使用SqliteDatebase对象调用execSql()做增删改,调用rawQuery方法做查询。

一个登陆界面通过数据库存储账号密码的例子

//新建类集成SqliteOpenHelper
public class AccountSQLiteOpenHelper extends SQLiteOpenHelper {

    public AccountSQLiteOpenHelper(Context context){
        super(context, "user.db", null, 2);
        //建立名为user.db的数据库
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table user (_id integer primary key autoincrement,account varchar(20),password varchar(11))");
        //设置表结构
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //版本更新操作
    }
//一个帮助类对象,包含对表的几种操作
public class SqlDao {
    private AccountSQLiteOpenHelper mySqliteOpenHelper;
    public SqlDao(Context context){
        //创建一个帮助类对象
        mySqliteOpenHelper = new AccountSQLiteOpenHelper(context);


    }

    public boolean add(User bean){

        //执行sql语句需要sqliteDatabase对象
        //调用getReadableDatabase方法,来初始化数据库的创建
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
        ContentValues values = new ContentValues();
        //是用map封装的对象,用来存放值
        values.put("account", bean.account);
        values.put("password", bean.password);
        long result = db.insert("user", null, values);
        //底层是在拼装sql语句
        //关闭数据库对象
        db.close();
        if(result != -1){//-1代表添加失败
            return true;
        }else{
            return false;
        }
    }

    public int del(String name){
        //执行sql语句需要sqliteDatabase对象
        //调用getReadableDatabase方法,来初始化数据库的创建
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
        int result = db.delete("user", "account = ?", new String[]{name});
        //关闭数据库对象
        db.close();

        return result;
    }

    public int update(User bean){

        //执行sql语句需要sqliteDatabase对象
        //调用getReadableDatabase方法,来初始化数据库的创建
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
    //是用map封装的对象,用来存放值
        values.put("password", bean.password);

        int result = db.update("user", values, "account = ?", new String[]{bean.account});
        //关闭数据库对象
        db.close();
        return result;
    }

    public boolean query(User bean,Context mContext){
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
        Cursor cursor = db.query("user",new String[]{ "password"},"account = ?",new String[]{bean.account},null, null, "_id desc");
        if(cursor != null && cursor.getCount() > 0){
            //循环遍历结果集,获取每一行的内容
            String password = "";
            while(cursor.moveToNext()){//条件,游标能否定位到下一行
                //获取数据
                password = cursor.getString(0);
            }
            cursor.close();//关闭结果集
            if(password.equals(bean.password)) {
                Toast.makeText(mContext, "验证成功", Toast.LENGTH_SHORT).show();
                return true;
            }else{
                Toast.makeText(mContext,"密码错误", Toast.LENGTH_SHORT).show();
                return false;
            }
        }else{
            cursor.close();
            Toast.makeText(mContext,"账号不存在!",Toast.LENGTH_SHORT).show();
            return false;
        }
        Cursor tet = mContext.getContentResolver().query()
    }
    public void query(String name){

        //执行sql语句需要sqliteDatabase对象
        //调用getReadableDatabase方法,来初始化数据库的创建
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();

        Cursor cursor = db.query("user", new String[]{"_id","account","password"}, "account = ?", new String[]{name}, null, null, "_id desc");
        //解析Cursor中的数据
        if(cursor != null && cursor.getCount() >0){//判断cursor中是否存在数据

            //循环遍历结果集,获取每一行的内容
            while(cursor.moveToNext()){//条件,游标能否定位到下一行
                //获取数据
                int id = cursor.getInt(0);
                String name_str = cursor.getString(1);
                String password = cursor.getString(2);
                System.out.println("_id:"+id+";account:"+name_str+";password:"+password);
            }
            cursor.close();//关闭结果集

        }
        //关闭数据库对象
        db.close();
    }
}
//MainActivity
public class MainActivity extends AppCompatActivity{
    private Context mContext;
    private EditText mAccount;  //用户名
    private EditText mPassword; //密码
    private Button mNewuser;    //注册
    private Button mLogin;      //登陆



    private SQLiteDatabase mDatabase;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mContext = this;
        //创建一个帮助类对象
        mDatabase = new AccountSQLiteOpenHelper(mContext).getWritableDatabase();    //创建数据库

        mNewuser = (Button)findViewById(R.id.newuser_button);
        mLogin = (Button)findViewById(R.id.login_button);
        mAccount = (EditText)findViewById(R.id.user_accont);
        mPassword = (EditText)findViewById(R.id.user_password);

        mNewuser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                newUser();                          //注册判断及数据库操作
            }
        });

        mLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Login();                            //登陆判断
            }
        });

    }

    private void Login(){
        String username = mAccount.getText().toString().trim();         
        //获取账号密码
        String password = mPassword.getText().toString().trim();
    SqlDao sqlDao = new SqlDao(mContext);
    //新建数据库操作对象
        User bean = new User();
        bean.account = username;
        bean.password = password;
        boolean result = sqlDao.query(bean, mContext);          
        //查询,result接受是否有该账户(后续result操作未完善)

    }

    private void newUser(){
    //获取账号密码
        String password = mPassword.getText().toString().trim();

        if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){     
        //判断格式
            Toast.makeText(mContext, "用户名及密码不能为空", Toast.LENGTH_SHORT).show();
            return ;
        }
        SqlDao sqlDao = new SqlDao(mContext);               
        //新建数据库操作对象
        User bean = new User();
        bean.account = username;
        bean.password = password;
            boolean result = sqlDao.add(bean);
            if(result){
                Toast.makeText(mContext, "用户名密码注册成功", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(mContext, "用户名密码注册失败", Toast.LENGTH_SHORT).show();
            }
    }
}
//存放数据类
public class User {

    public String account;

    public String password;
}

小结

小结,通过《Android编程权威指南》以及黑马Android教学视频学习的,这里这是介绍了一点皮毛,自己也算是通过这次机会,把Activity的编写逻辑理了一遍,通过这个登录界面,以上,继续学习。还有不知道怎么回事今天编辑排版莫名其妙出问题=-=

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值