基于SQLite实现数据录入、后台计算及结果展示的技术咨询
嘿,看你正在搞Android里的SQLite双表存储+计算的功能,我结合你给出的现有代码,整理了一套完整的实现方案,帮你理清思路:
双表设计与实现方案
1. 表结构规划
我按照你的需求拆分了两个表,职责清晰:
- 输入数据表:专门存储客户端提交的REAL类型原始数据,搭配必要的标识字段方便溯源
- 计算结果表:存储后台运算后的结果,通过外键关联输入表,保证数据的关联性
2. 完整建表代码实现
我补全了你代码里省略的部分,同时规范了DataContract的结构:
@Override public void onCreate(SQLiteDatabase db) { // 创建输入数据表 String createInputTableSQL = "CREATE TABLE " + DataContract.InputTable.TABLE_NAME + "(" + DataContract.InputTable._ID + " INTEGER PRIMARY KEY NOT NULL, " + DataContract.InputTable.PRODUCT_NAME + " TEXT NOT NULL, " + DataContract.InputTable.INPUT_VALUE + " REAL NOT NULL, " // 存储客户端输入的REAL数据 + DataContract.InputTable.CREATED_AT + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"; db.execSQL(createInputTableSQL); // 创建计算结果表(带外键关联输入表) String createResultTableSQL = "CREATE TABLE " + DataContract.ResultTable.TABLE_NAME + "(" + DataContract.ResultTable._ID + " INTEGER PRIMARY KEY NOT NULL, " + DataContract.ResultTable.INPUT_DATA_ID + " INTEGER NOT NULL, " // 关联输入表的ID + DataContract.ResultTable.CALCULATED_VALUE + " REAL NOT NULL, " // 存储计算后的结果 + DataContract.ResultTable.CALCULATED_AT + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " + "FOREIGN KEY(" + DataContract.ResultTable.INPUT_DATA_ID + ") REFERENCES " + DataContract.InputTable.TABLE_NAME + "(" + DataContract.InputTable._ID + "))"; db.execSQL(createResultTableSQL); } // 对应的DataContract常量定义 public class DataContract { // 输入数据表的常量 public static class InputTable { public static final String TABLE_NAME = "input_data"; public static final String _ID = "_id"; public static final String PRODUCT_NAME = "product_name"; public static final String INPUT_VALUE = "input_value"; public static final String CREATED_AT = "created_at"; } // 计算结果表的常量 public static class ResultTable { public static final String TABLE_NAME = "calculated_results"; public static final String _ID = "_id"; public static final String INPUT_DATA_ID = "input_data_id"; public static final String CALCULATED_VALUE = "calculated_value"; public static final String CALCULATED_AT = "calculated_at"; } }
3. 核心流程提示
- 客户端输入REAL数据后,先将数据插入
input_data表 - 后台从输入表取出数据完成计算,再把结果插入
calculated_results表,同时关联对应的input_data_id - 展示结果到TextView的示例代码:
// 从结果表获取最新计算结果并展示 SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query( DataContract.ResultTable.TABLE_NAME, new String[]{DataContract.ResultTable.CALCULATED_VALUE}, // 查询条件:获取最新的一条结果 DataContract.ResultTable._ID + " = (SELECT MAX(" + DataContract.ResultTable._ID + ") FROM " + DataContract.ResultTable.TABLE_NAME + ")", null, null, null, null ); if (cursor.moveToFirst()) { double result = cursor.getDouble(cursor.getColumnIndexOrThrow(DataContract.ResultTable.CALCULATED_VALUE)); resultTextView.setText(String.valueOf(result)); } cursor.close(); db.close();
内容的提问来源于stack exchange,提问作者Jefffy
相关产品推荐
相关产品推荐

