本文整理自网络,侵删。
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)
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”
书籍
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(); } } }
相关阅读 >>
sql学习之case when then else end的用法
忘记grafana不要紧2种grafana重置admin密码方法详细步骤
python实现读写Sqlite3数据库并将统计数据写入excel的方法示例
更多相关阅读请进入《Sqlite》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
相关推荐
评论
管理员已关闭评论功能...
- 欢迎访问木庄网络博客
- 可复制:代码框内的文字。
- 方法:Ctrl+C。