Java Android-SQLiteDatabase没有这样的表错误(代码1)
我的应用程序中有一个Java Android-SQLiteDatabase没有这样的表错误(代码1),java,android,sqlite,android-sqlite,sqliteopenhelper,Java,Android,Sqlite,Android Sqlite,Sqliteopenhelper,我的应用程序中有一个列表视图,用户可以在其中添加/删除项目。我正在使用SQLiteDatabase来存储应用程序未使用时的项目,但是SQLiteDatabase给了我一个奇怪的错误,它说“没有找到这样的表:主题(代码1)。我不明白为什么会发生这种情况,我以前用过几次SQLiteDatabase,但这次它只是不起作用 这是我的代码: SubjectsDatabase.java- import java.util.ArrayList; import android.content.ContentV
列表视图
,用户可以在其中添加/删除项目。我正在使用SQLiteDatabase
来存储应用程序未使用时的项目,但是SQLiteDatabase
给了我一个奇怪的错误,它说“没有找到这样的表:主题(代码1)
。我不明白为什么会发生这种情况,我以前用过几次SQLiteDatabase
,但这次它只是不起作用
这是我的代码:
SubjectsDatabase.java-
import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class SubjectsDatabase extends SQLiteOpenHelper {
private static final String SUBJECT_ID = "id";
private static final String SUBJECT_NAME = "name";
private static final String DATABASE_NAME = "subjectsDatabase";
private static final String TABLE_SUBJECTS = "subjects";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE = "CREATE_TABLE" + TABLE_SUBJECTS + "(" +
SUBJECT_ID + "INTEGER_PRIMARY_KEY, " + SUBJECT_NAME + "TEXT" + ")";
public SubjectsDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(DATABASE_CREATE);
}
catch(SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXSISTS topics");
onCreate(db);
}
public void addSubject(Subject subject) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues topics = new ContentValues();
topics.put(SUBJECT_NAME, subject.getSubject());
db.insert(TABLE_SUBJECTS, null, topics);
db.close();
}
public void removeSubject(Subject subject) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_SUBJECTS, SUBJECT_NAME + " = ?",
new String[] {String.valueOf(subject.getSubject())});
db.close();
}
public ArrayList<Subject> getSubjects(){
ArrayList<Subject> topics = new ArrayList<Subject>();
String selectQuery = "SELECT * FROM " + TABLE_SUBJECTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cur = db.rawQuery(selectQuery, null);
if(cur.moveToFirst()) {
do {
Subject subject = new Subject();
subject.setId(Integer.parseInt(cur.getString(0)));
subject.setSubject(cur.getString(1));
topics.add(subject);
} while(cur.moveToNext());
}
db.close();
return topics;
}
public void updateSubject(Subject old_name, Subject new_name) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues topic = new ContentValues();
topic.put(SUBJECT_NAME, new_name.getSubject());
db.update(TABLE_SUBJECTS, topic, SUBJECT_NAME + " = ?",
new String[] {String.valueOf(old_name.getSubject())});
db.close();
}
}
添加_Notes.java-
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ListView;
public class Add_Notes extends Activity {
private ItemAdapter adapter;
private ArrayList<Subject> menu_items;
private SubjectsDatabase db = new SubjectsDatabase(this);
private ListView subjects;
private InputMethodManager imm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add__notes);
menu_items = db.getSubjects();
adapter = new ItemAdapter(this, menu_items);
subjects = (ListView) findViewById(R.id.subjects);
subjects.setAdapter(adapter);
}
public void onClickAddSubjects(View v) {
showDialog(0);
showKeyboard();
}
protected Dialog onCreateDialog(int id) {
switch(id) {
case 0:
Builder builder = new AlertDialog.Builder(this);
final EditText SubjectName = new EditText(this);
SubjectName.setHint("Subject Name");
builder.setView(SubjectName);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
String subjectName = SubjectName.getText().toString();
db.addSubject(new Subject(subjectName));
adapter.add(new Subject(subjectName));
adapter.notifyDataSetChanged();
SubjectName.setText("");
dismissDialog(0);
removeDialog(0);
hideKeyboard();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
SubjectName.setText("");
dismissDialog(0);
removeDialog(0);
hideKeyboard();
}
});
return builder.create();
}
return null;
}
public void showKeyboard() {
imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
public void hideKeyboard() {
imm.toggleSoftInput(InputMethodManager.RESULT_HIDDEN, 0);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_add__notes, menu);
return true;
}
}
import java.util.ArrayList;
导入android.os.Bundle;
导入android.app.Activity;
导入android.app.AlertDialog;
导入android.app.AlertDialog.Builder;
导入android.app.Dialog;
导入android.content.Context;
导入android.content.DialogInterface;
导入android.view.Menu;
导入android.view.view;
导入android.view.inputmethod.InputMethodManager;
导入android.widget.EditText;
导入android.widget.ListView;
公共类添加注释扩展活动{
专用项适配器;
私有ArrayList菜单项;
private SubjectsDatabase db=新SubjectsDatabase(本);
私有列表视图主题;
私有输入方法管理器imm;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u add\u notes);
menu_items=db.getSubjects();
适配器=新项目适配器(此菜单项);
受试者=(ListView)findViewById(R.id.subjects);
受试者:setAdapter(adapter);
}
公共void onClickAddSubjects(视图五){
显示对话框(0);
showKeyboard();
}
受保护的对话框onCreateDialog(int id){
开关(id){
案例0:
Builder Builder=新建AlertDialog.Builder(此);
最终编辑文本主题名称=新编辑文本(本);
SubjectName.setHint(“Subject Name”);
builder.setView(SubjectName);
setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
公共void onClick(对话框接口arg0,int arg1){
字符串subjectName=subjectName.getText().toString();
db.addSubject(新主题(主题名称));
adapter.add(新主题(subjectName));
adapter.notifyDataSetChanged();
SubjectName.setText(“”);
解雇对话框(0);
removeDialog(0);
隐藏板();
}
});
setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
公共void onClick(对话框接口arg0,int arg1){
SubjectName.setText(“”);
解雇对话框(0);
removeDialog(0);
隐藏板();
}
});
返回builder.create();
}
返回null;
}
公用键盘(){
imm=(InputMethodManager)getSystemService(Context.INPUT\u方法\u服务);
imm.toggleSoftInput(InputMethodManager.SHOW_强制,0);
}
公共无效隐藏板(){
imm.toggleSoftInput(InputMethodManager.RESULT\u隐藏,0);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.activity\u add\u notes,menu);
返回true;
}
}
以下是错误日志-
04-09 18:08:42.133: E/linker(31508): load_library(linker.cpp:759): library "libmaliinstr.so" not found
04-09 18:08:42.965: E/SQLiteLog(31508): (1) no such table: subjects
04-09 18:08:42.984: E/AndroidRuntime(31508): FATAL EXCEPTION: main
04-09 18:08:42.984: E/AndroidRuntime(31508): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Swap.RR/com.Swap.RR.Add_Notes}: android.database.sqlite.SQLiteException: no such table: subjects (code 1): , while compiling: SELECT * FROM subjects
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.ActivityThread.access$600(ActivityThread.java:174)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1382)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.os.Handler.dispatchMessage(Handler.java:107)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.os.Looper.loop(Looper.java:194)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.ActivityThread.main(ActivityThread.java:5409)
04-09 18:08:42.984: E/AndroidRuntime(31508): at java.lang.reflect.Method.invokeNative(Native Method)
04-09 18:08:42.984: E/AndroidRuntime(31508): at java.lang.reflect.Method.invoke(Method.java:525)
04-09 18:08:42.984: E/AndroidRuntime(31508): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-09 18:08:42.984: E/AndroidRuntime(31508): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
04-09 18:08:42.984: E/AndroidRuntime(31508): at dalvik.system.NativeStart.main(Native Method)
04-09 18:08:42.984: E/AndroidRuntime(31508): Caused by: android.database.sqlite.SQLiteException: no such table: subjects (code 1): , while compiling: SELECT * FROM subjects
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:886)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:497)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
04-09 18:08:42.984: E/AndroidRuntime(31508): at com.Swap.RR.SubjectsDatabase.getSubjects(SubjectsDatabase.java:66)
04-09 18:08:42.984: E/AndroidRuntime(31508): at com.Swap.RR.Add_Notes.onCreate(Add_Notes.java:32)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.Activity.performCreate(Activity.java:5122)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1146)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2328)
04-09 18:08:42.984: E/AndroidRuntime(31508): ... 11 more
04-09 18:08:42.133:E/linker(31508):加载库(linker.cpp:759):未找到库“libmalinstr.so”
04-09 18:08:42.965:E/SQLiteLog(31508):(1)没有此类表格:受试者
04-09 18:08:42.984:E/AndroidRuntime(31508):致命异常:主
04-09 18:08:42.984:E/AndroidRuntime(31508):java.lang.RuntimeException:无法启动活动组件信息{com.Swap.RR/com.Swap.RR.Add_Notes}:android.database.sqlite.SQLiteException:没有这样的表:主题(代码1):,编译时:从主题选择*
04-09 18:08:42.984:E/AndroidRuntime(31508):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
04-09 18:08:42.984:E/AndroidRuntime(31508):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416)
04-09 18:08:42.984:E/AndroidRuntime(31508):在android.app.ActivityThread.access$600(ActivityThread.java:174)
04-09 18:08:42.984:E/AndroidRuntime(31508):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1382)
04-09 18:08:42.984:E/AndroidRuntime(31508):在android.os.Handler.dispatchMessage(Handler.java:107)上
04-09 18:08:42.984:E/AndroidRuntime(31508):在android.os.Looper.loop(Looper.java:194)
04-09 18:08:42.984:E/AndroidRuntime(31508):位于android.app.ActivityThread.main(ActivityThread.java:5409)
04-09 18:08:42.984:E/AndroidRuntime(31508):位于java.lang.reflect.Method.Invokenactive(本机方法)
04-09 18:08:42.984:E/AndroidRuntime(31508):位于java.lang.reflect.Method.invoke(Method.java:525)
04-09 18:08:42.984:E/AndroidRuntime(31508):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-09 18:08:42.984:E/AndroidRuntime(31508):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
04-09 18:08:42.984:E/AndroidRuntime(31508):在dalvik.system.NativeStart.main(本机方法)
04-09 18:08:42.984:E/AndroidRuntime(31508):原因:android.database.sqlite.SQLiteException:没有这样的表:主题(代码1):,编译时:从主题中选择*
04-09 18:08:42.984:E/AndroidRuntime(31508):在android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
04-09 18:08:42.984:E/AndroidRuntime(31508):在android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:886)
04-09 18:08:42.984:E/AndroidRuntime(31508):在android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:497)
04-09 18:08:42.984:E/AndroidRuntime(31508):在android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
04-09 18:08:42.984:E/AndroidRuntime(31508):在android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
04-09 18:08:42.984:E/AndroidRuntime(31508):位于android.database.sqlite.sqlite
04-09 18:08:42.133: E/linker(31508): load_library(linker.cpp:759): library "libmaliinstr.so" not found
04-09 18:08:42.965: E/SQLiteLog(31508): (1) no such table: subjects
04-09 18:08:42.984: E/AndroidRuntime(31508): FATAL EXCEPTION: main
04-09 18:08:42.984: E/AndroidRuntime(31508): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Swap.RR/com.Swap.RR.Add_Notes}: android.database.sqlite.SQLiteException: no such table: subjects (code 1): , while compiling: SELECT * FROM subjects
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.ActivityThread.access$600(ActivityThread.java:174)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1382)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.os.Handler.dispatchMessage(Handler.java:107)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.os.Looper.loop(Looper.java:194)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.ActivityThread.main(ActivityThread.java:5409)
04-09 18:08:42.984: E/AndroidRuntime(31508): at java.lang.reflect.Method.invokeNative(Native Method)
04-09 18:08:42.984: E/AndroidRuntime(31508): at java.lang.reflect.Method.invoke(Method.java:525)
04-09 18:08:42.984: E/AndroidRuntime(31508): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-09 18:08:42.984: E/AndroidRuntime(31508): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
04-09 18:08:42.984: E/AndroidRuntime(31508): at dalvik.system.NativeStart.main(Native Method)
04-09 18:08:42.984: E/AndroidRuntime(31508): Caused by: android.database.sqlite.SQLiteException: no such table: subjects (code 1): , while compiling: SELECT * FROM subjects
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:886)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:497)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
04-09 18:08:42.984: E/AndroidRuntime(31508): at com.Swap.RR.SubjectsDatabase.getSubjects(SubjectsDatabase.java:66)
04-09 18:08:42.984: E/AndroidRuntime(31508): at com.Swap.RR.Add_Notes.onCreate(Add_Notes.java:32)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.Activity.performCreate(Activity.java:5122)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1146)
04-09 18:08:42.984: E/AndroidRuntime(31508): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2328)
04-09 18:08:42.984: E/AndroidRuntime(31508): ... 11 more
"CREATE_TABLE" + TABLE_SUBJECTS + "("
SUBJECT_ID + "INTEGER_PRIMARY_KEY, "
SUBJECT_NAME + "TEXT"
"CREATE TABLE " + TABLE_SUBJECTS + " (" // Note: NO UNDERSCORE!
SUBJECT_ID + " INTEGER PRIMARY KEY, " // Note: NO UNDERSCORES!
SUBJECT_NAME + " TEXT"
private static final String DATABASE_CREATE = "CREATE TABLE" + TABLE_SUBJECTS + "(" +
SUBJECT_ID + " INTEGER_PRIMARY_KEY, " + SUBJECT_NAME + " TEXT" + ")";