2012-08-02 148 views
0

我在SQLite數據庫中存儲整數值時遇到問題。
這是我的代碼。如何將EditText的整數值存儲到SQLite數據庫[Android]

的Create_Events.java

Button btnCreate = (Button)findViewById(R.id.saveButton); 
btnCreate.setOnClickListener(new OnClickListener() 
{ 

     @Override 
     public void onClick(View v) 
     { 
      calDB.open(); 
      long _id; 
      EditText txtTitle = (EditText) findViewById(R.id.txtTitle); 
      String title = txtTitle.getText().toString(); 
      EditText txtLocation = (EditText) findViewById(R.id.editText1); 
      String location = txtLocation.getText().toString(); 
      EditText startTime = (EditText) findViewById(R.id.editText2); 
      String startTime = startTime.getText().toString(); 
      _id = calDB.insertEvent(title, location, 0, 0); 

      calDB.close(); 

     } 

}); 

CalendarAdapter.java(數據庫類)

package main.page; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class CalendarAdapter 
{ 
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_TITLE = "title"; 
    public static final String KEY_LOCATION = "location"; 
    public static final String KEY_START = "starttime"; 
    public static final String KEY_END = "endtime"; 
    private static final String TAG = "DBAdapter"; 

    private static final String DATABASE_NAME = "anniversary"; 
    private static final String DATABASE_TABLE = "calendar"; 
    private static final int DATABASE_VERSION = 2; 

    private static final String DATABASE_CREATE = "create table calendar(_id integer primary key autoincrement,"+ 
    "title text not null, location text not null, starttime integer, endtime integer);"; 

    private final Context context; 

    private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 


    public CalendarAdapter(Context ctx) 
    { 
     this.context = ctx; 
     DBHelper = new DatabaseHelper(context); 
    } 

    private static class DatabaseHelper extends SQLiteOpenHelper 
    { 
     DatabaseHelper(Context context) 
     { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) 
     { 
      try 
      { 
      db.execSQL(DATABASE_CREATE);  
      }catch(SQLException e) 
      { 
       e.printStackTrace(); 
      } 

     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
     { 
      Log.w(TAG, "Upgrading database from version "+oldVersion+" to "+newVersion+", which will destroy all old data"); 
      db.execSQL("DROP TABLE IF EXISTS calendar"); 
      onCreate(db); 
     } 

    } 

    public CalendarAdapter open() throws SQLException 
    { 
     db = DBHelper.getWritableDatabase(); 
     return this; 
    } 

    public void close() 
    { 
     DBHelper.close(); 
    } 

    public long insertEvent(String title, String location, int starttime, int endtime) 
    { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(KEY_TITLE, title); 
     initialValues.put(KEY_LOCATION, location); 
     initialValues.put(KEY_START, starttime); 
     initialValues.put(KEY_END, endtime); 
     return db.insert(DATABASE_TABLE, null, initialValues); 

    } 

    public boolean deleteEvent(long rowId) 
    { 
     return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
    } 

    public Cursor getAllEvents() 
    { 
     return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, KEY_LOCATION, KEY_START, KEY_END}, null, null, null, null, null); 

    } 

    public Cursor getEvent(long rowId) throws SQLException 
    { 
     Cursor c = db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, KEY_LOCATION, KEY_START, KEY_END}, KEY_ROWID + "=" + rowId, null, null, null, null, null); 
     if(c != null) 
     { 
      c.moveToFirst(); 
     } 
     return c; 
    } 

    public boolean updateEvent(long rowId, String title, String location, int starttime, int endtime) 
    { 
     ContentValues args = new ContentValues(); 
     args.put(KEY_TITLE, title); 
     args.put(KEY_LOCATION, location); 
     args.put(KEY_START, starttime); 
     args.put(KEY_END, endtime); 
     return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; 

    } 

} 

正如你可以在上面看到,我已成功地從存儲的EditText文本值進入我的插入代碼數據庫成功。所以現在我試圖將啓動時間(Integer)存儲到數據庫中。
任何幫助將不勝感激。謝謝一堆!

+1

究竟是什麼問題?看起來你總是在0開始傳遞'starttime'?你怎麼知道它沒有被存儲? – cklab 2012-08-02 03:29:30

+0

不,我把0,因爲我想測試文本值是否可以插入數據庫。它被插入到數據庫中,但是當我嘗試從editText插入時,不能插入整數。 – CallMyName 2012-08-02 03:47:03

回答

1

我想你真正的問題是「如何在SQLite數據庫中存儲時間或日期」? 您需要將它們轉換爲整數才能存儲它們,並將其轉換回您閱讀的任何內容。 請查看該主題的SQLite文檔的章節1.2:http://www.sqlite.org/datatype3.html

+0

如果您想要簡單,只需將您的HH:MM轉換爲分鐘(整數),然後使用簡單的Java代碼;) – Oliver 2012-08-02 03:38:12

+0

嗨,我訪問了您提供的網站,但我認爲它不會像所述的那樣幫助我在網站中我們可以用整數存儲時間,這就是我在上面的代碼中所做的。我只想把時間存入數據庫,我不想轉換時間或任何東西。 – CallMyName 2012-08-02 03:56:00

+0

@CallMyName,你的代碼沒有任何方法將你從EditText得到的* String *轉換爲* Integer *。實際上,您在代碼中存儲「0」:「calDB.insertEvent(title,location,0,0);」。您沒有*在數據庫中存儲除0之外的任何內容。所以我必須假設你在將時間字符串轉換爲整數並返回時遇到問題。作爲一個例子,「04:40」是*不是一個整數,而是一個字符串。 – Oliver 2012-08-02 10:04:26

0

我沒有看到存儲整數的問題 - 但時間不等於整數。

您有2種可能性來存儲日期/時間值。獲取組件並將每個分別存儲爲年,月,日,分,秒或將它們存儲爲字符串 - 但不能使用一個整數存儲日期/時間。

相關問題