日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android项目中,在一个数据库里建立多张表

發布時間:2025/3/15 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 * Constructor 27 * @param ctx 28 */ 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 @Override 43 public void onCreate(SQLiteDatabase db) 44 { 45 db.execSQL(CREATE_TABLE_Students);//創建學生表 46 db.execSQL(CREATE_TABLE_Teachers);//創建教師表 47 } 48 49 @Override 50 public void onUpgrade(SQLiteDatabase db, int oldVersion, 51 int newVersion) 52 { 53 // Adding any table mods to this guy here 54 } 55 } 56 57 /** 58 * open the db 59 * @return this 60 * @throws SQLException 61 * return type: DBAdapter 62 */ 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: void 72 */ 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 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);}@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 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>();@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());}}
@Override
protected 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()方法中調用。

轉載于:https://www.cnblogs.com/crashmaker/p/3368812.html

總結

以上是生活随笔為你收集整理的Android项目中,在一个数据库里建立多张表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色婷婷a | 美女福利影院 | 日本亚洲欧洲色 | 久久精品视频99 | 国产精品久久久久久久久免费 | japanesehdxxxx | 99国产精品久久久久久久久久久 | 国产成人无码AA精品区 | 国产精品久久久久久久久久久久久 | 少妇精品一区二区 | 久久久国际精品 | 欧美福利电影 | 日本人jizz | 美女视频污 | 国产91免费观看 | 性无码专区无码 | 国产一级视频免费观看 | 亚洲a视频 | 狠狠躁日日躁夜夜躁2022麻豆 | 亚洲专区一区 | 免费在线播放毛片 | 麻豆日产六区 | 亚洲熟妇色自偷自拍另类 | 欧美级毛片 | 欧美老女人性生活 | 一区二区在线免费观看 | 国产美女视频免费观看下载软件 | 亚洲色成人www永久网站 | 另类专区亚洲 | 可以在线观看av的网站 | 成人六区 | 欧美亚洲91 | 五月天久久综合 | 他趴在我两腿中间添得好爽在线看 | 亚洲免费高清 | 天天射天天草 | 免费成人黄色网 | 国产成人在线免费观看视频 | 波多野结衣一区在线 | 在线观看国产黄色 | 一级视频在线观看 | 国产短视频一区 | 在线观看成年人视频 | 午夜精品视频在线观看 | 肉色欧美久久久久久久免费看 | 东京热毛片 | 国产乱淫av麻豆国产免费 | 在线免费成人网 | 欧美精品在线一区二区 | 欧美巨乳美女 | 伊人在线 | 精品无码一区二区三区免费 | 一级香蕉视频在线观看 | 黄色资源在线 | 爽妇网av | 在线观看理论片 | 美女超碰在线 | 日日夜夜噜噜噜 | 亚洲а∨天堂久久精品2021 | 日本午夜激情视频 | 天堂av.com| 欧美成人va | 天天伊人网 | 免费久草视频 | 男生裸体视频 | 69欧美视频 | 天堂av亚洲av国产av电影 | 欧美在线视频网 | 日韩精品免费一区二区 | 久久国产精品波多野结衣av | 国产欧美精品一区二区在线播放 | 国产精品视频看看 | 91青青草视频 | 久久精品色妇熟妇丰满人妻 | 欧美激情第二页 | 人妻精品无码一区二区 | 麻豆啪啪 | chinese精品自拍hd | 久久久久久亚洲av无码专区 | 色哟哟一区二区 | 欧美日韩xxx| 国产三级在线播放 | 国产一区麻豆 | 久久精品www人人爽人人 | 尤物网站在线播放 | 十八禁视频网站在线观看 | 亚洲免费色视频 | 中文在线观看免费网站 | 黄色av免费在线播放 | 中文字幕在线观看视频一区二区 | 午夜福利啪啪片 | 少妇一级免费 | 国产美女极度色诱视频www | www.xxx在线观看 | 国产成年视频 | 国产一区视频免费观看 | 日本黄区免费视频观看 | 一级国产片| 欧洲亚洲综合 |