您的位置:首页 > 数据库

Sqlitedatabase的初步认识与使用

2017-03-15 02:15 225 查看

android Sqlitedatabase的初步学习

首先,sqlite适合用来储存大量数据结构相同的数据。

数据库的创建

1.创建一个类集成SqliteOpenHelper,需要添加一个构造方法,实现两个方法oncreate ,onupgrade构造方法中的参数介绍:

super(Context,String name,factory,version);
super(context, "info.db", null,1);
//context :上下文   , name:数据库文件的名称    factory:用来创建cursor对象,默认为null
//version:数据库的版本号,从1开始,如果发生改变,onUpgrade方法将会调用,4.0之后只能升不能降


2 .创建这个帮助类的一个对象,调用getReadableDatabase()方法,会帮助我们创建打开一个数据库

3.复写oncreate和onupgrdate方法:

oncreate方法是数据库第一次创建的时候会被调用; 特别适合做表结构的初始化,需要执行sql

语句;SQLiteDatabase db可以用来执行sql语句

4.帮助类对象中的getWritableDatabase 和 getReadableDatabase都可以帮助我们获取一个数据库

操作对象SqliteDatabase.

区别:

getReadableDatabase:

先尝试以读写方式打开数据库,如果磁盘空间满了,他会重新尝试以只读方式打开数据库。

getWritableDatabase:

直接以读写方式打开数据库,如果磁盘空间满了,就直接报错。

数据库的增删改查

1.创建一个帮助类的对象,调用getReadableDatabase方法,返回一个SqliteDatebase对象

2.使用SqliteDatebase对象调用insert,update,delete ,query方法做增删改查。

3.使用SqliteDatebase对象调用execSql()做增删改,调用rawQuery方法做查询。

一个登陆界面通过数据库存储账号密码的例子

//新建类集成SqliteOpenHelper
public class AccountSQLiteOpenHelper extends SQLiteOpenHelper {

public AccountSQLiteOpenHelper(Context context){
super(context, "user.db", null, 2);
//建立名为user.db的数据库
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table user (_id integer primary key autoincrement,account varchar(20),password varchar(11))");
//设置表结构
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//版本更新操作
}


//一个帮助类对象,包含对表的几种操作
public class SqlDao {
private AccountSQLiteOpenHelper mySqliteOpenHelper;
public SqlDao(Context context){
//创建一个帮助类对象
mySqliteOpenHelper = new AccountSQLiteOpenHelper(context);

}

public boolean add(User bean){

//执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
ContentValues values = new ContentValues();
//是用map封装的对象,用来存放值
val
bd18
ues.put("account", bean.account);
values.put("password", bean.password);
long result = db.insert("user", null, values);
//底层是在拼装sql语句
//关闭数据库对象
db.close();
if(result != -1){//-1代表添加失败
return true;
}else{
return false;
}
}

public int del(String name){
//执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
int result = db.delete("user", "account = ?", new String[]{name});
//关闭数据库对象
db.close();

return result;
}

public int update(User bean){

//执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
//是用map封装的对象,用来存放值
values.put("password", bean.password);

int result = db.update("user", values, "account = ?", new String[]{bean.account});
//关闭数据库对象
db.close();
return result;
}

public boolean query(User bean,Context mContext){
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
Cursor cursor = db.query("user",new String[]{ "password"},"account = ?",new String[]{bean.account},null, null, "_id desc");
if(cursor != null && cursor.getCount() > 0){
//循环遍历结果集,获取每一行的内容
String password = "";
while(cursor.moveToNext()){//条件,游标能否定位到下一行
//获取数据
password = cursor.getString(0);
}
cursor.close();//关闭结果集
if(password.equals(bean.password)) {
Toast.makeText(mContext, "验证成功", Toast.LENGTH_SHORT).show();
return true;
}else{
Toast.makeText(mContext,"密码错误", Toast.LENGTH_SHORT).show();
return false;
}
}else{
cursor.close();
Toast.makeText(mContext,"账号不存在!",Toast.LENGTH_SHORT).show();
return false;
}
Cursor tet = mContext.getContentResolver().query()
}
public void query(String name){

//执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();

Cursor cursor = db.query("user", new String[]{"_id","account","password"}, "account = ?", new String[]{name}, null, null, "_id desc");
//解析Cursor中的数据
if(cursor != null && cursor.getCount() >0){//判断cursor中是否存在数据

//循环遍历结果集,获取每一行的内容
while(cursor.moveToNext()){//条件,游标能否定位到下一行
//获取数据
int id = cursor.getInt(0);
String name_str = cursor.getString(1);
String password = cursor.getString(2);
System.out.println("_id:"+id+";account:"+name_str+";password:"+password);
}
cursor.close();//关闭结果集

}
//关闭数据库对象
db.close();
}
}


//MainActivity
public class MainActivity extends AppCompatActivity{
private Context mContext;
private EditText mAccount;  //用户名
private EditText mPassword; //密码
private Button mNewuser;    //注册
private Button mLogin;      //登陆

private SQLiteDatabase mDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mContext = this;
//创建一个帮助类对象
mDatabase = new AccountSQLiteOpenHelper(mContext).getWritableDatabase();    //创建数据库

mNewuser = (Button)findViewById(R.id.newuser_button);
mLogin = (Button)findViewById(R.id.login_button);
mAccount = (EditText)findViewById(R.id.user_accont);
mPassword = (EditText)findViewById(R.id.user_password);

mNewuser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
newUser();                          //注册判断及数据库操作
}
});

mLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Login();                            //登陆判断
}
});

}

private void Login(){
String username = mAccount.getText().toString().trim();
//获取账号密码
String password = mPassword.getText().toString().trim();
SqlDao sqlDao = new SqlDao(mContext);
//新建数据库操作对象
User bean = new User();
bean.account = username;
bean.password = password;
boolean result = sqlDao.query(bean, mContext);
//查询,result接受是否有该账户(后续result操作未完善)

}

private void newUser(){
//获取账号密码
String password = mPassword.getText().toString().trim();

if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){
//判断格式
Toast.makeText(mContext, "用户名及密码不能为空", Toast.LENGTH_SHORT).show();
return ;
}
SqlDao sqlDao = new SqlDao(mContext);
//新建数据库操作对象
User bean = new User();
bean.account = username;
bean.password = password;
boolean result = sqlDao.add(bean);
if(result){
Toast.makeText(mContext, "用户名密码注册成功", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(mContext, "用户名密码注册失败", Toast.LENGTH_SHORT).show();
}
}
}


//存放数据类
public class User {

public String account;

public String password;
}


小结

小结,通过《Android编程权威指南》以及黑马Android教学视频学习的,这里这是介绍了一点皮毛,自己也算是通过这次机会,把Activity的编写逻辑理了一遍,通过这个登录界面,以上,继续学习。还有不知道怎么回事今天编辑排版莫名其妙出问题=-=
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: