我的DBHelper类
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context)
{
super(context,"SIMPLE_DB",null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE SIMPLE_TABLE ( " +
"ID INTEGER PRIMARY KEY " +
"DESC TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
活动类
public class SimpleDatabase extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DBHelper dbHelper = new DBHelper(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
db.execSQL("INSERT INTO SIMPLE_TABLE VALUES (NULL, 'test');");
Cursor cursor = db.rawQuery("SELECT * FROM SIMPLE_TABLE", null);
TextView text = (TextView)findViewById(R.id.textbox);
text.setText(cursor.getString(0));
}
}
我认为它崩溃了(应用程序意外停止了!)在SQLiteDatabase db = ...因为如果我从那里评论代码到最后那么它工作正常。但我不知道为什么会这样做。 任何帮助将不胜感激。
答案 0 :(得分:4)
没关系,弄清楚我现在做错了什么。
db.execSQL("CREATE TABLE SIMPLE_TABLE ( " + "ID INTEGER PRIMARY KEY<comma goes here> " + "DESC TEXT);");
逗号是严肃的事。抱歉这个愚蠢的问题。
答案 1 :(得分:1)
首先,您应确保您的SQL语句正确无误。如果sqlite3在您的路径中,您可以执行命令:
$&gt;:sqlite3 testdb.db
之后你在shell中,如果语法正确,你可以测试你的SQL语句。 (提示:参考上面的例子:它不正确)。
之后,您应该按照Aurora的描述正确处理光标。
也许你应该实现你的onUpgrade()方法,例如:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS SIMPLE_TABLE");
onCreate(db);
}
答案 2 :(得分:0)
首先,为了帮助您进行调试,请确保使用调试监视器和日志。从长远来看,这将使您的生活更轻松!如果您使用的是Eclipse,请选择Window - &gt;开放视角 - &gt;其他 - &gt; DDMS。 LogCat将显示程序运行时发生的情况。文档描述了它here。再次运行程序并观看LogCat。它应该为您提供更多信息,并告诉您崩溃的代码行。
就你的代码而言,我注意到的第一件事是你得到一个游标后,你需要调用cursor.moveToFirst();选择(第一)行。然后,当您调用cursor.getString(0);时,它指示零行的零点列。如果你不调用moveToFirst();那么你的cursor.getString(0)将获得第-1行的zeroeth列,并且是一个超出范围的索引错误。默认情况下,光标将从第-1行开始。
根据您想要在光标中移动的方式以及返回的结果/行数,您可能还需要调用cursor.movetoPosition()或cursor.moveToNext()。查看有关游标here的文档。