Android数据存储—使用SQLite数据库

SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库。Android提供了3种操作数据的方式,SharedPreference(共享首选项)、文件存储以及SQLite数据库。
SQLite数据库文件被保存在/data/data/package_name/databases目录下。


一、创建和删除表

1.创建表

创建表的SQL语句为:

CREATE TABLE userInfo_brief  (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
password TEXT);

对应的java代码为:

    final static int VERSION=1;
    final static String TABLENAME="userInfo_brief";
    final static String ID="id";
    final static String NAME="name";
    final static String PASSWORD="password";
    String sql="CREATE TABLE "+TABLENAME+"("+"ID"+" INTEGER PRIMARY KEY AUTOINCREMENT," 
        +NAME+" TEXT,"// Attention:注意SQL语法,每个变量后需要有空格,否则不认识。
        +PASSWORD+" TEXT,"
        +AGE+" TEXT);";
        db.execSQL(sql);

2.删除表

SQL语句为:

DROP TABLE userInfo_brief;

对应的java代码为:

String sql="DROP TABLE "+TABLENAME+";";
db.execSQL(sql);

二、操作数据库中的记录

1.插入记录

insert用法:

SQliteDatabase.insert(String table,String nullColumnHack,ContentValues values)
ContentValues values=new ContentValues();//获取ContentValues对象,类似HashMAP
            values.put(DatabaseHelper.NAME, name);//键值对形式保存数据
            values.put(DatabaseHelper.PASSWORD, pass);
            values.put(DatabaseHelper.AGE, age);
            db.insert(DatabaseHelper.TABLENAME, null, values);

2.更新记录

update使用方法:

SQliteDatabase.update(String table,ContentValues values,String where-Clause,String[] WhereArgs)

eg:更新表中name为bob的密码

ContentValues values=new ContentValues();
values.put(PASSWORD,"123456");//要更新的数据
db.update(TABLENAME,values,NAME+"=?",new String[]{"bob"});

3.删除记录

delete使用方法:

SQliteDatabase.delete(String table,String where-Clause,String[] WhereArgs)

eg:删除那么为bob的记录

db.delete(TABLENAME,NAME+"=?",new String[]{"bob"});

4.查询记录

1.单表查询

使用SQLiteDatabase.query(7个参数)。

2.多表查询

如果A表中存了用户名和密码,B表中存了用户名和其他具体信息,使用SQLiteQueryBuilder多表查询。
SQL语句:

SELECT A.name,A.password,B.age,B.sex FROM A,B WHERE A.name=B.name AND A.name=“bob”

多表查询步骤:

SQLiteQueryBuilder builder=new SQLiteQueryBuilder();//获得对象
builder.setTables(TABLENAME_A,TABLENAME_B);//设置需要查询的表,可多个
builder.appendWhere(TABLENAME_A+"."+NAME+"="TABLENAME_B+"."+NAME);//设置关联属性,表与属性间.隔开,属性以=连接
cursor=builder.query(7个属性);//7属性同单表查询

实例—通过数据库验证登录

1.数据库设计

使用了数据库帮助类,从写onCreate方法

public class DatabaseHelper extends SQLiteOpenHelper {
    final static String DATABASENAME="my_database.db";
    final static int VERSION=1;
    final static String TABLENAME="userInfo_detail";
    final static String ID="id";
    final static String NAME="name";
    final static String PASSWORD="password";
    final static String AGE="age";

    public DatabaseHelper(Context context) {
        super(context, DATABASENAME, null, VERSION);
        // TODO 自动生成的构造函数存根
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO 自动生成的方法存根
        String sql="CREATE TABLE "+TABLENAME+"("+"ID"+" INTEGER PRIMARY KEY AUTOINCREMENT,"
        +NAME+" TEXT,"
        +PASSWORD+" TEXT,"
        +AGE+" TEXT);";
        db.execSQL(sql);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO 自动生成的方法存根

    }

}

2.登录界面

public class LoginActivity extends Activity {

    private EditText username;  
    private EditText password;  
    private CheckBox autoLogin;  
    private SharedPreferences sharedPreferences;  
    private String message;  
    SQLiteDatabase db;
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
      //  MyApplication.getInstance().addActivity(this);  

        sharedPreferences = this.getSharedPreferences("userInfo",Context.MODE_WORLD_READABLE);  //sharedPreferences实例化,用于记住登录状态,判断是否需要自动登录

        if (sharedPreferences.getBoolean("AUTO_ISCHECK", false)) {  //自动登录

            Intent intent = new Intent();  
            intent.setClass(LoginActivity.this, MainActivity.class);  
            intent.putExtra("NAME", sharedPreferences.getString("userName", ""));
            startActivity(intent);  

        } else {  
            setContentView(R.layout.login_main);  
            initView();  

          username = (EditText) findViewById(R.id.accountEdittext);  
          password = (EditText) findViewById(R.id.pwdEdittext);  
          Button btn_login=(Button) findViewById(R.id.login_in);
          Button btn_register=(Button)findViewById(R.id.register);
          btn_register.setOnClickListener(new OnClickListener() {//跳转注册界面

            @Override
            public void onClick(View v) {
                // TODO 自动生成的方法存根
                Intent intent=new Intent(LoginActivity.this, RegisterActivity.class);
                startActivity(intent);
            }
        });
         btn_login.setOnClickListener(new OnClickListener() { //判断登录

             @Override
             public void onClick(View v) {
                 // TODO Auto-generated method stub
                userLogin();
             }
         });
        }  
    }  

    /** 
     * 初始化视图控件 
     */  
    public void initView() {  
        Log.i(TAG, "初始化视图控件");  

        username = (EditText) findViewById(R.id.accountEdittext);  
        password = (EditText) findViewById(R.id.pwdEdittext);  
        autoLogin = (CheckBox) findViewById(R.id.checkBox1);  

        // 默认记住用户名  
        username.setText(sharedPreferences.getString("userName", ""));  

    }  

    /** 
     * 点击登录按钮时触发的方法 
     */  
    public void userLogin() {  
        //通过帮助类获得数据库对象
        DatabaseHelper helper=new DatabaseHelper(getBaseContext());
        db=helper.getReadableDatabase();
        //得到用户输入信息
        String usernameString = username.getText().toString();  
        String passwordString = password.getText().toString();  
        //根据用户名查询数据库信息
        Cursor cursor=db.query(DatabaseHelper.TABLENAME, new String[]{DatabaseHelper.PASSWORD},
                DatabaseHelper.NAME+"=?", new String[]{usernameString}, null, null, null);
        //若没有查询到相关信息,不再继续操作
        if(cursor.getCount()==0)
        {
            Toast.makeText(getBaseContext(), "用户名不存在", Toast.LENGTH_SHORT).show();
            return;
        }
        //若用户名存在,则继续操作
        cursor.moveToFirst(); //指向第一条记录
        String password=cursor.getString(0);//取得密码
        //判断密码,若一样则进行跳转
        if(password.equals(passwordString)){
            if(autoLogin.isChecked()){
                Editor editor=sharedPreferences.edit();
                editor.putString("userNAME", usernameString);
                editor.putBoolean("AUTO_ISCHECK", true);
                editor.commit();
            }
            Intent intent=new Intent(LoginActivity.this, MainActivity.class);
            intent.putExtra("NAME",usernameString);
            startActivity(intent);
        }
        else
        {
//          Editor editor = sharedPreferences.edit();  
//            editor.putString("userName", usernameString);  
//            editor.commit();  
            Toast.makeText(getBaseContext(), "密码错误", Toast.LENGTH_SHORT).show();
        }

    }
  }

这里写图片描述


3.注册界面

public class RegisterActivity extends Activity {
    String name;
    String pass;
    String age;
    SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO 自动生成的方法存根
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);
        final EditText et_userName=(EditText)findViewById(R.id.editText_1);
        final EditText et_password=(EditText)findViewById(R.id.editText_2);
        final EditText et_age=(EditText)findViewById(R.id.editText_3);
        Button btn_confirm=(Button)findViewById(R.id.register_confirm);
        btn_confirm.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO 自动生成的方法存根
                name=et_userName.getText().toString();
                pass=et_password.getText().toString();
                age=et_age.getText().toString();
                //得到数据库对象

                DatabaseHelper helper=new DatabaseHelper(getBaseContext());
                db=helper.getWritableDatabase();
                //判断用户名是否已存在
                Cursor cursor=db.query(DatabaseHelper.TABLENAME, new String[]{DatabaseHelper.NAME},
                        DatabaseHelper.NAME+"=?", new String[]{name}, null, null, null);
                //若查询目标已存在
                if(cursor.getCount()>0){
                    Toast.makeText(getBaseContext(), "用户名已存在", Toast.LENGTH_SHORT).show();
                    return;
                }

            //若不存在,则插入数据

            ContentValues values=new ContentValues();
            values.put(DatabaseHelper.NAME, name);
            values.put(DatabaseHelper.PASSWORD, pass);
            values.put(DatabaseHelper.AGE, age);
            db.insert(DatabaseHelper.TABLENAME, null, values);
            //进行跳转
            Intent intent=new Intent(RegisterActivity.this, MainActivity.class);
            intent.putExtra("NAME", name);
            startActivity(intent);
            }
        });
    }
}

这里写图片描述
这里写图片描述

4.登录成功界面

public class MainActivity extends Activity {
    String name;
    String pass;
    String age;

     private Button logout;
     SQLiteDatabase db;
     private SharedPreferences sharedPreferences;   
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    //   MyApplication.getInstance().addActivity(this);  
        setContentView(R.layout.main_activity);
        logout=(Button) findViewById(R.id.logout);
        doQuery();//进行查询
        doShow();//进行显示
        logout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO 自动生成的方法存根
                removeSharedPreference();
             Intent intent=new Intent();
             intent.setClass(MainActivity.this, LoginActivity.class);
             startActivity(intent);
            }
        });
    }

    private void doQuery() {
        // TODO 自动生成的方法存根
        name=getIntent().getExtras().getString("NAME");
        DatabaseHelper helper=new DatabaseHelper(getBaseContext());
        db=helper.getReadableDatabase();
        //准备查询de属性
        String[] columns=new String[]{DatabaseHelper.PASSWORD,DatabaseHelper.AGE};
        Cursor cursor=db.query(DatabaseHelper.TABLENAME, columns, DatabaseHelper.NAME+"=?", 
                new String[]{name}, null, null, null);
        cursor.moveToFirst();
        while(!cursor.isAfterLast()){//判断是否是最后一条记录
            pass=cursor.getString(0);
             age=cursor.getString(1);
            cursor.moveToNext();
        }
    }
    private void doShow() {
        // TODO 自动生成的方法存根
        TextView tv_show=(TextView)findViewById(R.id.show1);
        tv_show.setText("用户信息如下:\n"+"账户:"+name+"\n密码"+pass+"\n年龄"+age);
    }
    public void removeSharedPreference() {
        sharedPreferences = getSharedPreferences("userInfo", Context.MODE_PRIVATE);
        Editor editor = sharedPreferences.edit();
        //editor.remove("userName");
        editor.remove("AUTO_ISCHECK");
        editor.commit();// 提交修改
        }
}

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值