全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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


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


# androidsqlite数据库  # android  # sqlite数据库  # 数据库存储  # Android SharedPreferences数据存储详解  # Android数据存储方式操作模式解析  # Android 通过SQLite数据库实现数据存储管理  # Android四种数据存储的应用方式  # Android基础教程数据存储之文件存储  # 详解Android的网络数据存储  # Android 文件数据存储实例详解  # 5种Android数据存储方式汇总  # Android数据存储几种方式讲解  # 自动生成  # 跳转  # 存了  # 判断是否  # 自动登录  # 是一个  # 多个  # 不存在  # 相关信息  # 不认识  # 自带  # 第一条  # 若不  # 数据库中  # 大家多多  # 键值  # 数据库文件  # 使用了  # 目录下  # delete 


相关文章: 如何选择高效便捷的WAP商城建站系统?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  如何确认建站备案号应放置的具体位置?  如何快速生成橙子建站落地页链接?  ,网页ppt怎么弄成自己的ppt?  公司网站设计制作厂家,怎么创建自己的一个网站?  如何在建站主机中优化服务器配置?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  广东企业建站网站优化与SEO营销核心策略指南  已有域名建站全流程解析:网站搭建步骤与建站工具选择  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  制作销售网站教学视频,销售网站有哪些?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  建站之星备案是否影响网站上线时间?  如何生成腾讯云建站专用兑换码?  临沂网站制作企业,临沂第三中学官方网站?  jQuery 常见小例汇总  如何挑选高效建站主机与优质域名?  家具网站制作软件,家具厂怎么跑业务?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  如何在IIS服务器上快速部署高效网站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  定制建站流程步骤详解:一站式方案设计与开发指南  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  建站OpenVZ教程与优化策略:配置指南与性能提升  建站之星如何快速生成多端适配网站?  建站之星在线客服如何快速接入解答?  ,网站推广常用方法?  建站之星代理费用多少?最新价格详情介绍  建站主机是什么?如何选择适合的建站主机?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  建站之星如何一键生成手机站?  如何通过商城免费建站系统源码自定义网站主题?  如何在自有机房高效搭建专业网站?  如何制作算命网站,怎么注册算命网站?  h5在线制作网站电脑版下载,h5网页制作软件?  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  如何打造高效商业网站?建站目的决定转化率  建站之星安装需要哪些步骤及注意事项?  css网站制作参考文献有哪些,易聊怎么注册?  如何快速查询网址的建站时间与历史轨迹?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  个人网站制作流程图片大全,个人网站如何注销?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何用虚拟主机快速搭建网站?详细步骤解析  建站之星好吗?新手能否轻松上手建站?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  建站之星各版本价格是多少?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。