android DataBase的相关操作(建立表结构和创建表)
来源:互联网 发布:win10引导centos双系统 编辑:程序博客网 时间:2024/05/04 22:09
先建立一个table的基类:
public abstract class DbBaseTable { private static final String TAG = "DbBaseTable"; /** * @return the DB table name */ abstract String getName(); /** * Creates the DB table according to the DB scheme * * @param db */ abstract void onCreate(SQLiteDatabase db); void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion, String tempName) { } void joinColumns(SQLiteDatabase db, String tempName, String tableName) { DbUtils.joinColumns(db, tempName, tableName); }}
我们通过这种方式来建立表:
public final class DataBaseClass { private DataBaseClass() {}; public static final int DB_VERSION = 2; static final String DB_FILE = "my.db";<strong>//这里放公共的字段</strong> public interface RCMColumns { public static final String account_ID = "account_id"; //INTEGER (long) } public static final class MyTest1Table extends DbBaseTable implements BaseColumns, RCMColumns {private MyTest1Table() {}private static final MyTest1Table sInstance = new MyTest1Table();static MyTest1Table getInstance() {return sInstance;}private static final String TABLE_NAME = "Mytest1";/* Columns */public static final String TEST1 = "test1";public static final String TEST2 = "test2";public static final String TEST3= "test3";private static final String CREATE_TABLE_STMT = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + account_ID + " INTEGER, " + TEST1 + " TEXT, "//+ TEST2 + " TEXT, "+ TEST3 + " TEXT"+ ");";@OverrideString getName() {return TABLE_NAME;}@Overridevoid onCreate(SQLiteDatabase db) {db.execSQL(CREATE_TABLE_STMT);}} public static final class MyTest2Table extends DbBaseTable implements BaseColumns, RCMColumns {private MyTest2Table() {}private static final MyTest2Table sInstance = new MyTest2Table();static MyTest2Table getInstance() {return sInstance;}private static final String TABLE_NAME = "Mytest2";/* Columns */public static final String TEST4 = "test4";public static final String TEST5= "test5";public static final String TEST6= "test6";private static final String CREATE_TABLE_STMT = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + account_ID + " INTEGER, " + TEST4 + " TEXT, "+ TEST5 + " TEXT, "+ TEST6 + " TEXT"+ ");";@OverrideString getName() {return TABLE_NAME;}@Overridevoid onCreate(SQLiteDatabase db) {db.execSQL(CREATE_TABLE_STMT);}} static LinkedHashMap<String, DbBaseTable> sRCMDbTables = new LinkedHashMap<String, DbBaseTable>(); static { sRCMDbTables.put(MyTest1Table.getInstance().getName(), MyTest1Table.getInstance()); // sRCMDbTables.put(MyTest2Table.getInstance().getName(), MyTest2Table.getInstance()); }}
android一些SQL语句的执行得依靠,SQLiteOpenHelper这个类,
我们来建立一个这类的子类:
final class DbHelper extends SQLiteOpenHelper { private static final String TAG = "[RC]RCMDbHelper"; private static final String TEMP_SUFFIX = "_temp_"; private SQLiteDatabase db_r = null; // readable database private SQLiteDatabase db_w = null; // writable database private static DbHelper dbHelper; private DbHelper(Context context) { <strong> super(context, DataBaseClass.DB_FILE, null, DataBaseClass.DB_VERSION);</strong> } public static synchronized DbHelper getInstance(Context context) { if (dbHelper == null) { dbHelper = new DbHelper(context); } return dbHelper; } @Override public void onCreate(SQLiteDatabase db) { <strong> Collection<DbBaseTable> tables = DataBaseClass.sRCMDbTables.values(); Iterator<DbBaseTable> iterator = tables.iterator(); System.out.println("====DBHelp oncreate"); try { db.beginTransaction(); while (iterator.hasNext()) { iterator.next().onCreate(db); } db.setTransactionSuccessful(); } catch (Throwable e) { //TODO Implement proper error handling throw new RuntimeException("DB creation failed: " + e.getMessage()); } finally { db.endTransaction(); }</strong> } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } private String getTempTableName(String tableName, Collection<String> oldTableNames, Set<String> newTableNames) { String temp_name_base = tableName + TEMP_SUFFIX; if (!oldTableNames.contains(temp_name_base) && !newTableNames.contains(temp_name_base)) { return temp_name_base; } Random random = new Random(); String temp_name; for (;;) { temp_name = temp_name_base + random.nextInt(); if (!oldTableNames.contains(temp_name) && !newTableNames.contains(temp_name)) { return temp_name; } } } @Override public synchronized SQLiteDatabase getReadableDatabase() { if (db_r == null || !db_r.isOpen()) { try { <strong>db_r = super.getReadableDatabase();</strong> } catch (SQLiteException e) { //TODO Implement proper error handling db_r = null; throw e; } } return db_r; } @Override public synchronized SQLiteDatabase getWritableDatabase() { if (db_w == null || !db_w.isOpen() || db_w.isReadOnly()) { try { <strong> db_w = super.getWritableDatabase();</strong> } catch (SQLiteException e) { //TODO Implement proper error handling db_w = null; throw e; } } return db_w; }}
0 0
- android DataBase的相关操作(建立表结构和创建表)
- 双向链表的创建和相关操作
- 双向链表的创建和相关操作
- mysql 创建数据库和表的相关操作
- 编程实现顺序存储结构和链式存储结构线性表的建立、查找、插入、删除等基本操作
- 3.mysql的中文问题,database级操作,表级操作,数据CRUD,分组操作,时间和日期,字符串相关函数,表的约束
- 父子表建立以及相关操作
- Oracle 表相关创建操作
- C++二叉树结构的建立和操作
- Standby database的建立、使用和维护
- 链表的创建和相关操作(Linux下Vim编制)
- 建立图的存储结构 :邻接表 和 邻接矩阵
- 使用sqlite3.exe建立数据库和表结构的方法
- Oracle Database的基本操作——创建表空间,用户,授权。。。
- Oracle Database的基本操作——创建表、列重命名。。。
- C++中栈结构建立和操作
- Oracle创建用户与表空间的相关操作
- 关于mybatis动态创建数据库表的相关操作
- 广语言用一个字的用意
- 机房重构包图(从三层+实体到三层+实体+外观+工厂+接口+SQLHelper)
- Matlab 中step conv 函数使用
- 浅析error LNK2001: unresolved external symbol
- jsp获取本地IP
- android DataBase的相关操作(建立表结构和创建表)
- Friends+uva+并查集
- LTE TDD和FDD介绍
- 计算机中浮点数的表示
- 编程珠玑中关于一个单词的所有变位词的解决
- POJ(1068)(模拟)(栈)思想
- Primes on Interval+codeforces+筛选法打表
- PHP调试环境之:Eclipse for PHP
- 数值类型转换的小技巧