Java 用SQLite进行计算

Java 用SQLite进行计算,java,android,sqlite,calculated-columns,calculation,Java,Android,Sqlite,Calculated Columns,Calculation,我正在尝试创建两个SQLite表,一个用于输入数据,另一个用于检索计算数据 首先,我想让客户端输入一些真实数据,然后在后台进行计算,并将新数据放入textview 现在,我试图从一个表中检索它 @Override public void onCreate(SQLiteDatabase db) { String sSQL; sSQL = "CREATE TABLE " + DataContract.TABLE_NAME + "(" +

我正在尝试创建两个SQLite表,一个用于输入数据,另一个用于检索计算数据

首先,我想让客户端输入一些真实数据,然后在后台进行计算,并将新数据放入textview

现在,我试图从一个表中检索它

    @Override
public void onCreate(SQLiteDatabase db) {


    String sSQL;

    sSQL = "CREATE TABLE " + DataContract.TABLE_NAME +
            "(" +
            DataContract.Columns._ID + " INTEGER PRIMARY KEY NOT NULL, " +
            DataContract.Columns.PRODUCT_NAME + " TEXT, " +
            DataContract.Columns.PRODUCT_WIDTH + " REAL, " +
            DataContract.Columns.PRODUCT_LENGHT+ " REAL, " +
            DataContract.Columns.PRODUCT_PRICE+ " REAL, " +


   //This is the data I want to calculate and put to a textview in a 
   //new intent

   DataContract.Columns.PRODUCT_TOTAL_PRICE + " REAL)"; 




    Log.d(TAG,sSQL);

    db.execSQL(sSQL);



}
我有一个可序列化的类,我试图计算这个类中的数据

private final String ProductName;
private final double ProductLenght;
private final double ProductWidth;
private final double ProductPrice;
private final double ProductTotalPrice;
然后我尝试用getter方法计算数据

public double getProductTotalPrice() {

    return (getProductWidth() * getProductLenght() * getProductPrice())/1000;

}
但是,我不知道如何将检索到的计算数据放回textview

我应该创建两个表还是一个表就足以执行此操作

还有,在Java代码中计算数据并将其放回列的最简单方法是什么

谢谢大家!

在Java代码中计算数据最简单的方法是什么 然后把它放回一列

不执行任何操作(即提取数据时计算值,并减少数据库中存储的数据量)

为计算值添加另一列将是一种浪费,因为您可以在提取数据(到光标中)时计算值,例如:-

假设该表(称为myproducts)按如下方式填充(注意不需要产品总价格列):-

然后使用查询将其提取:-

SELECT 
    _ID,
    PRODUCT_NAME, 
    PRODUCT_WIDTH, 
    PRODUCT_LENGTH, 
    PRODUCT_PRICE, 
    (PRODUCT_WIDTH * PRODUCT_LENGTH * PRODUCT_PRICE)/1000 AS CALCULATED_TOTAL_PRICE
FROM myproducts;
将导致:-

在数据库帮助器中可以有一个方法,例如:-

    public double Cursor getTotalpriceBtId(long id) {
        double rv = 0;
        String column_name = "totalprice";
        String calculation = "(" +
            DataContract.Columns.PRODUCT_WIDTH + " * " +
            DataContract.Columns.PRODUCT_LENGHT + " * " +
            DataContract.Columns.PRODUCT_PRICE + ")/1000";
        String[] columns = new String[]{calculation + " AS " + column_name};
        String whereclause = DataContract.Columns._ID + "=?";
        String[] whereargs = new String[]{String.valueOf(id)};
        Cursor csr = this.getWritableDatabase().query(
            DataContract.TABLE_NAME,
            columns,
            whereclause,
            whereargs,
            null,null,null
        );
        if (csr.moveToFirst) {
            rv = csr.getDouble(csr.getColumnIndex(column_name));
        }
        csr.close();
        return rv;
    }
  • 底层SQL与上面的示例类似。但是,只需要一列
但是,我不知道如何将检索到的计算数据放回计算机 文本视图

大致如下:-

yourTextView.setText(String.valueOf(yourdhelperinstance.getTotalpriceBtId(产品的ID))

或许:-

yourTextView.setText(String.valueOf(yourproduct.getProductTotalPrice()));

不需要创建两个表 将值插入表后,只需通过下面的查询创建一个函数

从TableName中选择sum(您的列名),根据该条件筛选数据。

太好了。但这:
(产品宽度*产品长度*产品价格)*.001作为计算的产品总价格
会稍微快一些(因为乘法比除法快)。因此,乘以预先计算的逆运算速度更快。