关于SQLiteDataBase这块,大体有两种主要的实现方式,一种是不使用Helper类的方式,此种方式存在一个弊端,即不能oncreate两次,如果重复使用oncreate的button,则会报错,所以为了避免这种错误,在此项目中使用类继承SQLiteOpenHelper的方式进行SQLite3小型数据库的小项目开发,简单的实现登陆注册,以及对特定vo类的增删改查,中间还夹杂了ListView,ArrayAdapter,以及Intent的散知识点。
以下为正文:
首先介绍以下我写的项目的框架,总的为几个结构。
第一个部分为是所有项目都需要的简单java类,即与表对应的vo类。
第二个部分为Acitivty部分,总的有三个Activity:
1.LoginActivity,登陆界面
2.RegisterAcitivity ,注册界面
3.MainActivity,实现增删改查的界面
第三个部分为逻辑部分,即增删改查之类的方法,sql语句
第四个部分为Helper类
本人较懒,由于不是正式的工作项目,只分了两个包,如下:
Helper类如下:

第二个方法OnUpgrade内容为空,因为此处用不到,也可加入DROP TABLE的语句,然后复写oncreate实现表的更新。
此类主要目的是提供构造方法,以及创建数据库表,参数为上下文环境,数据库名,工厂,数据库版本。
在逻辑层以及activity层,实例化此类,能够通过参数传递数据库的内容,实现增删改查,简单的说此类是数据库连接类。
注册Activity如下:
package com.example.sqlitedatabase;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class RegisterActivity extends Activity {
private EditText et_regname, et_regpsw;
private Button bt_reg;
private UserService service = new UserService(RegisterActivity.this);
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
/**
* 关联控件
*/
findView();
/**
* 注册button的监听
*/
registerListener();
}
private void registerListener() {
bt_reg.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String Uname = et_regname.getText().toString();
String Upass = et_regpsw.getText().toString();
boolean flag = service.Register(Uname, Upass);
/**
* flag为Register方法返回值,成功为true
*/
if (flag) {
Intent intent = new Intent();
intent.setClass(RegisterActivity.this, LoginActivity.class);
startActivity(intent);
} else {
Toast.makeText(RegisterActivity.this, "注册失败,重新注册",
Toast.LENGTH_LONG).show();
}
}
});
}
private void findView() {
et_regname = (EditText) findViewById(R.id.et_regname);
et_regpsw = (EditText) findViewById(R.id.et_regpsw);
bt_reg = (Button) findViewById(R.id.reg_button);
}
}
登陆Activity如下:
package com.example.sqlitedatabase;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class LoginActivity extends Activity implements OnClickListener {
private EditText et_username, et_password;
private Button bt_log, bt_reg;
private UserService userService = new UserService(LoginActivity.this);
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
findView();
registerListener();
}
private void registerListener() {
bt_log.setOnClickListener(this);
bt_reg.setOnClickListener(this);
}
private void findView() {
et_username = (EditText) findViewById(R.id.et_username);
et_password = (EditText) findViewById(R.id.et_password);
bt_log = (Button) findViewById(R.id.bt_log);
bt_reg = (Button) findViewById(R.id.bt_reg);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
/**
* 登陆
*/
case R.id.bt_log:
String Uname = et_username.getText().toString();
String Upass = et_password.getText().toString();
// 登陆成功返回的flag是true
boolean flag = userService.Login(Uname, Upass);
if (flag) {
Intent intent = new Intent();
intent.setClass(LoginActivity.this, MainActivity.class);
startActivity(intent);
} else {
Toast.makeText(LoginActivity.this, "没有此用户,请注册",
Toast.LENGTH_LONG).show();
}
break;
/**
* 注册
*/
case R.id.bt_reg:
Intent intent = new Intent();
intent.setClass(LoginActivity.this, RegisterActivity.class);
startActivity(intent);
break;
default:
break;
}
}
}
登陆之后的Activity如下:
package com.example.sqlitedatabase;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.iotek.entity.Student;
public class MainActivity extends Activity implements OnClickListener {
private EditText et_name;
private EditText et_age;
private EditText et_score;
private EditText et_query;
private Button bt_add;
private Button bt_del;
private Button bt_update;
private Button bt_query;
private Button bt_all;
private ArrayAdapter<String> adapter;
private ListView lv_adapter;
private List<Student> stuList = new ArrayList<Student>();
private String[] data;
// 用来使用其中的增删改查
private StudentBiz studentBiz = new StudentBiz(MainActivity.this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 关联控件
initView();
// 注册监听button
registerListener();
}
// 注册监听button
private void registerListener() {
bt_add.setOnClickListener(this);
bt_del.setOnClickListener(this);
bt_update.setOnClickListener(this);
bt_query.setOnClickListener(this);
bt_all.setOnClickListener(this);
}
// 关联控件
private void initView() {
et_name = (EditText) findViewById(R.id.et_name);
et_age = (EditText) findViewById(R.id.et_age);
et_score = (EditText) findViewById(R.id.et_score);
et_query = (EditText) findViewById(R.id.et_query);
bt_add = (Button) findViewById(R.id.bt_add);
bt_del = (Button) findViewById(R.id.bt_del);
bt_update = (Button) findViewById(R.id.bt_update);
bt_query = (Button) findViewById(R.id.bt_query);
bt_all = (Button) findViewById(R.id.bt_all);
lv_adapter = (ListView) findViewById(R.id.listView1);
}
// 监听button
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_add:
if(et_age.getText().toString().equals("")||et_score.getText().toString().equals("")||et_name.getText().toString().equals("")){
break;
}
String name = et_name.getText().toString();
int age = Integer.valueOf(et_age.getText().toString());
int score = Integer.valueOf(et_score.getText().toString());
Student student = new Student(name, age, score);
studentBiz.addStudent(student);// 添加到数据库
DynamicData();
break;
case R.id.bt_del:
if(et_query.getText().toString().equals("")){
break;
}
int _id = Integer.valueOf(et_query.getText().toString());
studentBiz.delStudent(_id);
DynamicData();
break;
case R.id.bt_update:
if(et_query.getText().toString().equals("")||et_age.getText().toString().equals("")||et_score.getText().toString().equals("")||et_name.getText().toString().equals("")){
break;
}
int _id1 = Integer.valueOf(et_query.getText().toString());
String name1 = et_name.getText().toString();
int age1 = Integer.valueOf(et_age.getText().toString());
int score1 = Integer.valueOf(et_score.getText().toString());
Student stu_update = new Student(_id1, name1, age1, score1);
studentBiz.updateStudent(stu_update);
if(studentBiz.updateStudent(stu_update)==0){
break;
}
DynamicData();
break;
case R.id.bt_query:
if(et_query.getText().toString().equals("")){
break;
}
int id2 = Integer.valueOf(et_query.getText().toString());
Student stu1 = studentBiz.getStudentById(id2);
if(stu1==null){
Toast.makeText(MainActivity.this, "没有这个学生", Toast.LENGTH_LONG).show();
break;
}
data = new String[] { stu1.toString() };
MakeAdapter();
break;
case R.id.bt_all:
DynamicData();
for (Student stu : stuList) {
Log.i("student", stu.toString());
}
break;
default:
break;
}
}
/**
* 实时刷新数据
*/
private void DynamicData() {
studentBiz = new StudentBiz(MainActivity.this);
stuList = studentBiz.getAllStudents();
SetData();
MakeAdapter();
}
/**
* 设置adapter数据
*/
private void SetData() {
data = new String[stuList.size()];
for (int i = 0; i < data.length; i++) {
data[i] = stuList.get(i).toString();
}
}
/**
* 适配器
*/
private void MakeAdapter() {
adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.item,
R.id.tv_item, data);
lv_adapter.setAdapter(adapter);
}
/**
* 查询所有数据
*/
private void SelectAll() {
studentBiz = new StudentBiz(MainActivity.this);
stuList = studentBiz.getAllStudents();
for (Student stu : stuList) {
Log.i("student", stu.toString());
}
}
}