2014-06-21 66 views
-4

我想創建一個SQLite數據庫在我的Android應用程序,但應用程序意外停止工作,當我創建數據庫。錯誤當創建數據庫

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"); 
     } 

    } 
} 
+1

「,但應用程序意外停止工作「呃是的...顯然我們看到了問題。有日誌? –

+0

你這樣做:'sno.setText(sno + c.getString(iSno)+「。」+「\ n」);' - **什麼**? sno是一個TextView!你不能做'sno + c.getString(iSno)' - 你正確的指令是'sno.setText(c.getString(iSno)+「。」+「\ n」);'(no ** sno + **) 。對於其他人也是如此。 –

+0

發佈你的logcat –

回答

0

SNo.不是有效的列名稱。

爲了能夠識別使用特殊字符,你必須引用它:

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

,但它會是一個更好的主意不使用期間:

public static final String KEY_SNO = "SNo"; 
+0

好吧我已經改變了這一點,以及上述評論中提到的錯誤! 現在我的數據庫正在創建並且正在接受條目,但是當我查看它時,它停止了應用程序! :( 是否有可能我的活動加載了sm佈局...並且我從另一個活動更改了該佈局的內容? – user3762390

+0

就像在我的getData()函數中一樣,文本視圖鏈接到某個其他活動佈局的文本視圖。這是錯誤的嗎? – user3762390

+0

要問一個新問題,請使用「Ask Question」按鈕。 –