我们通过登录注册验证案例来理解SQLiteOpenHelper类的用法。据说在实际项目开发中是不会直接操作SQLiteDataBase的方法来打开数据库通常会继承SQLiteOpenHelper开发子类,并通过子类的getWritableDatabase和getReadableDatabase方法打开数据库。
ToastUtil.java
package com.example.datasave.Utils;
import android.content.Context;
import android.widget.Toast;
/**
* @author Squid
*
*/
public class ToastUtil {
/**
* 显示的Toast内容
* @param context:上下文环境
* @param text:需要显示的内容
*/
public static void showToast(Context context,String text){
Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
}
}
User.java
package com.squid.bean;
import java.io.Serializable;
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private String password;
public User(String name, String password) {
super();
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + password + "]";
}
}
SqliteHelper.java
package com.squid.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* @author Squid
*
*/
public class SqliteHelper extends SQLiteOpenHelper{
/**
* @param context 上下文环境 this getActivity
* @param name 数据库名
* @param factory 游标Cursor工厂对象
* @param version 数据库版本号,只能升不能降
*
*/
//当父类没有无参构造器时,子类必须重写父类的构造方法
public SqliteHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
public SqliteHelper(Context context){
super(context, "youyu.db1", null, 1);
}
//当创建数据库时执行该方法,仅执行一次
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("SqliteHelper", "我执行了onCreate");
String sql="create table tbl_userinfo(_id integer primary key autoincrement,name text,password text)";
db.execSQL(sql);
}
//当数据库升级时调用该方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("SqliteHelper", "我执行了onUpgrade");
}
}
UserDao.java
package com.squid.dao;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.squid.bean.User;
import com.squid.db.SqliteHelper;
/**
* @author Squid
*
*/
public class UserDao {
private SqliteHelper helper;
private SQLiteDatabase db;
public UserDao(Context context) {
helper = new SqliteHelper(context);
}
// 添加数据
public void insertData(User user) {
db=helper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name", user.getName());
values.put("password", user.getPassword());
db.insert("tbl_userinfo", null, values);
Log.i("UserDao", "插入數據成功");
}
//删除数据
public void deleteData(User user) {
db=helper.getWritableDatabase();
db.delete("tbl_userinfo", "name=?", new String[]{user.getName()});
Log.i("UserDao", "删除數據成功");
}
//修改数据
public void updateData(User user) {
db=helper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name", user.getName());
values.put("password", user.getPassword());
db.update("tbl_userinfo", values, "name=?", new String[]{});
Log.i("UserDao", "修改數據成功");
}
//查询数据
public User quary(String name) {
User user=null;
db=helper.getReadableDatabase();
Cursor cursor =db.query("tbl_userinfo", null, "name=?", new String[]{name}, null, null, "_id desc");
while(cursor.moveToNext()){
String nameString=cursor.getString(cursor.getColumnIndex("name"));
String password=cursor.getString(cursor.getColumnIndex("password"));
user=new User(nameString, password);
}
return user;
}
}
ThridActivity.java
package com.example.datasave4;
import com.example.datasave.Utils.ToastUtil;
import com.squid.bean.User;
import com.squid.dao.UserDao;
import com.squid.db.SqliteHelper;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
/**
* @author Squid
*
*/
public class ThridActivity extends Activity {
/*
* private SqliteHelper helper;//数据库创建帮助类 private SQLiteDatabase db;//数据库对象
*/
private EditText mEt_username;
private EditText mEt_password;
UserDao userDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_thrid);
/*
* //实例化帮助类,并没有在应用程序创建数据库 helper=new SqliteHelper(this, "youyu.db1",
* null,1); //实例化数据库对象,在应用程序中创建数据库文件 db = helper.getReadableDatabase();
*
* helper.getWritableDatabase();
*/
mEt_username = (EditText) findViewById(R.id.third_et_username);
mEt_password = (EditText) findViewById(R.id.third_et_password);
userDao = new UserDao(this);
}
public void login(View view) {
// TODO Auto-generated method stub
String username = mEt_username.getText().toString();
String password = mEt_password.getText().toString();
User user = userDao.quary(username);
if (user == null) {
ToastUtil.showToast(this, "用户名不存在");
} else {
if (user.getPassword().equals(password)) {
ToastUtil.showToast(this, "登录成功");
} else {
ToastUtil.showToast(this, "用户名或密码不存在");
}
}
}
public void register(View view) {
// TODO Auto-generated method stub
User user = null;
String username = mEt_username.getText().toString();
String password = mEt_password.getText().toString();
if (username.equals("")||password.equals("")) {
ToastUtil.showToast(this, "用户名或者密码不能为空");
} else {
user = userDao.quary(username);
user = new User(username, password);
userDao.insertData(user);
ToastUtil.showToast(this, "注册成功");
}
}
}
记得要把程序入口设置为这个activity。
activity_third.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/third_et_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入用户名"/>
<EditText
android:id="@+id/third_et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="login"
android:textColor="#ffffff"
android:textSize="25sp"
android:background="#3cc3f5"
android:text="登录"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:onClick="register"
android:textColor="#ffffff"
android:textSize="25sp"
android:background="#3cc3f5"
android:text="注册"/>
</LinearLayout>