2017-12-26 28 views
0

이것은 내 첫 번째 SQLite 응용 프로그램이며 오류가 많이 발생하여 수행 할 작업이 없습니다.SQLite 데이터베이스 오류 초보자

누구든지 내가해야 할 일을 말해 줄 수 있습니까?

DatabaseHelper.Java

public class DatabaseHelper extends SQLiteOpenHelper { 

public static final String dbName = "Student.db"; 
public static final String tbName = "studentTable"; 
public static final String colID = "ID"; 
public static final String colName = "NAME"; 
public static final String colMarks = "MARKS"; 

public DatabaseHelper(Context context) { 
    super(context, dbName, null, 1); 
    SQLiteDatabase db = this.getWritableDatabase(); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE"+tbName+"(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, MARKS INTEGER)"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS"+tbName); 
    onCreate(db); 
} 

public boolean insertData (String Name, String Marks){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 

    contentValues.put(colName,Name); 
    contentValues.put(colMarks,Marks); 
    long result = db.insert(tbName,null,contentValues); 

    if (result == -1){ 
     return false; 
    }else { 
     return true; 
    } 
} 
} 

MainActivity.java :

package com.example.acer.sqlitecrud; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

DatabaseHelper myDb; 
EditText Name, Marks; 
Button addData; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myDb = new DatabaseHelper(this); 

    Name = (EditText)findViewById(R.id.edtNama); 
    Marks = (EditText)findViewById(R.id.edtNilai); 
    addData = (Button)findViewById(R.id.btnInsert); 

    InsertData(); 

} 

private void InsertData() { 
    addData.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      boolean isInserted = myDb.insertData(Name.getText().toString(), 
        Marks.getText().toString()); 

      if (isInserted = true){ 
       Toast.makeText(MainActivity.this,"Data Telah Di Inputkan !!",Toast.LENGTH_SHORT).show(); 
      }else { 
       Toast.makeText(MainActivity.this,"Data Gagal Di Inputkan !!",Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 
} 
} 
이 내 클래스입니다

12-26 18:58:05.870 26185-26185/? I/art: Late-enabling -Xcheck:jni 
12-26 18:58:05.889 26185-26185/? E/Environment: initForCurrentUser:userId= 0 
12-26 18:58:05.889 26185-26185/? D/Environment: UserEnvironment current 
userId IS : 0 
12-26 18:58:05.889 26185-26185/? D/Environment: UserEnvironment PRIMARY 
STORAGE IS : MEDIA_INTERNAL 
12-26 18:58:05.982 26185-26185/com.example.acer.sqlitecrud I/LoadedApk: No 
resource references to update in package com.hmct.hmcttheme 
12-26 18:58:06.010 26185-26185/com.example.acer.sqlitecrud W/art: Before 
Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
12-26 18:58:06.135 26185-26185/com.example.acer.sqlitecrud E/SQLiteLog: (1) 
near "TABLEstudentTable": syntax error 
12-26 18:58:06.136 26185-26185/com.example.acer.sqlitecrud D/AndroidRuntime: 
Shutting down VM 
12-26 18:58:06.138 26185-26185/com.example.acer.sqlitecrud E/AndroidRuntime: 
FATAL EXCEPTION: main 

Process: com.example.acer.sqlitecrud, PID: 26185 

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.acer.sqlitecrud/com.example.acer.sqlitecrud.MainActivity}: android.database.sqlite.SQLiteException: near "TABLEstudentTable": syntax error (code 1): , while compiling: CREATE TABLEstudentTable(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, MARKS INTEGER) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2328) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2394) 
                      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1306) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5270) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:913) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:708) 
                      Caused by: android.database.sqlite.SQLiteException: near "TABLEstudentTable": syntax error (code 1): , while compiling: CREATE TABLEstudentTable(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, MARKS INTEGER) 
                      at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
                      at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
                      at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
                      at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
                      at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
                      at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
                      at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674) 
                      at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605) 
                      at com.example.acer.sqlitecrud.DatabaseHelper.onCreate(DatabaseHelper.java:27) 
                      at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251) 
                      at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) 
                      at com.example.acer.sqlitecrud.DatabaseHelper.<init>(DatabaseHelper.java:22) 
                      at com.example.acer.sqlitecrud.MainActivity.onCreate(MainActivity.java:22) 
                      at android.app.Activity.performCreate(Activity.java:6075) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2281) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2394)  
                      at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1306)  
                      at android.os.Handler.dispatchMessage(Handler.java:102)  
                      at android.os.Looper.loop(Looper.java:135)  
                      at android.app.ActivityThread.main(ActivityThread.java:5270)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at java.lang.reflect.Method.invoke(Method.java:372)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:913)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:708)  
12-26 18:58:06.249 26185-26185/com.example.acer.sqlitecrud I/Process: Sending signal. PID: 26185 SIG: 9 

:

이 내 로그 고양이

+0

나는 새로운 문제가 이미 인 대답 만했다 볼 수있는 공간을 놓친 드롭 테이블에서 테이블

db.execSQL("CREATE TABLE "+tbName+"(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, MARKS INTEGER)"); 

생성의 구문의 공간을 누락 개발시 항상 스택 추적을 두 번 확인하는 것이 좋습니다. 오류의 원인은 분명했습니다. 어쨌든, 당신이 데이터베이스, SQLite 또는 다른 것들을 사용한다면, 쿼리를 테스트하기 위해 로컬 인스턴스를 유지하십시오. 여러 번 사용하게 될 것입니다. 행운을 빕니다!! –

+0

네, 고마워요. 나는 테이블 이름 hehe을 넣기 전에 같은 공간이 필요하다는 것을 알지 못했다. – iDaeng

답변

1
@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE "+tbName+"(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, MARKS INTEGER)"); 
} 

참고

+0

haha ​​thank than much lol – iDaeng

0

체크 코드

public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE "+tbName+"(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, MARKS INTEGER)"); //add space after TABLE 
} 
0

쿼리 구문 오류가 아래의 표와 tbName 사용 사이의 공간, 공간이 없습니다.

@Override 
public void onCreate(SQLiteDatabase db) { 
db.execSQL("CREATE TABLE "+tbName+"(ID INTEGER PRIMARY KEY AUTOINCREMENT,  NAME TEXT, MARKS INTEGER)"); 
} 
0

당신은 또한 당신이

"DROP TABLE IF EXISTS "+tbName