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

详解Android数据存储―使用SQLite数据库,第1张

概述SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库。Android提供了3种 *** 作数据的方式,SharedPreference(共享首选项)、文件存储以及SQLite数据库。 @H_502_0@sqlite是AndroID自带的关系型数据库,是一个基于文件的轻量级数据库。AndroID提供了3种 *** 作数据的方式,SharedPreference(共享首选项)、文件存储以及sqlite数据库。

@H_502_0@sqlite数据库文件被保存在/data/data/package_name/databases目录下。

@H_502_0@一、创建和删除表

@H_502_0@1.创建表

@H_502_0@创建表的SQL语句为:

CREATE table userInfo_brIEf (ID INTEGER PRIMARY KEY autoINCREMENT,name TEXT,password TEXT);
@H_502_0@对应的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);
@H_502_0@2.删除表

@H_502_0@SQL语句为:

DROP table userInfo_brIEf;
@H_502_0@对应的java代码为:

String sql="DROP table "+tablename+";";db.execsql(sql);
@H_502_0@二、 *** 作数据库中的记录

@H_502_0@1.插入记录

@H_502_0@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);
@H_502_0@2.更新记录

@H_502_0@update使用方法:

@H_502_0@复制代码 代码如下:
sqliteDatabase.update(String table,ContentValues values,String where-Clause,String[] WhereArgs)

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

ContentValues values=new ContentValues();values.put(PASSWORD,"123456");//要更新的数据db.update(tablename,values,name+"=?",new String[]{"bob"});
@H_502_0@3.删除记录

@H_502_0@delete使用方法:

sqliteDatabase.delete(String table,String[] WhereArgs)
@H_502_0@eg:删除那么为bob的记录

db.delete(tablename,new String[]{"bob"});
@H_502_0@4.查询记录

@H_502_0@1.单表查询

@H_502_0@使用sqliteDatabase.query(7个参数)。

@H_502_0@2.多表查询

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

@H_502_0@复制代码 代码如下:
SELECT A.name,A.password,B.age,B.sex FROM A,B WHERE A.name=B.name AND A.name=“bob”

@H_502_0@多表查询步骤:

sqlitequeryBuilder builder=new sqlitequeryBuilder();//获得对象builder.settables(tablename_A,tablename_B);//设置需要查询的表,可多个builder.appenDWhere(tablename_A+"."+name+"="tablename_B+"."+name);//设置关联属性,表与属性间.隔开,属性以=连接cursor=builder.query(7个属性);//7属性同单表查询
@H_502_0@实例―通过数据库验证登录

@H_502_0@1.数据库设计

@H_502_0@使用了数据库帮助类,从写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,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 自动生成的方法存根  }}
@H_502_0@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);    //若没有查询到相关信息,不再继续 *** 作    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();    }  } }
@H_502_0@

@H_502_0@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},new String[]{name},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,values);      //进行跳转      Intent intent=new Intent(Registeractivity.this,name);      startActivity(intent);      }    });  }}
@H_502_0@

 

@H_502_0@

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


@H_502_0@以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的详解Android数据存储―使用SQLite数据库全部内容,希望文章能够帮你解决详解Android数据存储―使用SQLite数据库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1146711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存