Java 创建数据库时出错
我正在尝试在我的android应用程序中创建SQLite数据库,但当我创建数据库时,该应用程序意外停止工作Java 创建数据库时出错,java,android,database,sqlite,Java,Android,Database,Sqlite,我正在尝试在我的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.SQL
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");
}
}
}
斯诺。不是有效的列名
为了能够在标识符中使用特殊字符,您必须引用它:
public static final String KEY_SNO = "\"SNo.\"";
但最好不要使用句号:
public static final String KEY_SNO = "SNo";
但是这个应用程序突然停止了工作嗯是的。。。显然,我们看到了问题所在。有日志吗?您有:sno.setTextsno+c.getStringiSno++\n;-什么sno是一个文本视图!无法执行sno+c.getStringiSno-正确的指令是sno.setTextc.getStringiSno++\n;没有sno+。其他人也是如此。好吧,我已经改变了这个,以及上面评论中提到的错误!现在我的数据库正在创建中,并且正在接受条目,但是当我查看它时,它正在停止应用程序!:我的活动是否可能加载sm布局…并且我从另一个活动更改了该布局的内容?就像在我的getData函数中,文本视图链接到其他活动布局上的文本视图…这是否错误?要问一个新问题,使用“提问”按钮。但它只与此相关……问一个新问题有什么意义?你能回答我的问题吗?问题是。这个问题解决了,;您现在发现了一个不同的问题。