1
SQLite 데이터베이스에 삽입하려고하지만 에뮬레이터에서 프로그램을 실행할 때마다 강제 종료됩니다. 내 데이터베이스 생성 내 구문 때문에 무언가가 있다고 생각하지만 트리플 체크하고 내 오류를 찾을 수 없습니다. 내가 생각할 수있는 유일한 다른 점은 SQlite 데이터베이스를 올바르게 실행하기 위해 매니페스트에 뭔가를 추가해야만하는 경우입니다.SQLite 데이터베이스 구문 오류로 인해 강제 종료
다음은 내 도우미 클래스의 코드입니다.
public class dbhelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "swimmers";
public static final String TABLE_SWIMMERS = "sfd table";
public static final String C_ID = "id";
public static final String NAME = "name";
public static final String TEAM = "team";
public static final String NOTES = "notes";
public static final int VERSION = 1;
public dbhelper(Context context)
{
super(context, DATABASE_NAME, null, VERSION);
}
@Override
public void onCreate (SQLiteDatabase db)
{
String createdb = "create table " + TABLE_SWIMMERS + "(" + C_ID + " integer primary key autoincrement, " + NAME + " text, " + TEAM + " text, " + NOTES + " text); ";
db.execSQL(createdb);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("drop table " + TABLE_SWIMMERS);
onCreate(db);
}
//add new entry
void addSwimmer(Swimmer swimmer){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(NAME, swimmer.getname());
values.put(TEAM, swimmer.getteam());
values.put(NOTES, swimmer.getnotes());
db.insert(TABLE_SWIMMERS, null, values);
db.close();
}
//Getting single swimmer
Swimmer getSwimmer(int id){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_SWIMMERS, new String[] { C_ID, NAME, TEAM, NOTES}, C_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor !=null)
cursor.moveToFirst();
Swimmer swimmer = new Swimmer (Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), null);
return swimmer;
}
public int updateSwimmer(Swimmer swimmer){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(NAME, swimmer.getname());
values.put(TEAM, swimmer.getteam());
values.put(NOTES, swimmer.getnotes());
return db.update(TABLE_SWIMMERS, values, C_ID + " = ?", new String[] { String.valueOf(swimmer.getID()) });
}
//delete single contact
public void deleteSwimmer(Swimmer swimmer){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_SWIMMERS, C_ID + " = ?", new String[] { String.valueOf(swimmer.getID()) });
db.close();
}
//get contacts count
public int getSwimmersCount(){
String countQuery = "SELECT * FROM " + TABLE_SWIMMERS;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
return cursor.getCount();
}
}
다음은 내가 만든 내 수영 클래스 내가 데이터베이스로 수영을 삽입하려합니다.
public class Swimmer {
//private variables
int _id;
String _name;
String _team;
String _notes;
public Swimmer(int id, String name, String team, String notes){
this._id = id;
this._name = name;
this._team = team;
this._notes = notes;
}
public Swimmer(String name, String team, String notes){
this._name = name;
this._team = team;
this._notes = notes;
}
public int getID(){
return this._id;
}
public void setID(int id){
this._id = id;
}
public String getname(){
return this._name;
}
public void setname(String name){
this._name = name;
}
public String getteam(){
return this._team;
}
public void setteam(String team){
this._team = team;
}
public String getnotes(){
return this._notes;
}
public void setnotes(String notes){
this._notes = notes;
}
}
다음은 데이터베이스에 열고 삽입하는 코드입니다.
다음은 수영을 시도 할 때의 실수입니다.
11-27 08:58:36.150: E/AndroidRuntime(643): FATAL EXCEPTION: main
11-27 08:58:36.150: E/AndroidRuntime(643): java.lang.IllegalStateException: Could not execute method of the activity
11-27 08:58:36.150: E/AndroidRuntime(643): at android.view.View$1.onClick(View.java:3591)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.view.View.performClick(View.java:4084)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.view.View$PerformClick.run(View.java:16966)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.os.Handler.handleCallback(Handler.java:615)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.os.Handler.dispatchMessage(Handler.java:92)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.os.Looper.loop(Looper.java:137)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.app.ActivityThread.main(ActivityThread.java:4745)
11-27 08:58:36.150: E/AndroidRuntime(643): at java.lang.reflect.Method.invokeNative(Native Method)
11-27 08:58:36.150: E/AndroidRuntime(643): at java.lang.reflect.Method.invoke(Method.java:511)
11-27 08:58:36.150: E/AndroidRuntime(643): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-27 08:58:36.150: E/AndroidRuntime(643): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-27 08:58:36.150: E/AndroidRuntime(643): at dalvik.system.NativeStart.main(Native Method)
11-27 08:58:36.150: E/AndroidRuntime(643): Caused by: java.lang.reflect.InvocationTargetException
11-27 08:58:36.150: E/AndroidRuntime(643): at java.lang.reflect.Method.invokeNative(Native Method)
11-27 08:58:36.150: E/AndroidRuntime(643): at java.lang.reflect.Method.invoke(Method.java:511)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.view.View$1.onClick(View.java:3586)
11-27 08:58:36.150: E/AndroidRuntime(643): ... 11 more
11-27 08:58:36.150: E/AndroidRuntime(643): Caused by: android.database.sqlite.SQLiteException: near "table": syntax error (code 1): , while compiling: create table sfd table(id integer primary key autoincrement, name text, team text, notes text);
11-27 08:58:36.150: E/AndroidRuntime(643): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
11-27 08:58:36.150: E/AndroidRuntime(643): at com.sfd.swimming.feedback.display.system.dbhelper.onCreate(dbhelper.java:35)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
11-27 08:58:36.150: E/AndroidRuntime(643): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
11-27 08:58:36.150: E/AndroidRuntime(643): at com.sfd.swimming.feedback.display.system.dbhelper.addSwimmer(dbhelper.java:48)
11-27 08:58:36.150: E/AndroidRuntime(643): at com.sfd.swimming.feedback.display.system.CreateNewSwimmerProfile.btn_CLICK_addswimmer(CreateNewSwimmerProfile.java:50)
11-27 08:58:36.150: E/AndroidRuntime(643): ... 14 more
11-27 08:58:36.420: D/dalvikvm(643): GC_CONCURRENT freed 207K, 4% free 8241K/8519K, paused 22ms+33ms, total 304ms
11-27 08:58:38.680: I/Process(643): Sending signal. PID: 643 SIG: 9
모든 도움을 주시면 감사하겠습니다!
정말 고마워요! 그것은 작동합니다 :) 이제 수영 선수의 이름 만 표시하는 활동을 작성하려고합니다. 이름을 클릭하면 수영 정보의 나머지 부분이 표시됩니다. – user1855195
어디서부터 시작해야할지 조언 해 주시겠습니까? – user1855195
나는 두 개의 별개의 액티비티를 생성 할 것이라고 생각한다. 첫 번째는 ListView로, onclick-event는 swimmerobject와 함께 매개 변수를 두 번째 활동으로 전달하여 나머지 수영 정보를 표시 할 수있다. –