一,创建一个公共的DBAdapter;

为了在整个程序运行期间调用该公共的数据库,我们定义了一个扩展自Application的CommDB类:

1,创建唯一的数据库:

 public class CommDB {

     public static final String DATABASE_NAME = "myDatabase"; //数据库名称

     public static final int DATABASE_VERSION = 1;
//创建该数据库下学生表的语句
private static final String CREATE_TABLE_Students =
"CREATE TABLE if not exists " + StudentDB.SQLITE_TABLE + " (" +
StudentDB.KEY_ROWID + " integer PRIMARY KEY autoincrement," +
StudentDB.KEY_AGE + "," +
StudentDB.KEY_GENDER + "," +
StudentDB.KEY_NAME + "," +
" UNIQUE (" + StudentDB.KEY_NAME +"));";//暂时规定不能重名
//创建该数据库下教师表的语句
private static final String CREATE_TABLE_Teachers =
"CREATE TABLE if not exists " + TeacherDB.SQLITE_TABLE + " (" +
TeacherDB.KEY_ROWID + " integer PRIMARY KEY autoincrement," +
TeacherDB.KEY_AGE + "," +
TeacherDB.KEY_GENDER + "," +
TeacherDB.KEY_NAME + "," +
" UNIQUE (" + TeacherDB.KEY_AGE +"));";
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
/**
* Constructor
* @param ctx
*/
public CommDB(Context ctx)
{
this.context = ctx;
this.DBHelper = new DatabaseHelper(this.context);
} private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
} @Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(CREATE_TABLE_Students);//创建学生表
db.execSQL(CREATE_TABLE_Teachers);//创建教师表
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
// Adding any table mods to this guy here
}
} /**
* open the db
* @return this
* @throws SQLException
* return type: DBAdapter
*/
public CommDB open() throws SQLException
{
this.db = this.DBHelper.getWritableDatabase();
return this;
} /**
* close the db
* return type: void
*/
public void close()
{
this.DBHelper.close();
}
}

2,在app开始运行时,创建上述的数据库,并创建对应的数据表:

 public class GApplication extends Application {
private CommDB comDBHelper; @Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
comDBHelper = new CommDB(this);
comDBHelper.open();
} }

二,分别创建对应的数据表;

1,建立学生数据表类:

public class StudentDB {
public static final String KEY_ROWID = "_id";
public static final String KEY_AGE = "age";
public static final String KEY_GENDER = "gender";
public static final String KEY_NAME = "name"; private static final String TAG = "StudentDbAdapter";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb; // private static final String DATABASE_NAME = "Fortrun_Ticket11";
static final String SQLITE_TABLE = "StudentTable"; private final Context mCtx; private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, CommDB.DATABASE_NAME, null, CommDB.DATABASE_VERSION);
} @Override
public void onCreate(SQLiteDatabase db) { } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + SQLITE_TABLE);
onCreate(db);
}
} public StudentDB(Context ctx) {
this.mCtx = ctx;
} public StudentDB open() throws SQLException { mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
} public void close() {
if (mDbHelper != null) {
mDbHelper.close();
}
} /**
* 创建学生表的字段
* @param age
* @param gender
* @param name
* @return
*/
public long createStudent(String age, String gender, String name) {
long createResult = 0;
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_AGE, age);
initialValues.put(KEY_GENDER, gender);
initialValues.put(KEY_NAME, name);
try {
createResult = mDb.insert(SQLITE_TABLE, null, initialValues);
} catch (Exception e) {
// TODO: handle exception
}
return createResult;
} /**
* 删除表的全部字段数据
* @return
*/
public boolean deleteAllStudents() {
int doneDelete = 0;
try {
doneDelete = mDb.delete(SQLITE_TABLE, null, null);
Log.w(TAG, Integer.toString(doneDelete));
Log.e("doneDelete", doneDelete + "");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return doneDelete > 0;
} /**
* 根据名称删除表中的数据
* @param name
* @return
*/
public boolean deleteTicketByName(String name) {
int isDelete;
String[] tName;
tName = new String[] { name };
isDelete = mDb.delete(SQLITE_TABLE, KEY_AGE + "=?", tName);
Log.e("deleteTicket", "isDelete:" + isDelete + "||" + "ticketID="
+ name);
return isDelete > 0;
}
public void insertSomeTickets() { } /**
* 获取表中的所有字段
* @return
*/
public ArrayList<Student> fetchAll() { ArrayList<Student> allTicketsList = new ArrayList<Student>();
Cursor mCursor = null;
mCursor = mDb.query(SQLITE_TABLE, new String[] { KEY_ROWID, KEY_AGE,
KEY_GENDER, KEY_NAME }, null, null, null, null, null);
if (mCursor.moveToFirst()) {
do {
Student st = new Student();
st.setAge(mCursor.getString(mCursor
.getColumnIndexOrThrow(KEY_AGE)));
st.setGender(mCursor.getString(mCursor
.getColumnIndexOrThrow(KEY_GENDER)));
st.setName(mCursor.getString(mCursor
.getColumnIndexOrThrow(KEY_NAME)));
allTicketsList.add(st);
} while (mCursor.moveToNext());
}
if (mCursor != null && !mCursor.isClosed()) {
mCursor.close();
}
return allTicketsList;
} }

2,创建教师数据表类:

public class TeacherDB {
public static final String KEY_ROWID = "_id";
public static final String KEY_AGE = "age";
public static final String KEY_GENDER = "gender";// 还要保留
public static final String KEY_NAME = "name"; private static final String TAG = "TeacherDbAdapter";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb; // private static final String DATABASE_NAME = "Fortrun_Ticket11";
static final String SQLITE_TABLE = "TeacherTable";
private static final int DATABASE_VERSION = 1; private final Context mCtx; private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, CommDB.DATABASE_NAME, null, CommDB.DATABASE_VERSION);
} @Override
public void onCreate(SQLiteDatabase db) {
// Log.w(TAG, DATABASE_CREATE);
// db.execSQL(DATABASE_CREATE);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + SQLITE_TABLE);
onCreate(db);
}
} public TeacherDB(Context ctx) {
this.mCtx = ctx;
} public TeacherDB open() throws SQLException { mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
} public void close() {
if (mDbHelper != null) {
mDbHelper.close();
}
} public long createTeacher(String age, String gender, String name) {
long createResult = 0;
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_AGE, age);
initialValues.put(KEY_GENDER, gender);
initialValues.put(KEY_NAME, name);
try {
createResult = mDb.insert(SQLITE_TABLE, null, initialValues);
} catch (Exception e) {
// TODO: handle exception
}
return createResult;
} public boolean deleteAllTeachers() {
int doneDelete = 0;
try {
doneDelete = mDb.delete(SQLITE_TABLE, null, null);
Log.w(TAG, Integer.toString(doneDelete));
Log.e("doneDelete", doneDelete + "");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return doneDelete > 0;
} public boolean deleteTeacherByName(String name) {
int isDelete;
String[] tName;
tName = new String[] { name };
isDelete = mDb.delete(SQLITE_TABLE, KEY_AGE + "=?", tName);
Log.e("deleteTicket", "isDelete:" + isDelete + "||" + "ticketID="
+ name);
return isDelete > 0;
}
public void insertSomeTickets() { } // 扫描时进行判断本地数据库是否有此ticketID
public ArrayList<Teacher> fetchAll() { ArrayList<Teacher> allTeacherList = new ArrayList<Teacher>();
Cursor mCursor = null;
mCursor = mDb.query(SQLITE_TABLE, new String[] { KEY_ROWID, KEY_AGE,
KEY_GENDER, KEY_NAME }, null, null, null, null, null);
if (mCursor.moveToFirst()) {
do {
Teacher st = new Teacher();
st.setAge(mCursor.getString(mCursor
.getColumnIndexOrThrow(KEY_AGE)));
st.setGender(mCursor.getString(mCursor
.getColumnIndexOrThrow(KEY_GENDER)));
st.setName(mCursor.getString(mCursor
.getColumnIndexOrThrow(KEY_NAME)));
allTeacherList.add(st);
} while (mCursor.moveToNext());
}
if (mCursor != null && !mCursor.isClosed()) {
mCursor.close();
}
return allTeacherList;
} }

三,调用public class ShowActivity extends Activity {

private StudentDB studentDB;
private TeacherDB teacherDB;
private List<Student> stList = new ArrayList<Student>();
private List<Teacher> trList = new ArrayList<Teacher>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
studentDB = new StudentDB(this);
studentDB.open(); teacherDB = new TeacherDB(this);
teacherDB.open(); studentDB.createStudent("28", "男", "阿武");
studentDB.createStudent("24", "女", "小铃"); teacherDB.createTeacher("40", "男", "何SIR");
teacherDB.createTeacher("45", "女", "MRS谢");
stList = studentDB.fetchAll();
trList = teacherDB.fetchAll();
for (int i = 0; i < stList.size(); i++) {
Log.e("stList value", stList.get(i).getName());
}
for (int i = 0; i < trList.size(); i++) {
Log.e("trList value", trList.get(i).getName());
}
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (studentDB != null) {
studentDB.close();
}
if (teacherDB != null) {
teacherDB.close();
}
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.show, menu);
return true;
} }

四,结果验证;

10-25 16:50:10.321: E/stList value(3953): 阿武
10-25 16:50:10.321: E/stList value(3953): 小铃
10-25 16:50:10.321: E/trList value(3953): 何SIR
10-25 16:50:10.321: E/trList value(3953): MRS谢

五,注意事项:

此例子中插入数据库的数据是以年龄作为唯一字段,当插入的数据中,年龄字段有重复时,数据库会报错,此例子只为说明如何在一个数据库中建立多张表,因此,在实际项目中,一般以某个实体的ID作为唯一字段,且插入前必须经过判断;

另外,数据库的关闭,我们选择在onDestroy()方法中调用。

Android项目中,在一个数据库里建立多张表的更多相关文章

  1. XamarinSQLite教程在Xamarin.Android项目中提取数据库文件

    XamarinSQLite教程在Xamarin.Android项目中提取数据库文件 由于不能直接打开该文件,开发者需要先将数据库文件从Android系统中提取出来.操作步骤如下. (5)选择MyDoc ...

  2. XamarinSQLite教程在Xamarin.Android项目中定位数据库文件

    XamarinSQLite教程在Xamarin.Android项目中定位数据库文件 实际开发中,经常需要验证数据库操作的正确性.这个时候,需要打开数据库文件,进行确认.下面是如何找到MyDocumen ...

  3. XamarinSQLite教程在Xamarin.Android项目中使用数据库

    XamarinSQLite教程在Xamarin.Android项目中使用数据库 在Xamarin.Android项目中使用预设数据库的具体操作步骤如下: (1)创建一个Xamarin.Android项 ...

  4. Android项目中如何用好构建神器Gradle?(转)

    最近在忙团队并行开发的事情,主要是将各个团队的代码分库,一方面可以降低耦合,为后面模块插件化做铺垫,另一方面采用二进制编译,可以加快编译速度.分库遇到了一些问题,很多都要通过Gradle脚本解决,所以 ...

  5. 在Android项目中使用Java8

    前言 在过去的文章中我介绍过Java8的一些新特性,包括: Java8新特性第1章(Lambda表达式) Java8新特性第2章(接口默认方法) Java8新特性第3章(Stream API) 之前由 ...

  6. Android 项目中文件夹的说明与作用(转)

    (转自:http://blog.csdn.net/goodshot/article/details/11529731) Android 项目中文件夹的作用 1. src:存放所有的*.java源程序. ...

  7. 对Android项目中的文件夹进行解释

    对Android项目中的文件夹进行解释: · src:里面存放的是Activity程序,或者是以后的其他组件,在此文件夹之中建立类的时候一定要注意,包名称不能是一级. · gen:此文件夹中的内容是自 ...

  8. android项目中如何加载已有so库 <转>

    1,在项目根目录下建立文件夹libs/armeabi文件夹 2,将so库放入 libs/armeabi文件夹 注意事项: 1,如果采用静态注册的方式请注意C文件中严格按照命名规则 Java_packa ...

  9. android项目中刷新activity界面

    android项目中在sqlite数据库插入/更新/删除数据后: 1. 刷新当前activity界面数据(手动刷新): 在activity类下新增一个refresh()方法: /** * 刷新, 这样 ...

随机推荐

  1. P1907飞扬的小鸟

    P1907飞扬的小鸟 描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或 ...

  2. vb小菜一枚--------早期绑定和后期绑定

    早期绑定和后期绑定 Visual Studio 2005   其他版本   将对象分配给对象变量时,Visual Basic 编译器会执行一个名为 binding 的进程.如果将对象分配给声明为特定对 ...

  3. bzoj 3718

    题意:戳这里 思路:很容易发现对于一个车能否移动到最终的位置只要判断路径中得最大高度与自身高端之和是否>w即可. 那么就可以转化为逆序对得最大数问题..即对于每一辆车,判断有那些最初在他前面,而 ...

  4. halcon读取一张照片,并转化为灰度图像

    dev_close_window () read_image (Image, 'E:/图片/123.jpg') get_image_size (Image, Width, Height) dev_op ...

  5. iOS开发-NSOperation与GCD区别

    Mac OS X 10.6及iOS4.0之后导入了可以使全体线程更高效运行,并且使并行处理应用更易开发的架构,GCD(Grand Central  Dispatch),同时引入的还有Run Loop, ...

  6. SELECT TOP 100 PERCENT 不按后面的order by 排序

    项目中,由于需要把3个状态的任务合并显示,并且按照任务由近及远的顺序排序,类似于下面的语句 order by taskid desc )m union all order by taskid desc ...

  7. ubuntu共享文件配置

    目标:实现windows和linux混合组成的操作 系统中可以共享文件,并可以通过机器名互相访问 安装文件共享服务 0.更改本机主机名,修改 /etc/hostname文件和/etc/hosts文件中 ...

  8. Xamarin.Android经验之谈

    1.Fragment如何做到显示才加载数据 有些界面我们会采用套用多个Fragment来显示的效果,但是我们不会在一显示这个活动的时候就把所有的Fragment加载并加载数据,而是会让显示出来的Fra ...

  9. 【重磅推荐】腾讯Bugly2015年移动应用质量大数据报告

    2015年,随着移动智能设备的普及,移动端用户的增速明显放缓:相比之下,由于云服务.众筹平台.推广平台等基础设施和服务的不断改善,极大降低了创业的门槛,越来越多人投身于移动应用的创新创业中. 想让用户 ...

  10. 《IO 系统性能》笔记

    近期项目中涉及和别人谈存储架构及选型,将IOPS相关的内容学习下.参考网上资料<IO 系统性能之一:衡量性能的几个指标> 1. 基本概念 1)读写IO操作:对应磁盘的存数据.取数据: 2) ...