Android SQLite连接:应用程序停止工作
我正在用android做一个日记应用程序,它应该从文本字段中获取一些数据 当我在模拟器上运行我的应用程序时,它会成功安装,但只要我在字段中输入并点击菜单中的保存选项,模拟器就会提示日记应用程序已停止工作 我在emulator的文件资源管理器中找不到我的应用程序中的数据库文件夹,这意味着我的数据库不可用 下面是我在saveitem中编写的SQLite连接生成和插入表代码Android SQLite连接:应用程序停止工作,android,sqlite,dbconnection,Android,Sqlite,Dbconnection,我正在用android做一个日记应用程序,它应该从文本字段中获取一些数据 当我在模拟器上运行我的应用程序时,它会成功安装,但只要我在字段中输入并点击菜单中的保存选项,模拟器就会提示日记应用程序已停止工作 我在emulator的文件资源管理器中找不到我的应用程序中的数据库文件夹,这意味着我的数据库不可用 下面是我在saveitem中编写的SQLite连接生成和插入表代码 if(item.getItemId()==R.id.save){ EditText et=(EditText)
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主键自动递增那样定义它,然后插入必须像插入日记值(心情、天气、文本、日期)谢谢,我知道了。因为这个原因,我之前遇到了一些问题。@ShoaibKhan所以如果它有效,你能接受asnwer作为有效的吗?谢谢
INSERT INTO DIARY VALUES(mood,weather,text,strDate,NULL);