软件编程
位置:首页>> 软件编程>> Android编程>> 详解Android数据存储—使用SQLite数据库

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

作者:ervincm  发布时间:2023-07-31 03:14:08 

标签: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();
   }

}
}

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

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);
     }
   });
 }
}

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

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

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();// 提交修改
   }
}

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

来源:http://blog.csdn.net/ervincm/article/details/60585123

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com