没有调用SQLLITEDATABASE crash-oncreate? db.getreadabledatabase / getwritabledatabase崩溃

时间:2015-07-01 22:14:06

标签: android sqlite

我也是Android和SQLite的初学者。 我一直在尝试构建一个数据库来检索和显示项目,价格和时间等条目。 我已经浏览了所有其他主题,但我似乎无法找到它崩溃的原因。 我尝试了很多方法使它工作,但这是我试图使用的代码:

public class data extends SQLiteOpenHelper {
    private static final String DATABASE_NAME ="items.db";
    private static final String t="database created";
    private static final int DATABASE_VERSION=1;
    Context ct;
    SQLiteDatabase db;
    public data (Context ctx) {
        super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
        ct=ctx;

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE  record (_id primary key autoincrement,TIME text,ITEM text,TYPE text,AMT text)");
        int duration = Toast.LENGTH_LONG;
        Toast toast = Toast.makeText(ct, t, duration);
        toast.show();
    }

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

}

这是我用来运行数据类对象的类

public class mainscreen extends Activity {
    private data Data;
    private static String[] cols={"_id","TIME","ITEM","TYPE","AMT"};
    private static String ORDER_BY = TIME + "DESC";
    private static int[] TO={R.id.textView5,R.id.textView3,R.id.textView,R.id.textView4,R.id.textView2};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainscreen);
        Data = new data(this);

    }

    public void tryit(View view)
    {
        time t=new time();
        data test =new data(this);
        add(t.tostring(),"tomato", "200", "Food");

        // Cursor cursor = getd();
        // show(cursor);
    }


    private void add(String t,String item, String price,String type) {
        SQLiteDatabase db = Data.getWritableDatabase();
        db.execSQL("insert into "+TABLE_NAME+" values(null,'" + t + "','" + item + "','" + type + "','" + price + "')");
    }
}

截至目前,我只是想让数据库显示我使用add();添加的一些条目

  1. 似乎没有使用Data类运行OnCreate(我使用toast来尝试查看onCreate是否一直运行)
  2. 尝试使用SQLLITEDatabase getreadabledatabase/getwritabledatabase对象导致崩溃
  3. 即使是上面简单的execSQL("create******")方法也会导致崩溃。
  4. 最糟糕的是昨天它实际工作了2-3次。它按照我的意愿向我展示了使用listview的5-8个条目,现在正在崩溃 sob
  5. 我似乎无法找到问题!

    我不太确定如何获得stackdump/trace如果需要请告诉我如何获得它。我已经标记了光标/适配器,因为如果数据库不起作用,没有必要让它工作。

    我通过按钮使用tryit()来启动插入...并在

    处崩溃
    SQLiteDatabase db = Data.getWritableDatabase();
    

    我认为整个问题是因为某些原因导致数据库没有被创建,甚至使用普通db.execSQL语句,无论是在onCreate还是在数据中使用db对象class和execSQL在构造函数中崩溃了应用程序。

1 个答案:

答案 0 :(得分:2)

你的create语句错误,你需要将INTEGER类型添加到_id,试试这个:

CREATE TABLE  record (_id integer primary key autoincrement,TIME text,ITEM text,TYPE text,AMT text)

更多:https://www.sqlite.org/autoinc.html