2016-09-21 4 views
-10

Я получаю ошибку на sqlite-коде в классе обработчика базы данных в строке sqliteDatabase.execSQL во время работы здесь - это мое исключение и код.Sqlite in android studio

Исключение:

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' и 'usage_table' @' CREATE TABLEemploy_table' нет пробела – Raghunandan

+2

Вам не хватает пробела после 'TABLE', как вы можете ясно видеть из сообщения об ошибке –

ответ

2

изменить код в onCreate() следующим образом, это сбой, потому что нет никакого пространства между TABLE и ключевым словом table_name

sqLiteDatabase.execSQL("CREATE TABLE " + Table_name + "(_ID INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT,Email TEXT);"); 
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 проверить таблицу уже существующих или нет.