【问题标题】:android studio with sqlite error带有sqlite错误的android studio
【发布时间】:2017-06-21 09:26:51
【问题描述】:

我想在 android studio 中编写一个带有 SQLite 数据库的应用程序。数据库表的一列应在微调器中读出。但是当我尝试使用微调器启动活动时,应用程序崩溃并出现以下错误:

错误代码:1 (SQLITE_ERROR) 原因:SQL(查询)错误或缺少数据库。 (“FROM”附近:语法错误(代码1):,编译时:SELECT Gruppe,FROM Kunden_list)

这是我的一门课程的代码。我认为错误是在这个类中还是我错了?

package com.example.katjarummler.hundeschule_petra_bennemann;



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

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

public class HundeschuleMemoDBHelper extends SQLiteOpenHelper {


private static final String LOG_TAG =             
HundeschuleMemoDBHelper.class.getSimpleName();



public static final String DB_NAME = "Kunden_list.db";
public static final int DB_VERSION = 6;

public static final String TABLE_KUNDEN_LIST = "Kunden_list";


public  static final String COLUMN_ID = "_id";
public  static final  String COLUMN_KName = "Name";
public  static final String COLUMN_GNAME = "Gruppe";
public  static final String COLUMN_KTELEFON = "Telefon";
public  static final String COLUMN_HUND = "Hund";
public  static final String COLUMN_BEGINN = "Beginn";
public  static final String COLUMN_CHECKED = "checked";



public  static final String SQL_CREATE = "CREATE TABLE " + 
TABLE_KUNDEN_LIST +
        "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
        COLUMN_KName + " TEXT NOT NULL, " +
        COLUMN_GNAME + " TEXT NOT NULL, " +
        COLUMN_KTELEFON + " TEXT NOT NULL, " +
        COLUMN_HUND + " TEXT NOT NULL, " +
        COLUMN_BEGINN + " TEXT NOT NULL, " +
        COLUMN_CHECKED + " BOOLEAN NOT NULL DEFAULT 0);";


public  static final String SQL_DROP = "DROP TABLE IF EXISTS " + 
TABLE_KUNDEN_LIST;



public HundeschuleMemoDBHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
    Log.d(LOG_TAG, "DBHelper hat die Datenbank: " + getDatabaseName() + 
" erzeugt.");
}



//Die onCreate-Methode wird nur aufgerufen, falls die Datenbank noch 
nicht existiert
public void onCreate(SQLiteDatabase db) {
    try{
        Log.d(LOG_TAG, "Die Tabelle wird mit SQL-Befehl: " + SQL_CREATE 
+ " angelegt.");
        db.execSQL(SQL_CREATE);

    }
    catch(Exception ex){
        Log.e(LOG_TAG, "Fehler beim Anlegen der Tabelle: " +     
ex.getMessage());
    }

}


// Die onUpgrade-Methode wird aufgerufen, sobald die neue 
Versionsnummer höher
// als die alte Versionsnummer ist und somit ein Upgrade notwendig wird

public void onUpgrade(SQLiteDatabase db, int oldVersion, int 
newVersion) {
    Log.d(LOG_TAG, "Die Tabelle mit Versionsnummer " + oldVersion + " 
wird entfernt.");
    db.execSQL(SQL_DROP);

    onCreate(db);
}


public List<HundeschuleMemoKunden> getAll(){

    SQLiteDatabase database = this.getReadableDatabase();
    String selectQuery = "SELECT " +
            COLUMN_GNAME + " , " +
            " FROM " + TABLE_KUNDEN_LIST;

    List<HundeschuleMemoKunden> gruppenList = new 
ArrayList<HundeschuleMemoKunden>();
    Cursor cursor = database.rawQuery(selectQuery, null);  //The mark 
of the error is here

    //looping through all rows and adding to list
    if(cursor.moveToFirst()){
        do{

            HundeschuleMemoKunden gruppe = new 
HundeschuleMemoKunden("kName", "gName", "kTelefon", "hName", "beginn");

 gruppe.setgName(cursor.getString(cursor.getColumnIndex
(this.COLUMN_GNAME))
);
            gruppenList.add(gruppe);

        }while(cursor.moveToNext());
    }

    cursor.close();
    database.close();
    return gruppenList;
}



}

【问题讨论】:

  • 您的选择查询错误。您很可能错过了 " , "-comma 之后 FROM 之前的列。

标签: android sqlite


【解决方案1】:

错误在你的 getAll() 方法中,如错误详细信息所述:

String selectQuery = "SELECT " +
        COLUMN_GNAME + " , " +
        " FROM " + TABLE_KUNDEN_LIST;

SELECT 查询中的语法错误,FROM 旁边的逗号。改为:

String selectQuery = "SELECT " +
    COLUMN_GNAME +
    " FROM " + TABLE_KUNDEN_LIST;

【讨论】:

    【解决方案2】:
    public  static final String SQL_CREATE = "CREATE TABLE " + 
    TABLE_KUNDEN_LIST +
        "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
        COLUMN_KName + " TEXT NOT NULL, " +
        COLUMN_GNAME + " TEXT NOT NULL, " +
        COLUMN_KTELEFON + " TEXT NOT NULL, " +
        COLUMN_HUND + " TEXT NOT NULL, " +
        COLUMN_BEGINN + " TEXT NOT NULL, " +
        COLUMN_CHECKED + " BOOLEAN NOT NULL DEFAULT 0);";
    

    sqlite 中不存在 BOOLEAN,它应该是一个 Integer 列,解析它的位置:

    //value is 1 then true else false
    value > 0 ? true : false
    

    插入应该是

     //value is true = 1 else 0
    value ? 1 : 0
    

    如果准确无误,则可能无法正确创建表格。 还要从您的选择语句中删除逗号。也不要进行原始查询,您应该熟悉 database.query、database.insert、database.delete 等。

    【讨论】:

      猜你喜欢
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多