Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复android.database.sqlite.SQLiteException:near"-&引用;:编译时出现语法错误(代码1):-_Android_Sqlite_Syntax - Fatal编程技术网

如何修复android.database.sqlite.SQLiteException:near"-&引用;:编译时出现语法错误(代码1):-

如何修复android.database.sqlite.SQLiteException:near"-&引用;:编译时出现语法错误(代码1):-,android,sqlite,syntax,Android,Sqlite,Syntax,我正在创建一个包含数据库存储的android应用程序,这里我需要存储浮点值,然后从数据库检索浮点值到编辑文本字段。当我执行应用程序时,它会显示类似“android.database.sqlite.SQLiteException:near”Beforefuseoffsets”:语法错误(代码1):,编译时:Beforefuseoffsets”。我知道是语法错误,但我没有找到该错误的位置,任何人都可以告诉我如何通过该错误。 这是我的数据库代码: package com.lakshman.androi

我正在创建一个包含数据库存储的android应用程序,这里我需要存储浮点值,然后从数据库检索浮点值到编辑文本字段。当我执行应用程序时,它会显示类似“android.database.sqlite.SQLiteException:near”Beforefuseoffsets”:语法错误(代码1):,编译时:Beforefuseoffsets”。我知道是语法错误,但我没有找到该错误的位置,任何人都可以告诉我如何通过该错误。 这是我的数据库代码:

package com.lakshman.androidfiles;

    import java.io.File;

    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.SQLException;
    import android.database.sqlite.SQLiteDatabase;
    import android.view.View;

    public class LoginDataBaseAdapter 
    {
            //Database name
            static final String DATABASE_NAME = "MilanloginRegistration.db";
            static final int DATABASE_VERSION = 1;
            public static final int NAME_COLUMN = 1;
            public static final String ID ="ID";
            // TODO: Create public field for each column in your table.
            // SQL Statement to create a new database.
            public static final String OFFSETS_B_FUSE = "Beforefuseoffsets";


            public static final String OFFSET_VALUE="offsetvalues";

            public static DataBaseHelper database_helper;
            public Context context_db;


            static final String OFFSETS_BC_FUSE ="CREATE TABLE IF NOT EXISTS "+OFFSETS_B_FUSE+" ("+ID+" integer primary key autoincrement, "+OFFSET_VALUE+" INT)";


            static float[] offset_entry;
            // Variable to hold the database instance
            public static  SQLiteDatabase db;
            // Context of the application using the database.
            private static Context context;
            // Database open/upgrade helper
            private static DataBaseHelper dbHelper;
            public  LoginDataBaseAdapter(Context _context) 
            {
                context = _context;
                dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
            }
            public  LoginDataBaseAdapter open() throws SQLException 
            {
                db = dbHelper.getWritableDatabase();
                return this;
            }
            public void close() 
            {
                db.close();
            }

            public  SQLiteDatabase getDatabaseInstance()
            {
                return db;
            }
            public LoginDataBaseAdapter opentoRead() throws android.database.SQLException{

                dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
                db = dbHelper.getReadableDatabase();
                return this;
            }
            public LoginDataBaseAdapter opentoWrite() throws android.database.SQLException{

                dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
                db = dbHelper.getWritableDatabase();
                return this;
            }

            public void Close(){
                dbHelper.close();
            }



            public static void insert_offset_Entry(float values)
            {
               ContentValues newValues = new ContentValues();

                newValues.put(OFFSET_VALUE,values);
                database_helper = new DataBaseHelper(context,DATABASE_NAME,null,DataBaseHelper.VERSION);
                db = database_helper.getWritableDatabase();
                db.insert(OFFSETS_B_FUSE,null,newValues);
            }

            public LoginDataBaseAdapter db_to_write() {
                database_helper = new DataBaseHelper(context,DATABASE_NAME,null,DataBaseHelper.VERSION);
                db = database_helper.getWritableDatabase();
                return this;
            }






            /*public void Display(View v){
                Cursor c = db.rawQuery("select * from MilanloginRegistration", null);

                c.moveToFirst();
                do{
                    String username = c.getFloat(c.getColumnIndex(""));
                    String password = c.getString(1);


                }while(c.moveToNext());
            }*/
        }
这是我的日志:

12-09 17:10:55.583: E/AndroidRuntime(3187): FATAL EXCEPTION: main
12-09 17:10:55.583: E/AndroidRuntime(3187): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lakshman.androidfiles/com.lakshman.androidfiles.MainActivity}: android.database.sqlite.SQLiteException: near "Beforefuseoffsets": syntax error (code 1): , while compiling: Beforefuseoffsets
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.os.Looper.loop(Looper.java:137)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.app.ActivityThread.main(ActivityThread.java:5041)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at java.lang.reflect.Method.invokeNative(Native Method)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at java.lang.reflect.Method.invoke(Method.java:511)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at dalvik.system.NativeStart.main(Native Method)
12-09 17:10:55.583: E/AndroidRuntime(3187): Caused by: android.database.sqlite.SQLiteException: near "Beforefuseoffsets": syntax error (code 1): , while compiling: Beforefuseoffsets
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at com.lakshman.androidfiles.DataBaseHelper.onCreate(DataBaseHelper.java:26)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at com.lakshman.androidfiles.LoginDataBaseAdapter.open(LoginDataBaseAdapter.java:47)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at com.lakshman.androidfiles.MainActivity.onCreate(MainActivity.java:23)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.app.Activity.performCreate(Activity.java:5104)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
12-09 17:10:55.583: E/AndroidRuntime(3187):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
12-09 17:10:55.583: E/AndroidRuntime(3187):     ... 11 more
12-09 17:10:55.583:E/AndroidRuntime(3187):致命异常:main
12-09 17:10:55.583:E/AndroidRuntime(3187):java.lang.RuntimeException:无法启动活动组件信息{com.lakshman.androidfiles/com.lakshman.androidfiles.MainActivity}:android.database.sqlite.SQLiteException:靠近“Beforefuseoffsets”:语法错误(代码1):,编译时:Beforefuseoffsets
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
12-09 17:10:55.583:E/AndroidRuntime(3187):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.app.ActivityThread.access$600(ActivityThread.java:141)
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.os.Handler.dispatchMessage(Handler.java:99)上
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.os.Looper.loop(Looper.java:137)上
12-09 17:10:55.583:E/AndroidRuntime(3187):位于android.app.ActivityThread.main(ActivityThread.java:5041)
12-09 17:10:55.583:E/AndroidRuntime(3187):位于java.lang.reflect.Method.Invokenactive(本机方法)
12-09 17:10:55.583:E/AndroidRuntime(3187):位于java.lang.reflect.Method.invoke(Method.java:511)
12-09 17:10:55.583:E/AndroidRuntime(3187):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-09 17:10:55.583:E/AndroidRuntime(3187):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-09 17:10:55.583:E/AndroidRuntime(3187):在dalvik.system.NativeStart.main(本机方法)
12-09 17:10:55.583:E/AndroidRuntime(3187):由以下原因引起:android.database.sqlite.SQLiteException:near“Beforefuseoffsets”:编译:Beforefuseoffsets时出现语法错误(代码1):
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.database.sqlite.SQLiteConnection.acquiredPreparedStatement(SQLiteConnection.java:882)
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
12-09 17:10:55.583:E/AndroidRuntime(3187):位于android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
12-09 17:10:55.583:E/AndroidRuntime(3187):位于android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
12-09 17:10:55.583:E/AndroidRuntime(3187):位于android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
12-09 17:10:55.583:E/AndroidRuntime(3187):位于com.lakshman.androidfiles.DataBaseHelper.onCreate(DataBaseHelper.java:26)
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
12-09 17:10:55.583:E/AndroidRuntime(3187):在com.lakshman.androidfiles.logindabaseadapter.open(logindabaseadapter.java:47)
12-09 17:10:55.583:E/AndroidRuntime(3187):位于com.lakshman.androidfiles.MainActivity.onCreate(MainActivity.java:23)
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.app.Activity.performCreate(Activity.java:5104)上
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)上
12-09 17:10:55.583:E/AndroidRuntime(3187):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
12-09 17:10:55.583:E/AndroidRuntime(3187):。。。还有11个

删除偏移量保险丝和括号之间的空格偏移量保险丝+(“


希望能奏效!

请查找下面的代码,希望它能帮助您

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

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicInteger;

/**
* Created by rohitp on 12/9/2015.
*/
public class DatabaseAdapter {

static String TAG = "LoginDataBaseAdapter";

public static final String OFFSETS_B_FUSE = "Beforefuseoffsets";

public static final String OFFSET_VALUE="offsetvalues";

private static final String ID = "ID" ;

static final String OFFSETS_BC_FUSE ="CREATE TABLE IF NOT EXISTS "+OFFSETS_B_FUSE+" ("+ID+" integer primary key autoincrement, "+OFFSET_VALUE+" INT)";

private static DatabaseHelper mDbHelper;
private static SQLiteDatabase mDb;
private  static Context mContext;


private AtomicInteger mDbConnCount = new AtomicInteger();

DatabaseAdapter(Context context){
    mContext = context;
    mDbHelper = new DatabaseHelper(mContext);
}

public static void openDatabase() throws SQLException {
    mDb = mDbHelper.getWritableDatabase();
}



public synchronized boolean closeDatabase() {
    try {
        if(mDbConnCount.decrementAndGet() == 0) {
            mDbHelper.close();
            Log.d(TAG, "Database Closed");
        }
        return true;
    } catch (Exception ex) {
        Log.e(TAG, ex.getMessage());
        return false;
    }
}

private synchronized SQLiteDatabase getDB(){
    if(mDbConnCount.incrementAndGet() == 1){
        openDatabase();
        Log.d(TAG,"Database Opened");
    }
    return mDb;
}

private static class DatabaseHelper extends SQLiteOpenHelper {

    // Data base version
    private static int databaseVersion = 1;
    // Data base name
    private static String databaseName = "KVStore.db3";


    DatabaseHelper (final Context context) {
        super(context, databaseName, null, databaseVersion);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        try{
            db.execSQL(OFFSETS_BC_FUSE);
            Log.i(TAG,"Database Successfully Created");
        }catch (Exception e){
            Log.e(TAG,"Exception in creation "+e.getMessage());

        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

public int putInt(int value){
    try{

        ContentValues args = new ContentValues();

        args.put(OFFSET_VALUE,value);
        getDB().insert(OFFSETS_B_FUSE,null,args);

        return 0;
    }catch (Exception e){
        Log.e(TAG," Error "+e.getMessage());
        return -1;
    }
    finally {
        closeDatabase();
    }
}


public ArrayList<Integer> getInt(){
    ArrayList<Integer> mInteger = new ArrayList<Integer>();
    Cursor reader;
    int ret = 0;
    String cSQL = "SELECT "+OFFSET_VALUE+" FROM "+OFFSETS_B_FUSE;
    try{
        reader = getDB().rawQuery(cSQL, null);
        if (reader != null && reader.getCount() > 0) {
            while(reader.moveToNext()){
                mInteger.add(reader.getInt(0));
            }
            return mInteger;
        }
        else {
            return null;
        }
    }
    catch (Exception ex)
    {
        Log.e(TAG, " error "+ex.getMessage());
        return null;
    }
    finally {
        closeDatabase();
    }

}

}
实际上,您的代码不是线程安全的,因为您正在创建多个数据库实例


您必须在方法get SQLiteDatabase中调用getDB();函数,并且必须关闭closeDatabase();这两个函数都是同步的,因此从多线程执行时不会出现异常

I post my logcat toooYoure也丢失了“;“字符串末尾的分号静态最终字符串偏移量\u BC\u FUSE=“创建表,如果不存在”+OFFSET_B_FUSE+“(“+ID+”integer主键自动递增“+OFFSET_VALUE+”INT)”;“我在上面更改了我的代码段,这是什么意思?在查询的末尾@kd8bnyI放置了这个,但仍然是相同的错误android.database.sqlite.SQLiteException:near“Beforefuseoffsets”:语法错误(代码1):让我们看看那个helper类@Rohit Patil
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicInteger;

/**
* Created by rohitp on 12/9/2015.
*/
public class DatabaseAdapter {

static String TAG = "LoginDataBaseAdapter";

public static final String OFFSETS_B_FUSE = "Beforefuseoffsets";

public static final String OFFSET_VALUE="offsetvalues";

private static final String ID = "ID" ;

static final String OFFSETS_BC_FUSE ="CREATE TABLE IF NOT EXISTS "+OFFSETS_B_FUSE+" ("+ID+" integer primary key autoincrement, "+OFFSET_VALUE+" INT)";

private static DatabaseHelper mDbHelper;
private static SQLiteDatabase mDb;
private  static Context mContext;


private AtomicInteger mDbConnCount = new AtomicInteger();

DatabaseAdapter(Context context){
    mContext = context;
    mDbHelper = new DatabaseHelper(mContext);
}

public static void openDatabase() throws SQLException {
    mDb = mDbHelper.getWritableDatabase();
}



public synchronized boolean closeDatabase() {
    try {
        if(mDbConnCount.decrementAndGet() == 0) {
            mDbHelper.close();
            Log.d(TAG, "Database Closed");
        }
        return true;
    } catch (Exception ex) {
        Log.e(TAG, ex.getMessage());
        return false;
    }
}

private synchronized SQLiteDatabase getDB(){
    if(mDbConnCount.incrementAndGet() == 1){
        openDatabase();
        Log.d(TAG,"Database Opened");
    }
    return mDb;
}

private static class DatabaseHelper extends SQLiteOpenHelper {

    // Data base version
    private static int databaseVersion = 1;
    // Data base name
    private static String databaseName = "KVStore.db3";


    DatabaseHelper (final Context context) {
        super(context, databaseName, null, databaseVersion);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        try{
            db.execSQL(OFFSETS_BC_FUSE);
            Log.i(TAG,"Database Successfully Created");
        }catch (Exception e){
            Log.e(TAG,"Exception in creation "+e.getMessage());

        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

public int putInt(int value){
    try{

        ContentValues args = new ContentValues();

        args.put(OFFSET_VALUE,value);
        getDB().insert(OFFSETS_B_FUSE,null,args);

        return 0;
    }catch (Exception e){
        Log.e(TAG," Error "+e.getMessage());
        return -1;
    }
    finally {
        closeDatabase();
    }
}


public ArrayList<Integer> getInt(){
    ArrayList<Integer> mInteger = new ArrayList<Integer>();
    Cursor reader;
    int ret = 0;
    String cSQL = "SELECT "+OFFSET_VALUE+" FROM "+OFFSETS_B_FUSE;
    try{
        reader = getDB().rawQuery(cSQL, null);
        if (reader != null && reader.getCount() > 0) {
            while(reader.moveToNext()){
                mInteger.add(reader.getInt(0));
            }
            return mInteger;
        }
        else {
            return null;
        }
    }
    catch (Exception ex)
    {
        Log.e(TAG, " error "+ex.getMessage());
        return null;
    }
    finally {
        closeDatabase();
    }

}

}
    DatabaseAdapter mDataAdp = new DatabaseAdapter(getApplicationContext());
    mDataAdp.putInt(20);
    mDataAdp.putInt(21);
    mDataAdp.putInt(22);
    Log.d("Database Output",mDataAdp.getInt().toString());