2012-08-02 112 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种可能性来存储日期/时间值。获取组件并将每个分别存储为年,月,日,分,秒或将它们存储为字符串 - 但不能使用一个整数存储日期/时间。

相关问题