【问题标题】:error when creating database [closed]创建数据库时出错[关闭]
【发布时间】:2014-06-21 07:55:17
【问题描述】:

我正在尝试在我的 android 应用程序中创建 SQLite 数据库,但是当我创建数据库时应用程序意外停止工作。

package com.example.expenditurelogs;

import android.app.Activity;
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.text.format.Time;
import android.widget.TextView;
public class CTable extends Activity{
    public static  final String KEY_SNO = "SNo.";
    public static  final String KEY_ITEM = "Item";
    public static  final String KEY_PRICE = "Price";
    public static  final String KEY_TIME = "Time";
    private static  final String DATABASE_NAME = "CExpenditureLogs";
    private static  final String DATABASE_CTABLE = "CanteenTable";
    private static  final int DATABASE_VERSION = 1;

    private CDBHelper cdb;
    private  final Context con;
    private SQLiteDatabase canteendb;
    private static class CDBHelper extends SQLiteOpenHelper
    {
        public CDBHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);

        }
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE "+ DATABASE_CTABLE+ " ("+KEY_SNO+" INTEGER PRIMARY KEY AUTOINCREMENT, "+ KEY_ITEM + " TEXT NOT NULL, "+ KEY_PRICE+
                    " TEXT NOT NULL, "+KEY_TIME+" TEXT NOT NULL);");

        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS "+DATABASE_CTABLE);
            onCreate(db);

        }

    }
    public CTable(Context c)
    {
        con = c;
    }
    public CTable open() throws SQLException
    {
        cdb = new CDBHelper(con);
        canteendb = cdb.getWritableDatabase();
        return this;
    }
    public void close()
    {
        cdb.close();
    }
    public long createEntry(String item,String price)
    {
        ContentValues cv = new ContentValues();
        cv.put(KEY_ITEM,item);
        cv.put(KEY_PRICE,price);
        Time t = new Time(Time.getCurrentTimezone());
        t.setToNow();
        String time = ""+t.month;   
        cv.put(KEY_TIME,time);
        return canteendb.insert(DATABASE_CTABLE,null,cv);
    }
    public void getData()
    {
        TextView sno,item,price,time;
        sno = (TextView) findViewById(R.id.tSno);
        item = (TextView) findViewById(R.id.tItem);
        price = (TextView) findViewById(R.id.tPrice);
        time = (TextView) findViewById(R.id.tDateandTime);

        sno.setText("");
        item.setText("");
        price.setText("");
        time.setText("");

        String[] columns = { KEY_SNO,KEY_ITEM,KEY_PRICE,KEY_TIME };
        Cursor c = canteendb.query(DATABASE_CTABLE,columns,null,null,null,null,null);
        int iSno = c.getColumnIndex(KEY_SNO);
        int iItem = c.getColumnIndex(KEY_ITEM);
        int iPrice = c.getColumnIndex(KEY_PRICE);
        int iTime = c.getColumnIndex(KEY_TIME);
        for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
        {
            sno.setText(sno+ c.getString(iSno) +"."+"\n");
            item.setText(item+c.getString(iItem)+"\n");
            price.setText(price+c.getString(iPrice)+"\n");
            time.setText(time+c.getString(iTime)+"\n");
        }

    }
}

【问题讨论】:

  • “但应用程序意外停止工作”嗯,是的......显然我们看到了问题。有日志吗?
  • 你会:sno.setText(sno+ c.getString(iSno) +"."+"\n"); - 什么? sno 是一个 TextView!你不能这样做sno+ c.getString(iSno) - 你的正确指令是sno.setText(c.getString(iSno) +"."+"\n");(没有sno+)。其他人也是如此。

标签: java android database sqlite


【解决方案1】:

SNo. 不是有效的列名。

为了能够在标识符中使用特殊字符,您必须引用它:

public static final String KEY_SNO = "\"SNo.\"";

但最好不要使用句号:

public static final String KEY_SNO = "SNo";

【讨论】:

  • 好的我改了这个,还有上面cmets中提到的错误!现在我的数据库正在创建并且正在接受条目但是当我查看它时它正在停止应用程序! :( 是否有可能我的活动加载了 sm 布局......并且我从另一个活动中更改了该布局的内容?
  • 就像在我的 getData() 函数中一样,文本视图链接到其他活动布局上的文本视图......这是错的吗?
  • 要提出新问题,请使用“”按钮。
  • 但它只与此有关......问一个新问题有什么意义?请问您能回答我的问题吗?
  • 问题是for specific problems。这个问题的问题解决了;你现在发现了一个不同的问题。
猜你喜欢
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 2016-11-24
相关资源
最近更新 更多