Android项目中如何在一个数据库里建立多张表
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,Android项目中如何在一个数据库里建立多张表,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一,创建一个公共的DBAd
千家信息网最后更新 2025年02月01日Android项目中如何在一个数据库里建立多张表
Android项目中如何在一个数据库里建立多张表,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
一,创建一个公共的DBAdapter;
为了在整个程序运行期间调用该公共的数据库,我们定义了一个扩展自Application的CommDB类:
1,创建唯一的数据库:
1 public class CommDB { 2 3 public static final String DATABASE_NAME = "myDatabase"; //数据库名称 4 5 public static final int DATABASE_VERSION = 1; 6 //创建该数据库下学生表的语句 7 private static final String CREATE_TABLE_Students = 8 "CREATE TABLE if not exists " + StudentDB.SQLITE_TABLE + " (" + 9 StudentDB.KEY_ROWID + " integer PRIMARY KEY autoincrement," +10 StudentDB.KEY_AGE + "," +11 StudentDB.KEY_GENDER + "," +12 StudentDB.KEY_NAME + "," +13 " UNIQUE (" + StudentDB.KEY_NAME +"));";//暂时规定不能重名14 //创建该数据库下教师表的语句15 private static final String CREATE_TABLE_Teachers =16 "CREATE TABLE if not exists " + TeacherDB.SQLITE_TABLE + " (" +17 TeacherDB.KEY_ROWID + " integer PRIMARY KEY autoincrement," +18 TeacherDB.KEY_AGE + "," +19 TeacherDB.KEY_GENDER + "," +20 TeacherDB.KEY_NAME + "," +21 " UNIQUE (" + TeacherDB.KEY_AGE +"));";22 private final Context context; 23 private DatabaseHelper DBHelper;24 private SQLiteDatabase db;25 /**26 * Constructor27 * @param ctx28 */29 public CommDB(Context ctx)30 {31 this.context = ctx;32 this.DBHelper = new DatabaseHelper(this.context);33 }34 35 private static class DatabaseHelper extends SQLiteOpenHelper 36 {37 DatabaseHelper(Context context) 38 {39 super(context, DATABASE_NAME, null, DATABASE_VERSION);40 }41 42 @Override43 public void onCreate(SQLiteDatabase db) 44 {45 db.execSQL(CREATE_TABLE_Students);//创建学生表46 db.execSQL(CREATE_TABLE_Teachers);//创建教师表 47 }48 49 @Override50 public void onUpgrade(SQLiteDatabase db, int oldVersion, 51 int newVersion) 52 { 53 // Adding any table mods to this guy here54 }55 } 56 57 /**58 * open the db59 * @return this60 * @throws SQLException61 * return type: DBAdapter62 */63 public CommDB open() throws SQLException 64 {65 this.db = this.DBHelper.getWritableDatabase();66 return this;67 }68 69 /**70 * close the db 71 * return type: void72 */73 public void close() 74 {75 this.DBHelper.close();76 }77 }
2,在app开始运行时,创建上述的数据库,并创建对应的数据表:
1 public class GApplication extends Application { 2 private CommDB comDBHelper; 3 4 @Override 5 public void onCreate() { 6 // TODO Auto-generated method stub 7 super.onCreate(); 8 comDBHelper = new CommDB(this); 9 comDBHelper.open();10 }11 12 }
二,分别创建对应的数据表;
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); } @Overridepublic void onCreate(SQLiteDatabase db) { } @Overridepublic 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 ArrayListfetchAll() { ArrayList allTicketsList = new ArrayList (); 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); } @Overridepublic void onCreate(SQLiteDatabase db) {// Log.w(TAG, DATABASE_CREATE);// db.execSQL(DATABASE_CREATE); } @Overridepublic 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() { }// 扫描时进行判断本地数据库是否有此ticketIDpublic ArrayListfetchAll() { ArrayList allTeacherList = new ArrayList (); 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 stList = new ArrayList();private List trList = new ArrayList(); @Overrideprotected 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()); } }
@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();if (studentDB != null) { studentDB.close(); }if (teacherDB != null) { teacherDB.close(); } } @Overridepublic 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()方法中调用。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
数据
数据库
字段
学生
数据表
多张
项目
例子
名称
师表
年龄
语句
阿武
小铃
帮助
运行
清楚
事项
内容
实体
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全指挥平台建设指南
实验设备管理数据库系统
mysql 数据库部署
山西省网络安全资质
统计局网络安全自评报告
数据库技术发展的现状和趋势
冠县软件开发教学平台教学视频
泗阳环保网络技术
网络安全提示14个字
集客网络技术支撑职责
数据库的表设计功能怎么用
服务器安全缺陷
建筑工程安全隐患数据库
2018数据库技术笔记
创建数据库表存哪里
数据库中性别的字段类型
软件开发是带u还是带h的好
亚马逊海外购服务器
辽阳太阳线软件开发多少钱
至少包括数据库
购买服务器实机器
微医网络安全工作年度会
软件工程软件开发需求
松江区品牌软件开发诚信合作
天津免备案虚拟主机空间服务器
软件开发银行外包前景
带数据库的套料软件
从事数据库工作
数据库distinct
广东调度服务器安装虚拟主机