Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite连接:应用程序停止工作_Android_Sqlite_Dbconnection - Fatal编程技术网

Android SQLite连接:应用程序停止工作

Android SQLite连接:应用程序停止工作,android,sqlite,dbconnection,Android,Sqlite,Dbconnection,我正在用android做一个日记应用程序,它应该从文本字段中获取一些数据 当我在模拟器上运行我的应用程序时,它会成功安装,但只要我在字段中输入并点击菜单中的保存选项,模拟器就会提示日记应用程序已停止工作 我在emulator的文件资源管理器中找不到我的应用程序中的数据库文件夹,这意味着我的数据库不可用 下面是我在saveitem中编写的SQLite连接生成和插入表代码 if(item.getItemId()==R.id.save){ EditText et=(EditText)

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

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

我在emulator的文件资源管理器中找不到我的应用程序中的数据库文件夹,这意味着我的数据库不可用

下面是我在saveitem中编写的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();
    }

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

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


我认为你的e.q.
DDL
DML
声明都不正确。尝试用以下内容替换您的:

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


您的origin create语句将
PK
列创建为最后一列,在您的insert语句中,您试图将
NULL
插入为
PK
,这是不允许的,并且没有意义,因为
PK
是每行的唯一标识符。

请发布日志以查看发生了什么错误。请检查我回答中的链接,我总是使用数据库助手类来管理所需的SQLite数据库维护项目(创建数据库、升级数据库、创建表等)。在SQLite中,当您声明“Id integer主键”时,SQLite本身会使其自动递增,这就是我发送空值的原因。@ShoaibKhan不,你错了。不能将null作为PK传递!如果要自动递增,则需要定义自动递增。实际列不提供自动递增。您必须像
id integer主键自动递增那样定义它,然后插入必须像
插入日记值(心情、天气、文本、日期)INSERT INTO DIARY VALUES(mood,weather,text,strDate,NULL);