2016-09-21 32 views
-10

我在sqLiteDatabase.execSQL行的數據庫處理程序類中的sq lite代碼上遇到錯誤,這裏運行的是我的異常和代碼。android studio中的Sqlite

例外:

app.caloriescounter.admin.sqliteapp E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.app.caloriescounter.admin.sqliteapp, PID: 2605 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.caloriescounter.admin.sqliteapp/com.app.caloriescounter.admin.sqliteapp.MainActivity}: android.database.sqlite.SQLiteException: near "TABLEemploy_table": syntax error (code 1): , while compiling: CREATE TABLEemploy_table(_ID INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT,Email TEXT); 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5417) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: android.database.sqlite.SQLiteException: near "TABLEemploy_table": syntax error (code 1): , while compiling: CREATE TABLEemploy_table(_ID INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT,Email TEXT); 
     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 

代碼

package com.app.caloriescounter.admin.sqliteapp; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by Admin on 9/15/2016. 
*/ 
public class Databasehandler extends SQLiteOpenHelper { 

    private static final int Database_ver=1; 
    private static final String Database_name="TECHAs.db"; 
    private static final String Table_name="employ_table"; 
    private static final String Key_id="_ID"; 
    private static final String Key_name="Name"; 
    private static final String Key_email="Email"; 

    public Databasehandler(Context context) { 
     super(context, Database_name, null, Database_ver); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     sqLiteDatabase.execSQL("CREATE TABLE" + Table_name + "(_ID INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT,Email TEXT);"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
     sqLiteDatabase.execSQL("DROP TABLE IF EXISTS"+Table_name); 
     onCreate(sqLiteDatabase); 
    } 

    public void addPerson(Person person){ 
     SQLiteDatabase mydb=this.getWritableDatabase(); 
     ContentValues contentValues=new ContentValues(); 
     contentValues.put(Key_name,person.getName()); 
     contentValues.put(Key_email,person.getEmail()); 
     mydb.insert(Table_name,null,contentValues); 
     mydb.close(); 
    } 

    public int updateperson(Person person){ 
     SQLiteDatabase db=this.getWritableDatabase(); 
     ContentValues contentValues=new ContentValues(); 
     contentValues.put(Key_name,person.getName()); 
     contentValues.put(Key_email,person.getEmail()); 
     return db.update(Table_name,contentValues,Key_id+" -?",new String[] {String.valueOf(person.getId())}); 
    } 

    public void Deleteperson(Person person){ 
     SQLiteDatabase db=this.getWritableDatabase(); 
     db.delete(Table_name,Key_id+" -?",new String[] {String.valueOf(person.getId())}); 
     db.close(); 
    } 

    public Person getperson(int id){ 
     SQLiteDatabase db=this.getReadableDatabase(); 
     Cursor cursor=db.query(Table_name,new String[] {Key_id,Key_name,Key_email},Key_id+" -?", 
       new String[]{String.valueOf(id)},null,null,null,null); 

     if(cursor!=null) 
      cursor.moveToFirst(); 

     return new Person(cursor.getInt(0),cursor.getString(1),cursor.getString(2)); 
    } 

    public List<Person> getallperson(){ 
     List<Person> list=new ArrayList<>(); 
     String selectquer="SELECT * FROM"+Table_name; 
     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor=db.rawQuery(selectquer,null); 
     if(cursor.moveToFirst()){ 
      do { 
       Person person=new Person(); 
       person.setId(cursor.getInt(0)); 
       person.setName(cursor.getString(1)); 
       person.setEmail(cursor.getString(2)); 
       list.add(person); 
      } 
      while (cursor.moveToNext()); 
     } 
     return list; 
    } 
} 
+4

從例外情況可以看出'TABLE'和'employ_table' @'之間沒有空格CREATE TABLEemploy_table' – Raghunandan

+2

您在'TABLE'後面缺少空格,您可以從錯誤消息中清楚地看到 –

回答

2

改變你在onCreate()代碼如下所示,它的崩潰,因爲有TABLE關鍵字,您table_name

之間沒有空格
1

您在sql語句中缺少空格。複製它然後覆蓋它到你的代碼。希望有所幫助。

sqLiteDatabase.execSQL("CREATE TABLE " + Table_name + "(_ID INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT,Email TEXT);"); 
1

您需要在創建腳本中的關鍵字和表元素名稱(列名稱,表名稱)之間提供空格。

sqLiteDatabase.execSQL("CREATE TABLE " + Table_name + "(_ID INTEGER 
PRIMARY KEY AUTOINCREMENT,Name TEXT,Email TEXT);"); 
0

語法錯誤(碼1):在編譯:CREATE TABLEemploy_table(_ID INTEGER PRIMARY KEY AUTOINCREMENT,名稱文本,電子郵件TEXT);

請檢查這是語法錯誤的空間。刪除空間並再次寫入查詢,如下所示。

sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS " + Table_name + "(_ID INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT,Email TEXT);"); 

這也是很好的做法,包括檢查IF NOT EXISTS檢查表已經存在與否。