从SQLite

时间:2018-03-26 10:54:56

标签: java android sqlite calculated-columns calculation

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

首先,我想让客户输入一些REAL数据,然后在后台计算并将新数据放到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);



}

我有一个Serializable类,我试图计算这个类中的数据。

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;

}

但是,我不知道如何将计算出的数据检索回文本视图。

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

  

还有什么是计算Java代码中数据的最简单方法   并把它放回专栏?

什么都不做(即在提取数据时计算值并减少数据库中存储的数据量)

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

假设表格(称为 myproducts )填充如下(请注意,不需要PRODUCT_TOTAL_PRICE列): -

enter image description here

然后使用查询提取它: -

SELECT 
    _ID,
    PRODUCT_NAME, 
    PRODUCT_WIDTH, 
    PRODUCT_LENGTH, 
    PRODUCT_PRICE, 
    (PRODUCT_WIDTH * PRODUCT_LENGTH * PRODUCT_PRICE)/1000 AS CALCULATED_TOTAL_PRICE
FROM myproducts;

将导致: -

enter image description here

您可以在数据库助手中使用方法,例如: -

    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与上面的示例类似。但是,只需要一列。
  

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

以下内容: -

yourTextView.setText(String.valueOf(yourDBHelperInstance.getTotalpriceBtId(ID_OF_THE PRODUCT)));

或者也许: -

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

答案 1 :(得分:0)

无需创建两个表 将值插入表后,您只需通过以下查询

创建一个函数

从yourtablename中选择sum(您的列名),其中条件是您过滤数据的条件。