如何将EditText的整数值存储到SQLite数据库[Android]

时间:2012-08-02 03:26:59

标签: android database sqlite

我在SQLite数据库中存储整数值时遇到问题。
这是我的代码。

我的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中的文本值成功存储到数据库中。所以现在我试图将starttime(Integer)存储到数据库中。
任何帮助将不胜感激。非常感谢!

2 个答案:

答案 0 :(得分:1)

我猜你真正的问题是“如何在SQLite数据库中存储TIME或DATE”? 您需要将它们转换为整数来存储它们,并转换回您要阅读的任何内容。 请查看关于该主题的SQLite文档的第1.2章:http://www.sqlite.org/datatype3.html

答案 1 :(得分:0)

我没有看到存储整数的问题 - 但是时间不等于整数。

您有2种存储日期/时间值的可能性。获取组件并将每个组件分别存储为年,月,日,分,秒或将其存储为字符串 - 但您不能使用一个整数存储日期/时间。