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

}

}

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

安卓 sqlite数据存入mysql_详解Android数据存储—使用SQLite数据库相关推荐

  1. android 数据文件存储,实例详解Android文件存储数据方式

    总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.下面通过本文给大家介绍android文件存储数据方式. 1.文件存储数据使用了java中的io操作来进行文件的保存和读取,只不 ...

  2. mysql 数据分组_详解MySQL 数据分组

    创建分组 分组是在select语句中的group by 子句中建立的. 例: select vend_id, count(*) as num_prods from products group by ...

  3. 如何把采集到的数据存入mysql_数据采集教程_数据发布_如何发布到数据库MySQL_后羿采集器...

    如果大家在发布到数据库时遇到一些问题,请参考这个教程进行问题排查:发布到数据库常见问题 作为一款真免费的数据采集软件,我们免费提供多种导出方式,如果小伙伴们需要将采集到的数据发布到数据库MySQL,可 ...

  4. android数据库文件是否加密存储,详解Android数据存储之SQLCipher数据库加密

    前言: 最近研究了Android Sqlite数据库以及ContentProvider程序间数据共享,我们清晰的知道Sqlite数据库默认存放位置data/data/pakage/database目录 ...

  5. 国服光遇android和ios能一起玩吗,光遇安卓和苹果可以一起玩吗 数据互通问题详解[多图]...

    光遇安卓和苹果这两个系统的玩家可以一起组队吗,相信各位小伙伴都不清楚,同时游戏的数据互通吗,接下里为大家详细介绍互通规则解答. 光遇数据互通问题详解 首先经过测试,国际服的安卓和苹果是可以一起玩的,这 ...

  6. android json mysql_Android通过json向MySQL中读写数据的方法详解【读取篇】

    本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private vo ...

  7. android卡刷教程,卡刷是什么意思?安卓系统卡刷教程详解

    2016-03-29 17:43:49 卡刷是什么意思?安卓系统卡刷教程详解 标签:卡刷,安卓系统卡刷教程,卡刷升级 [ROM之家]使用安卓系统手机的发烧友可能会经常提到卡刷一词,那么到底卡刷是什么意 ...

  8. 详解 Android 的 Activity 组件

    本文详细介绍了 Android 应用编程中 Activity 的生命周期.通信方式和 Intent Filter 等内容,并提供了一些日常开发中经常用到的关于 Activity 的技巧和方法.通过本文 ...

  9. 现在详解Android App AllowBackup配置带来的风险

    现在位置:  首页 >  文章 >  移动安全 > 正文 详解Android App AllowBackup配置带来的风险 2015 /3/11 1:27 10,105 评论 3 条 ...

最新文章

  1. java中的几种对话框_Java中弹出对话框中的几种方式
  2. python删除指定天数前的文件_python 删除指定时间间隔之前的文件实例
  3. python ansible模块_ansible常用模块
  4. H3C模拟器ping,tel,ssh配置
  5. java 读取栅格,提取两个重叠栅格的数据
  6. 简单说一下寄存器寻址
  7. 老男孩教育67期--day02--操作系统硬件知识
  8. c语言中的结构体定义和常见用法
  9. 仿京东轮播的广告展示栏
  10. 哈马德国际机场在全球最佳机场评选中排名第一;合肥君悦酒店浪漫呈现“悦-七夕”限定晚宴 | 全球旅报...
  11. ai不同形状的拼版插件_Illustrator(AI)自动拼版脚本插件
  12. Redis系列漏洞总结
  13. 云痕大数据 家长登录_1 云痕家长操作手册
  14. 2012杰出版主获奖感言
  15. Kubernetes写yaml文件遇到的尴尬事情
  16. 计算计控制系统2.0
  17. 中信银行面试前准备好多材料_面试准备帮助我在锁定期间获得了多个报价
  18. Python中*与**的几种用法
  19. unity ugui android 小键盘,Unity inputfield 实现显示 隐藏密码功能(在安卓中切换不打开下虚拟键盘)...
  20. 偏振器件传输矩阵matlab编程,偏振器件的琼斯矩阵

热门文章

  1. canvas清除画布方法
  2. AvalonEdit-基于WPF的代码显示控件
  3. 图灵机停机问题与辩证无限观
  4. js实时监听input输入框值的变化以便即使匹配搜索项
  5. enspac启动失败代码2_eNSP华为路由交换设备模拟器AR设备启动失败“错误代码40”问题解决方案...
  6. 子桓说:中国人清明节一定要祭祖?全面科普“生与死”
  7. vue中使用textarea回显不换行
  8. [noip模拟赛2017.7.16]
  9. 超强!Python for S60(pys60)介绍
  10. 通信基础概念(一) 什么是信号?