Android SQLite错误:SQLite返回:错误代码=1,消息=near";TABLEusers";:语法错误,

Android SQLite错误:SQLite返回:错误代码=1,消息=near";TABLEusers";:语法错误,,android,sqlite,Android,Sqlite,使用我的数据库的登录类: package edu.flying.panda.taskmanager; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.app.Activity; import android.content.

使用我的数据库的登录类:

package edu.flying.panda.taskmanager;


import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

/**
 * Login Screen
 * @author FlyingPanda
 */

public class LogIn extends Activity {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.log_in);

    final DatabaseHandler userDB = new DatabaseHandler(this);

    final Button logIn_button = (Button) findViewById(R.id.log_in_logIn_button);
    final Button signUp_button = (Button) findViewById(R.id.log_in_register_button);

    /**
     * Listener for LogIn button, checks for correct Username/Password and handles errors
     */
    logIn_button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            EditText username = (EditText) findViewById(R.id.log_in_username);
            EditText password = (EditText) findViewById(R.id.log_in_pass);
            TextView errorText = (TextView) findViewById(R.id.log_in_error);


            //check credentials

            User user = userDB.getUser(username.getText().toString());
            //error^
            Log.d("cc", "user is found");
            if (user!=null){
                Log.d("cc", "user is not null");
                if (user.getPassword().equals(password)){
                    Log.d("cc", "pass correct");

                }else {
                    errorText.setText("Username/Password incorrect");
                }
            }
        }
    });



}
我的databaseHelper类,它使用SQLite

package edu.flying.panda.taskmanager;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHandler extends SQLiteOpenHelper{

    //db version
    private static final int DATABASE_VERSION = 1;
    //db name
    private static final String DATABASE_NAME = "userManager";
    //table name
    private static final String TABLE_USERS = "users";
    //user table column names
    private static final String KEY_ID = "id";
    private static final String KEY_USERNAME = "username";
    private static final String KEY_PASSWORD = "password";
    private static final String KEY_NAME = "name";
    private static final String KEY_EMAIL = "email";
    //constructor
    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }       
    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_USERS_TABLE = "CREATE TABLE" + TABLE_USERS + "(" + KEY_ID + 
                "INTEGER PRIMARY KEY," + KEY_USERNAME + "TEXT," + KEY_PASSWORD + "TEXT,"
                + KEY_NAME + "TEXT," + KEY_EMAIL + "TEXT" + ")";

        db.execSQL(CREATE_USERS_TABLE);
    }
    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);

        // Create tables again
        onCreate(db);
    }
    public void addUser(User user){
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_USERNAME, user.getUsername());
        values.put(KEY_PASSWORD, user.getPassword());
        values.put(KEY_NAME, user.getName());
        values.put(KEY_EMAIL, user.getEmail());

        //inserting row
        db.insert(TABLE_USERS, null, values);
        db.close();
    }
    //get user by id
    public User getUser(int id){
        SQLiteDatabase db = this.getReadableDatabase();

        //cursor returned will only be one row of the table, with the matching id
        Cursor cursor = db.query(TABLE_USERS, 
                new String[]{KEY_ID, KEY_USERNAME, KEY_PASSWORD, KEY_NAME, KEY_EMAIL},
                KEY_ID + "=?", new String[]{String.valueOf(id)}, null, null, null, null);

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

        User user = new User(Integer.parseInt(cursor.getString(0)),cursor.getString(1),cursor.getString(2),cursor.getString(3), cursor.getString(4));

        return user;

    }
    public  User getUser(String username){
        SQLiteDatabase db = this.getReadableDatabase();

        //cursor returned will only be one row of the table, with the matching id
        Cursor cursor = db.query(TABLE_USERS, 
                new String[]{KEY_ID, KEY_USERNAME , KEY_PASSWORD, KEY_NAME, KEY_EMAIL},
                KEY_USERNAME + "=?", new String[]{username}, null, null, null, null);

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

        User user = new User(Integer.parseInt(cursor.getString(0)),cursor.getString(1),cursor.getString(2),cursor.getString(3), cursor.getString(4));

        return user;

    }
    public List<User> getAllUsers(){
        List<User> userList = new ArrayList<User>();

        //select all query
        String selectQuery = "SELECT * FROM " + TABLE_USERS;

        SQLiteDatabase db = this.getReadableDatabase();
        //just a cursor that points to the user table TABLE_USERS
        Cursor cursor = db.rawQuery(selectQuery, null);

        //adding users to list
        if(cursor.moveToFirst()){
            do{
                User user = new User();
                user.setId(Integer.parseInt(cursor.getString(0)));
                user.setUsername(cursor.getString(1));
                user.setPassword(cursor.getString(2));
                user.setName(cursor.getString(3));
                user.setEmail(cursor.getString(4));

                userList.add(user);
            }while(cursor.moveToNext());
        }

        return userList;
    }
包edu.flying.panda.taskmanager;
导入java.util.ArrayList;
导入java.util.List;
导入android.content.ContentValues;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
公共类DatabaseHandler扩展了SQLiteOpenHelper{
//数据库版本
私有静态最终int数据库_VERSION=1;
//数据库名
私有静态最终字符串数据库\u NAME=“userManager”;
//表名
私有静态最终字符串表\u USERS=“USERS”;
//用户表列名
私有静态最终字符串密钥\u ID=“ID”;
私有静态最终字符串密钥\u USERNAME=“USERNAME”;
私有静态最终字符串密钥\u PASSWORD=“PASSWORD”;
私有静态最终字符串键\u NAME=“NAME”;
私有静态最终字符串密钥\u EMAIL=“EMAIL”;
//建造师
公共数据库处理程序(上下文){
super(上下文、数据库名称、null、数据库版本);
}       
//创建表
@凌驾
public void onCreate(SQLiteDatabase db){
字符串CREATE_USERS_TABLE=“CREATE TABLE”+TABLE_USERS+”(“+KEY_ID+
整型主键,“+KEY\u用户名+”文本,“+KEY\u密码+”文本,”
+按键名称+“文本”+“按键电子邮件+“文本”+”;
execSQL(创建用户表);
}
//升级数据库
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
//删除旧表(如果存在)
db.execSQL(“如果存在删除表”+表用户);
//再次创建表
onCreate(db);
}
public void addUser(用户){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues=新的ContentValues();
value.put(KEY_USERNAME,user.getUsername());
value.put(KEY_PASSWORD,user.getPassword());
value.put(KEY_NAME,user.getName());
value.put(KEY_EMAIL,user.getEmail());
//插入行
db.insert(表_用户,空,值);
db.close();
}
//按id获取用户
公共用户getUser(int-id){
SQLiteDatabase db=this.getReadableDatabase();
//返回的游标将仅为表的一行,具有匹配的id
Cursor=db.query(表用户,
新字符串[]{KEY_ID,KEY_用户名,KEY_密码,KEY_名称,KEY_EMAIL},
KEY_ID+“=?”,新字符串[]{String.valueOf(ID)},null,null,null,null);
if(cursor!=null)cursor.moveToFirst();
User User=新用户(Integer.parseInt(cursor.getString(0))、cursor.getString(1)、cursor.getString(2)、cursor.getString(3)、cursor.getString(4));
返回用户;
}
公共用户getUser(字符串用户名){
SQLiteDatabase db=this.getReadableDatabase();
//返回的游标将仅为表的一行,具有匹配的id
Cursor=db.query(表用户,
新字符串[]{KEY_ID,KEY_用户名,KEY_密码,KEY_名称,KEY_EMAIL},
KEY_USERNAME+“=?”,新字符串[]{USERNAME},null,null,null,null);
if(cursor!=null)cursor.moveToFirst();
User User=新用户(Integer.parseInt(cursor.getString(0))、cursor.getString(1)、cursor.getString(2)、cursor.getString(3)、cursor.getString(4));
返回用户;
}
公共列表getAllUsers(){
List userList=new ArrayList();
//选择所有查询
String selectQuery=“SELECT*FROM”+表格用户;
SQLiteDatabase db=this.getReadableDatabase();
//只是一个指向用户表的光标
Cursor Cursor=db.rawQuery(selectQuery,null);
//向列表中添加用户
if(cursor.moveToFirst()){
做{
用户=新用户();
user.setId(Integer.parseInt(cursor.getString(0));
user.setUsername(cursor.getString(1));
user.setPassword(cursor.getString(2));
user.setName(cursor.getString(3));
user.setEmail(cursor.getString(4));
添加(用户);
}while(cursor.moveToNext());
}
返回用户列表;
}
日志:

03-31 22:26:33.613: I/SqliteDatabaseCpp(538): sqlite returned: error code = 1, msg = near "TABLEusers": syntax error, db=/data/data/edu.flying.panda.taskmanager/databases/userManager
03-31 22:26:33.653: E/SQLiteOpenHelper(538): Couldn't open userManager for writing (will try read-only):
03-31 22:26:33.653: E/SQLiteOpenHelper(538): android.database.sqlite.SQLiteException: near "TABLEusers": syntax error: , while compiling: CREATE TABLEusers(idINTEGER PRIMARY KEY,usernameTEXT,passwordTEXT,nameTEXT,emailTEXT)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:134)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1899)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1839)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at edu.flying.panda.taskmanager.DatabaseHandler.onCreate(DatabaseHandler.java:37)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:165)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:231)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at edu.flying.panda.taskmanager.DatabaseHandler.getUser(DatabaseHandler.java:78)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at edu.flying.panda.taskmanager.LogIn$1.onClick(LogIn.java:55)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.view.View.performClick(View.java:3511)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.view.View$PerformClick.run(View.java:14105)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.os.Handler.handleCallback(Handler.java:605)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.os.Looper.loop(Looper.java:137)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at android.app.ActivityThread.main(ActivityThread.java:4424)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at java.lang.reflect.Method.invokeNative(Native Method)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at java.lang.reflect.Method.invoke(Method.java:511)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-31 22:26:33.653: E/SQLiteOpenHelper(538):    at dalvik.system.NativeStart.main(Native Method)
03-31 22:26:33.683: D/AndroidRuntime(538): Shutting down VM
03-31 22:26:33.683: W/dalvikvm(538): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
03-31 22:26:33.713: E/AndroidRuntime(538): FATAL EXCEPTION: main
03-31 22:26:33.713: E/AndroidRuntime(538): android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 0 to 1: /data/data/edu.flying.panda.taskmanager/databases/userManager
03-31 22:26:33.713: E/AndroidRuntime(538):  at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:244)
03-31 22:26:33.713: E/AndroidRuntime(538):  at edu.flying.panda.taskmanager.DatabaseHandler.getUser(DatabaseHandler.java:78)
03-31 22:26:33.713: E/AndroidRuntime(538):  at edu.flying.panda.taskmanager.LogIn$1.onClick(LogIn.java:55)
03-31 22:26:33.713: E/AndroidRuntime(538):  at android.view.View.performClick(View.java:3511)
03-31 22:26:33.713: E/AndroidRuntime(538):  at android.view.View$PerformClick.run(View.java:14105)
03-31 22:26:33.713: E/AndroidRuntime(538):  at android.os.Handler.handleCallback(Handler.java:605)
03-31 22:26:33.713: E/AndroidRuntime(538):  at android.os.Handler.dispatchMessage(Handler.java:92)
03-31 22:26:33.713: E/AndroidRuntime(538):  at android.os.Looper.loop(Looper.java:137)
03-31 22:26:33.713: E/AndroidRuntime(538):  at android.app.ActivityThread.main(ActivityThread.java:4424)
03-31 22:26:33.713: E/AndroidRuntime(538):  at java.lang.reflect.Method.invokeNative(Native Method)
03-31 22:26:33.713: E/AndroidRuntime(538):  at java.lang.reflect.Method.invoke(Method.java:511)
03-31 22:26:33.713: E/AndroidRuntime(538):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-31 22:26:33.713: E/AndroidRuntime(538):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-31 22:26:33.713: E/AndroidRuntime(538):  at dalvik.system.NativeStart.main(Native Method)
03-31 22:26:33.613:I/SqliteDatabaseCpp(538):sqlite返回:错误代码=1,msg=near“TABLEusers”:语法错误,db=/data/data/edu.flying.panda.taskmanager/databases/userManager
03-31 22:26:33.653:E/SQLiteOpenHelper(538):无法打开userManager进行写入(将尝试只读):
03-31 22:26:33.653:E/SQLiteOpenHelper(538):android.database.sqlite.sqlite异常:靠近“TABLEusers”:语法错误:,编译时:创建TABLEusers(idINTEGER主键、usernameTEXT、passwordTEXT、nameTEXT、emailTEXT)
03-31 22:26:33.653:E/SQLiteOpenHelper(538):在android.database.sqlite.SQLiteCompiledSql.native_编译(本机方法)
03-31 22:26:33.653:E/SQLiteOpenHelper(538):位于android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:68)
03-31 22:26:33.653:E/SQLiteOpenHelper(538):位于android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:134)
03-31 22:26:33.653:E/SQLiteOpenHelper(538):位于android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
03-31 22:26:33.653:E/SQLiteOpenHelper(538):位于android.database.sqlite.SQLiteStatement.acquiredandlock(SQLiteStatement.java:260)
03-31 22:26:33.653:E/SQLiteOpenHelper(538):位于android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
03-31 22:26:33.653:E/SQLiteOpenHelper(538):位于android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1899)
03-31 22:26:33.653:E/SQLiteOpenHelper(538):位于android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1839)
03-31 22:26:33.653:E/
String CREATE_USERS_TABLE = "CREATE TABLE " + TABLE_USERS + "(" + KEY_ID + 
" INTEGER PRIMARY KEY," + KEY_USERNAME + " TEXT," + KEY_PASSWORD + " TEXT,"
+ KEY_NAME + " TEXT," + KEY_EMAIL + " TEXT" + ");";
String query = String.format("CREATE TABLE %s (%s INTEGER PRIMARY KEY,
%s TEXT, %s TEXT, %s TEXT, %s TEXT);", TABLE_USERS, KEY_ID, KEY_USERNAME,
KEY_PASSWORD, KEY_NAME, KEY_EMAIL);