android - 由于sqlite问题导致android应用程序崩溃

标签 android database sqlite crash

我正在尝试编写一个应用程序,并且想在数据库中使用sql。我几乎在每个查询中的命令都有问题。
这是我的DBAdapter.java文件:

public class DBAdapter {

static final String KEY_ROWID = "_id";
static final String KEY_HOUR_BEGIN = "hour_begin";
static final String KEY_HOUR_END = "hour_end";
static final String KEY_TEM_NAME = "tem_name";
static final String KEY_PERCENT = "percent";
static final String TAG = "DBAdapter";

static final String DATABASE_NAME = "MYDB";
static final String DATABASE_TABLE_TEMPLATE = "template";
static final int DATABASE_VERSION = 2;

static final String DATABASE_CREATE_TEMPLATE = 
        "create table template (_id integer primary key autoincrement, " +
        "tem_name text not null, hour_begin text not null, hour_end text not null, " +
        "percent text not null";


final Context context;

DatabaseHelper DBHelper;
SQLiteDatabase db;

public DBAdapter(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_TEMPLATE);
        }catch(SQLException e){
            e.printStackTrace();
        }

    }

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

    }
}

//opens the database
public DBAdapter open() throws SQLException
{
    db = DBHelper.getWritableDatabase();
    return this;
}

//closes the database
public void close()
{
    DBHelper.close();
}

            //insert template into the database
            public long insertTemplate(String tem_name, String hour_begin, String hour_end, String percent)
            {
                ContentValues initialValues = new ContentValues();
                initialValues.put(KEY_TEM_NAME, tem_name);
                initialValues.put(KEY_HOUR_BEGIN, hour_begin);
                initialValues.put(KEY_HOUR_END, hour_end);
                initialValues.put(KEY_PERCENT, percent);
                return db.insert(DATABASE_TABLE_TEMPLATE, null, initialValues);
            }

            //deletes a particular template
            public boolean deleteTemplate(long rowId)
            {
                return db.delete(DATABASE_TABLE_TEMPLATE, KEY_ROWID + "=" + rowId, null) > 0;
            }

            //retrieves all the template
            public Cursor getAllTemplates()
            {
                return db.query(DATABASE_TABLE_TEMPLATE, new String[] 
                        {KEY_ROWID, KEY_TEM_NAME, KEY_HOUR_BEGIN, KEY_HOUR_END, 
                        KEY_PERCENT}, null, null, null, null, null);
            }

            //retrieves a particular template
            public Cursor getTemplate(long rowId) throws SQLException
            {
                Cursor mCursor = 
                        db.query(true, DATABASE_TABLE_TEMPLATE, new String[]
                                {KEY_ROWID, KEY_TEM_NAME, KEY_HOUR_BEGIN, KEY_HOUR_END, 
                                KEY_PERCENT}, KEY_ROWID + "=" + rowId, 
                                null, null, null, null, null);
                if(mCursor != null)
                {
                    mCursor.moveToFirst();
                }
                return mCursor;
            }

            //updates a template
            public boolean updateTemplate(long rowId, String tem_name, String hour_begin, String hour_end, String percent)
            {
                ContentValues args = new ContentValues();
                args.put(KEY_TEM_NAME, tem_name);
                args.put(KEY_HOUR_BEGIN, hour_begin);
                args.put(KEY_HOUR_END, hour_end);
                args.put(KEY_PERCENT, percent);
                return db.update(DATABASE_TABLE_TEMPLATE, args, KEY_ROWID + "=" + rowId, null) > 0;
            }

}

这是我的mainActivity.java
这在onCreate函数中:
DBAdapter db = new DBAdapter(this);
    db.open();

    //inserting template
    long id = db.insertTemplate("morning", "06:00", "14:00", "125");

    //getting all the templates
    Cursor c = db.getAllTemplates();
    if(c.moveToFirst())
    {
        do{
            DisplayTemplate(c);
        }while(c.moveToNext());
    }

    //getting one template
    Cursor c = db.getTemplate(1);
    if(c.moveToFirst())
        DisplayTemplate(c);
    else
        Toast.makeText(this, "template not found!", Toast.LENGTH_LONG).show();

    //updating one template
    if(db.updateTemplate(1, "fgdhjf", "12:30:", "20:32", "200"))
        Toast.makeText(this, "update successful", Toast.LENGTH_LONG).show();
    else
        Toast.makeText(this, "update unsuccessful", Toast.LENGTH_LONG).show();

    //deleting one template
    if(db.deleteTemplate(5))
        Toast.makeText(this, "delete successful", Toast.LENGTH_LONG).show();
    else
        Toast.makeText(this, "delete unsuccessful", Toast.LENGTH_LONG).show();

    db.close();

这是onCreate函数之外的DisplayTemplate函数:
private void DisplayTemplate(Cursor c) {
    Toast.makeText(this, "template_id: " + 
c.getString(0) + "\n" + "name: " + 
            c.getString(1) + "\n" + 
"hour begin: " + c.getString(2) + "\n" + 
            "hour end: " + c.getString(3) + 
            "\n" + "percent: " + c.getString(4), 
            Toast.LENGTH_LONG).show();

我在mainActivity中的每个功能都遇到问题。我检查了调试器,问题出在DBAdapter文件上。请问有人告诉我我做错了什么吗?
非常感谢!

最佳答案

语法是一个小问题。就这样。感谢您的时间

关于android - 由于sqlite问题导致android应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16105425/

相关文章:

android - 当我将 Google Map Api v2 用于 map 时,我无法添加 Google Play 服务库

android - 保护 Apk 文件

java - 如何在我的数据库中检索名字?

Android Activity & Async SQLite 通信优化

java - SQLiteDatabase getWritableDatabase() { 抛出新的 RuntimeException ("Stub!"); }

ios - Core Data 只节省了大约 50% 的时间

android - ListPreference 的值永远不会更新

android - 解析 JSON 时出现 NullPointer 异常

java - 如何使用 Hibernate 作为持久性提供程序在 JPA 中添加 "outer join conditions with ON clause"?

java - eclipse中的.sql文件,将其显示为表格?