【问题标题】:SQLite connection:application stops workingSQLite 连接:应用程序停止工作
【发布时间】:2013-04-29 00:36:43
【问题描述】:

我正在 android 中制作一个日记应用程序,它应该从文本字段中获取一些数据。

当我在模拟器上运行我的应用程序时,它会成功安装,但只要我在字段中输入并点击菜单中的保存选项,模拟器就会提示日记应用程序已停止工作。

我无法在模拟器的文件资源管理器中找到我的应用程序中的数据库文件夹,这意味着我的数据库没有创建。

这是我在保存项中编写的表代码中的 SQLite 连接建立和插入。

    if(item.getItemId()==R.id.save){

    EditText et=(EditText)findViewById(R.id.mood);
        String mood=et.getText().toString();
        et= (EditText)findViewById(R.id.weather);
        String weather=et.getText().toString();
        et= (EditText)findViewById(R.id.Text);
        String text=et.getText().toString();
        Date date= new Date();
        SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strDate = sdfDate.format(date);

        SQLiteDatabase db= openOrCreateDatabase("DiaryDatabase",MODE_PRIVATE,null);
        db.execSQL("CREATE TABLE IF NOT EXIST DIARY ('Mood VARCHAR' , 'Weather VARCHAR' , 'Text VARCHAR' , 'Time VARCHAR' , 'Id INTEGER PRIMARY KEY');");
        db.execSQL("INSERT INTO DIARY VALUES(mood,weather,text,strDate,NULL);");
        db.close();
    }

【问题讨论】:

  • 请发布您的 LOGCAT 以查看发生了什么错误。请查看我的答案中的链接,我总是使用数据库帮助程序类来管理所需的 SQLite 数据库维护项目(创建数据库、升级数据库、创建表等)。

标签: android sqlite dbconnection


【解决方案1】:

我认为你的两个 e.q. DDLDML 语句不正确。尝试用以下内容替换您的:

String createQuery = "CREATE TABLE IF NOT EXIST DIARY ("
+ "id integer primary key, "
+ "mood text, "
+ "weather text, "
+ "content text, "
+ "time text" + ")";

这里:

INSERT INTO DIARY VALUES(mood,weather,text,strDate,NULL);

您的原始创建语句将 PK 列创建为最后一列,在您的插入语句中,您尝试将 NULL 插入为 PK,这是不允许的,并且由于 PK 是唯一的,因此它没有意义每行的标识符。

【讨论】:

  • 在 SQLite 中,当您声明 "Id integer Primary Key" 时,SQLite 本身会使其自动递增,这就是我发送空值的原因。
  • @ShoaibKhan 没有。你错了。您不能将 null 作为 PK 传递!如果要自动递增,则需要定义自动递增。您的实际列不提供自动增量。你必须像id integer primary key autoincrement 那样定义它,然后你的插入必须像INSERT INTO DIARY VALUES(mood,weather,text,strDate);
  • 谢谢,我明白了。由于这个原因,我之前遇到了问题。
  • @ShoaibKhan 所以如果它有效,你能接受 asnwer 作为有效的吗?谢谢
【解决方案2】:

您应该创建一个从 SQLiteOpenHelper 扩展而来的 SQLite 帮助器类,以执行所有与数据库相关的项目,例如创建数据库和创建所需的表。

查看此示例并将其用作指南:

http://www.vogella.com/articles/AndroidSQLite/article.html

【讨论】:

    猜你喜欢
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多