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