如何修复android.database.sqlite.SQLiteException:near“ - ”:语法错误(代码1):,编译时: -

时间:2015-12-09 16:05:07

标签: android sqlite syntax

我正在创建一个包含数据库存储的android应用程序,在这里我需要存储浮点值,然后从数据库中检索浮点值到编辑文本字段。当我执行应用程序时,它说“ android.database.sqlite.SQLiteException:靠近“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());
            }*/
        }

这是我的logcat:

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

2 个答案:

答案 0 :(得分:0)

删除OFFSETS_B_FUSE与括号之间的空格 OFFSETS_B_FUSE +&#34;(&#34;

<?php

include('../config/connection.php');

if (isset($_POST['submit'])){

if (isset($_GET['encrypt'])){

    $get_email   = $_GET['email'];
    $get_encrypt = $_GET['encrypt'];

    $q = "SELECT * FROM users WHERE email = '$get_email'";
    $r = mysqli_query($dbc, $q) OR die(mysqli_error());

    $row = mysqli_fetch_assoc($r);

        $db_encrypt  = $row['passreset'];
        $db_email    = $row['email'];


    if ($get_email == $db_email AND $get_encrypt == $db_encrypt){

        $newpass     = mysqli_real_escape_string($dbc,$_POST['newpass']);
        $newpass1    = mysqli_real_escape_string($dbc,$_POST['newpass1']);
        $post_email  = $_POST['email'];
        $encrypt     = $_GET['encrypt'];
        $passrst     = md5(SHA1($newpass));

        if ( $newpass == '' OR $newpass1 == '') {

            $message = 'Both fields required';
        } 
        if($newpass != $newpass1 ) {

                $message = 'passwords dont match, please try again';

            } if(strlen($newpass)<6 OR strlen($newpass1)>20) {

                $message = 'Password must be 6 to 20 characters';
            }

            if ($message == ''){

            $q = "UPDATE users SET password='$passrst' AND passreset='0' WHERE email='$email'";
            $r = mysqli_query($dbc, $q);

            }

        } else "something went wrong please try again.";
    }
}
?>

希望有效!

答案 1 :(得分:0)

请在下面找到代码,希望对您有所帮助

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());

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

你必须调用getDB();函数进入你的方法得到SQLiteDatabase并且必须关闭closeDatabase();两者都是同步的,因此从多线程执行时不会出现异常