【发布时间】:2016-11-16 05:53:15
【问题描述】:
我正在重新设计我一直在编写的应用程序,为此我目前将表定义分成不同的接口,每个表一个,然后是整个数据库的整体接口。
这样做时,我在整个界面中有一些常用常量,它们在表格界面中使用。总体而言,接口还利用了表接口中的常量。
我已经使用它编译并成功运行了一个应用程序(基本上是无处不在的 Hello World 应用程序,只需要额外的两行代码),一切看起来都很好。我真的很惊讶这个编译。
基本上,我是不是走上了一条注定会出问题的路。
这是一些示例代码:-
接口 DBAislesTableConstants 注意!减少到只有 1 行
import static mjt.shopwise.DBConstants.DEFAULTORDER;
import static mjt.shopwise.DBConstants.IDTYPE;
import static mjt.shopwise.DBConstants.INT;
import static mjt.shopwise.DBConstants.PERIOD;
import static mjt.shopwise.DBConstants.STD_ID;
import static mjt.shopwise.DBConstants.TXT;
public interface DBAislesTableConstants {
String AISLES_ID_COL = STD_ID;
String AISLES_ID_COL_FULL = AISLES_TABLE +
PERIOD +
AISLES_ID_COL;
String AISLES_ALTID_COL = AISLES_TABLE + STD_ID;
String AISLES_ALTID_COL_FULL = AISLES_TABLE +
PERIOD +
AISLES_ALTID_COL;
String AISLES_ID_TYPE = IDTYPE;
Boolean AISLES_ID_PRIMARY_INDEX = true;
DBColumn AISLESIDCOL = new DBColumn(AISLES_ID_COL,
AISLES_ID_TYPE,
AISLES_ID_PRIMARY_INDEX,
""
);
ArrayList<DBColumn> AISLESCOLS = new ArrayList<>(Arrays.asList(AISLESIDCOL));
DBTable AISLESTABLE = new DBTable(AISLES_TABLE,AISLESCOLS);
}
DBColum 和 DBTable 是已定义的类,它们的方法用于构建我将可以使用的内部架构,用于创建和更新实际数据库。
接口DBConstants是:-
import java.util.ArrayList;
import java.util.Arrays;
import static mjt.shopwise.DBAislesTableConstants.AISLESTABLE;
import static mjt.shopwise.DBProductsTableConstants.PRODUCTSTABLE;
import static mjt.shopwise.DBShopsTableConstants.SHOPSTABLE;
interface DBConstants {
String DATABASE_NAME = "ShopWise";
String STD_ID = "_id";
String PERIOD = ".";
String INT = "INTEGER";
String TXT = "TEXT";
String IDTYPE = INT;
String DEFAULTORDER = "1000";
ArrayList<DBTable> SHOPWISETABLES = new ArrayList<>(Arrays.asList(
AISLESTABLE));
DBDatabase SHOPWISE = new DBDatabase(DATABASE_NAME,SHOPWISETABLES);
}
DBDatabase 是为整个数据库定义的类,例如下面我使用 generateExportSchemaSQL 方法。
为了测试这一点,我使用了以下内容,它创建了 SQL 来创建所有表(运行这个并将 SQL 放入 SQLite 管理器并创建表)。 stophere 只是用作断点,因此我可以检查和复制 SQL。
String sql = DBConstants.SHOPWISE.generateExportSchemaSQL();
int stophere = 0;
【问题讨论】:
-
一些问题:您的接口只定义常量值,对吗?以及,您期待什么问题?
-
是的,只有常量。我担心的是相互引用可能会导致问题,尽管从一个小测试来看,这样做似乎是可以的。例如,DBAislesTableConstants 使用来自 DBConstants 的值,反之亦然(将有 7 个 DB???TablesConstants,每个都从 DBConstants 获取值,迄今为止已完成 3 个)。
标签: java android sqlite interface