2011-02-14 57 views
1

我一直在尋找android開發人員網站的記事本教程,我很困擾兩個領域 - 任何人都可以幫忙嗎?Android SQL - 記事本教程

首先,本教程創建了一個包含3列的數據庫:標識,標題和正文。我想將主體更改爲十進制值。其次,我需要用十進制值填充此列。

所以,當我有正文欄的EditText是正確的設置輸入類型爲「numberDecimal」在佈局xml?是否需要其他更改?

那麼我該如何總結這些列中的值,我是否應該使用某種循環遍歷該列中的每條記錄並將它們加在一起?

如:

int total = 0; 
for(int i = 0; i < mydb.table.NumberOfRows; i++) { 
    total = total + mydb.table.body[i] 
} 

*道歉我甚至不知道,如果一個函數來計算存在或如何訪問一個表的特定部分(我吸在SQL行數和尚未圍繞Java一會兒)

建議將是巨大的!

回答

2

只是改變的EditText視圖的輸入模式爲「numberDecimal」是不夠的,但它是一個良好的開端,所以你可以肯定,你的用戶無法輸入任何非小數字符。

要更改正文列的數據類型,您必須修改用於創建表的create語句。將數據類型從TEXT更改爲REAL,以便正文列可以存儲浮點值。

此外,您不得不調整插入語句,因爲主體列不再是TEXT列。所以你必須將EditText視圖中的字符串轉換成insert語句,然後將它表示爲數值。

總結所有的身體價值,你不需要一個循環,你可以讓數據庫爲你做這個使用sum()total()聚合函數(取決於你的需要)。聲明看起來像這樣。

SELECT sum/total(body) FROM <table name> 

用表名替換<table name>

道歉我甚至不知道,如果一個函數來計算 存在的行數或如何訪問一個表(我吸在SQL和 尚未圍繞Java的一個特定部分 while)

要遍歷數據庫查詢的結果,您不需要知道結果有多少行。作爲查詢的結果,您將得到一個引用查詢返回的行的Cursor對象。要循環這些行,您可以使用以下語句:

Cursor cursor = queryDB(.......) 

while(cursor.moveToNext()){ 
    <do something with the current result row> 
} 
+0

感謝您的回覆,我現在只是通過您的建議。我發現表創建的位置並更改了數據類型,但是當您說該字符串必須轉換時,我會想象應該使用下面的代碼(body是EditText視圖名稱)來完成。我應該添加如下內容:note.parseFloat(getstring) `mBodyText =(EditText)findViewById(R.id.body); mBodyText.setText(note.getString( note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));` – mao 2011-02-14 12:16:59

1

事實上,你正在使用記事本的例子作爲你做什麼的基礎,我正確地假設你正在使用ContentProvider?好了,所以你要做的就是運行檢索數據庫中的所有條目的查詢:通過遊標

Cursor c = managedQuery(Notes.CONTENT_URI, new String[] { Notes.BODY }, null, null, null); 

然後如你所說,循環:

if (c.moveToFirst()) { 

    long total = 0; 
    long body; 
    int bodyColumn = c.getColumnIndex(Notes.BODY); 

    do { 
     // Get the field values 
     body = c.getLong(bodyColumn); 
     phoneNumber = cur.getString(phoneColumn); 
     total += body; 

    } while (cur.moveToNext()); 

是否回答你的問題?評論你是否需要指定任何東西。

+0

感謝您的回覆:我不認爲我正在使用ContentProvider? – mao 2011-02-14 02:40:51

1

我現在正在處理類似問題的答案。我現在認爲數據庫的生命會導致循環計數方法變得非常煩人,所以如果我是你,我會設計數據庫來爲你保留計數並保留總輸入行。這只是一個建議,但我認爲做兩個非常簡單的一行方法比一個不斷增長的遞歸/循環方法更容易。