2016-09-21 63 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检查表已经存在与否。