Android 为什么会出现以下错误:';没有这样的专栏“;模块"';?

Android 为什么会出现以下错误:';没有这样的专栏“;模块"';?,android,android-sqlite,Android,Android Sqlite,有人知道我为什么会出现上述错误吗 代码如下: 这是保存我的所有数据库信息的类: package com.petroc.nationaldiploma; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class MySQLi

有人知道我为什么会出现上述错误吗

代码如下:

这是保存我的所有数据库信息的类:

package com.petroc.nationaldiploma;

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

public class MySQLiteHelper extends SQLiteOpenHelper {

public static final String TABLE_GRADES = "grades";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_GRADE = "grade";
public static final String COLUMN_MODULE = "module";

private static final String DATABASE_NAME = "grades.db";
private static final int DATABASE_VERSION = 1;

// Database creation sql statement
private static final String DATABASE_CREATE = "create table "
        + TABLE_GRADES + "(" + COLUMN_ID
        + " integer primary key autoincrement, " + COLUMN_GRADE
        + " text not null" + COLUMN_MODULE + " text not null" + ");";

/*
 * private static final String DATABASE_CREATE = "create table " +
 * TABLE_GRADES + "(" + COLUMN_ID + " integer primary key autoincrement, " +
 * COLUMN_GRADE + " text not null);";
 */

public MySQLiteHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase database) {
    database.execSQL(DATABASE_CREATE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(MySQLiteHelper.class.getName(),
            "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_GRADES);
    onCreate(db);
}
}
这个类创建用于创建和操作数据库的方法

package com.petroc.nationaldiploma;

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

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

public class GradesDataSource {

// Database fields
private SQLiteDatabase database;
private final MySQLiteHelper dbHelper;

  private final String[] allColumns = { MySQLiteHelper.COLUMN_ID,
  MySQLiteHelper.COLUMN_GRADE, MySQLiteHelper.COLUMN_MODULE };


/*private final String[] allColumns = { MySQLiteHelper.COLUMN_ID,
        MySQLiteHelper.COLUMN_GRADE };*/

public GradesDataSource(Context context) {
    dbHelper = new MySQLiteHelper(context);
}

public void open() throws SQLException {
    database = dbHelper.getWritableDatabase();
}

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

public Grade createGrade(String grade, String module) {
    ContentValues values = new ContentValues();
    values.put(MySQLiteHelper.COLUMN_GRADE, grade);
    values.put(MySQLiteHelper.COLUMN_MODULE, module);
    long insertId = database.insert(MySQLiteHelper.TABLE_GRADES, null,
            values);
    Cursor cursor = database.query(MySQLiteHelper.TABLE_GRADES, allColumns,
            MySQLiteHelper.COLUMN_ID + " = " + insertId, null, null, null,
            null);
    cursor.moveToFirst();
    Grade newGrade = cursorToGrade(cursor);
    cursor.close();
    return newGrade;
}

/*
 * public Grade createGrade(String grade) { ContentValues values = new
 * ContentValues(); values.put(MySQLiteHelper.COLUMN_GRADE, grade); long
 * insertId = database.insert(MySQLiteHelper.TABLE_GRADES, null, values);
 * Cursor cursor = database.query(MySQLiteHelper.TABLE_GRADES, allColumns,
 * MySQLiteHelper.COLUMN_ID + " = " + insertId, null, null, null, null);
 * cursor.moveToFirst(); Grade newGrade = cursorToGrade(cursor);
 * cursor.close(); return newGrade; }
 * 
 * public void deleteGrade(Grade grade) { long id = grade.getId();
 * System.out.println("Grade deleted with id: " + id);
 * database.delete(MySQLiteHelper.TABLE_GRADES, MySQLiteHelper.COLUMN_ID +
 * " = " + id, null); }
 */

public List<Grade> getAllGrades() {
    List<Grade> grades = new ArrayList<Grade>();

    Cursor cursor = database.query(MySQLiteHelper.TABLE_GRADES, allColumns,
            null, null, null, null, null);

    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        Grade grade = cursorToGrade(cursor);
        grades.add(grade);
        cursor.moveToNext();
    }
    // Make sure to close the cursor
    cursor.close();
    return grades;
}

private Grade cursorToGrade(Cursor cursor) {
    Grade grade = new Grade();
    grade.setId(cursor.getLong(0));
    grade.setGrade(cursor.getString(1));
    return grade;
}
}
包com.petroc.national文凭;
导入java.util.ArrayList;
导入java.util.List;
导入android.content.ContentValues;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.SQLException;
导入android.database.sqlite.SQLiteDatabase;
公共类GradesDataSource{
//数据库字段
专用数据库;
私有最终MySQLiteHelper dbHelper;
私有最终字符串[]allColumns={MySQLiteHelper.COLUMN\u ID,
MySQLiteHelper.COLUMN_GRADE,MySQLiteHelper.COLUMN_MODULE};
/*私有最终字符串[]allColumns={MySQLiteHelper.COLUMN\u ID,
MySQLiteHelper.COLUMN_GRADE}*/
公共等级数据源(上下文){
dbHelper=新的MySQLiteHelper(上下文);
}
public void open()引发SQLException{
database=dbHelper.getWritableDatabase();
}
公众假期结束(){
dbHelper.close();
}
公共等级createGrade(字符串等级、字符串模块){
ContentValues=新的ContentValues();
value.put(MySQLiteHelper.COLUMN_GRADE,GRADE);
value.put(MySQLiteHelper.COLUMN_模块,模块);
long insertId=database.insert(MySQLiteHelper.TABLE_,null,
价值观);
Cursor Cursor=database.query(MySQLiteHelper.TABLE_GRADES,allColumns,
MySQLiteHelper.COLUMN_ID+“=”+insertId,null,null,null,
无效);
cursor.moveToFirst();
Grade newGrade=光标或坡度(光标);
cursor.close();
返回新等级;
}
/*
*公共级createGrade(字符串级){ContentValues=new
*ContentValues();values.put(MySQLiteHelper.COLUMN_GRADE,GRADE);长
*insertId=database.insert(MySQLiteHelper.TABLE_GRADES,null,value);
*Cursor Cursor=database.query(MySQLiteHelper.TABLE_GRADES,allColumns,
*MySQLiteHelper.COLUMN_ID+“=”+insertId,null,null,null,null);
*cursor.moveToFirst();Grade newGrade=cursorToGrade(cursor);
*cursor.close();返回newGrade;}
* 
*public void deleteGrade(Grade Grade){long id=Grade.getId();
*System.out.println(“用id:+id删除等级”);
*database.delete(MySQLiteHelper.TABLE_GRADES,MySQLiteHelper.COLUMN_ID+
*“=”+id,null);}
*/
公共列表getAllGrades(){
列表等级=新的ArrayList();
Cursor Cursor=database.query(MySQLiteHelper.TABLE_GRADES,allColumns,
空,空,空,空,空,空);
cursor.moveToFirst();
而(!cursor.isAfterLast()){
等级=光标等级(光标);
等级。添加(等级);
cursor.moveToNext();
}
//确保关闭光标
cursor.close();
返回等级;
}
专用坡度游标坡度(游标){
等级=新等级();
grade.setId(cursor.getLong(0));
grade.setGrade(cursor.getString(1));
返回等级;
}
}
在cursorToGrade()函数中,当从db中获取值时,您应该使用类似的方法,而不是硬编码0&1

grade.setId(cursor.getLong(cursor.getColumnIndex(MySQLiteHelper.COLUMN_ID ));
grade.setGrade(cursor.getString(cursor.getColumnIndex(MySQLiteHelper.COLUMN_MODULE));

在null后面添加空格:

+ " text not null, " + COLUMN_MODULE + " text not null" + ");";

您忘记了字符串中的列名后面有一个简单的
。这就是您无法找到
列的原因。改变

private static final String DATABASE_CREATE = "create table "
        + TABLE_GRADES + "(" + COLUMN_ID
        + " integer primary key autoincrement, " + COLUMN_GRADE
        + " text not null" + COLUMN_MODULE + " text not null" + ");";

希望这能有所帮助。

请参阅此列“文本不为空”您缺少逗号(,)和空后空格

private static final String DATABASE_CREATE = "create table " + TABLE_GRADES 
        + "(" + COLUMN_ID + " integer primary key autoincrement, " 
        + COLUMN_GRADE + " text not null" 
        + COLUMN_MODULE + " text not null" + ");";
您的create table查询错误,请先更正它

private static final String DATABASE_CREATE = "create table " + TABLE_GRADES + "(" 
        + COLUMN_ID + " integer primary key autoincrement, " 
        + COLUMN_GRADE + " text not null, " 
        + COLUMN_MODULE + " text not null" + ");";

更正此“创建查询并删除数据库”或卸载应用程序,然后再次运行应用程序并进行检查


我希望它能对您有所帮助。

卸载您的应用程序,并在每次修改表时再次运行。我做了更改,但仍然遇到相同的问题:/I做了更改,但仍然遇到相同的问题:/n尝试在null后添加逗号。问题出在SQl中,因此您可以通过dab shell打开设备上的数据库,查看结构是否正确。确保在对创建表语法进行任何更改后重新创建表。我进行了更改,但仍然遇到相同的问题:/@ChrisBennett U在清除数据并重新安装后检查了?我也要清除数据了吗?我重新安装了,但没有清除数据。。。将尝试,谢谢:)如果数据库已经存在,它将不会再次创建数据库。因此,必须清除数据并重新安装应用程序,才能再次强制创建数据库@ChrisBennettI做了更改并卸载了应用程序,但仍然遇到同样的问题:/执行了上述操作。我在phpmyadmin中创建了一个表,以测试它是否会提供相同的sql代码来创建该表,并且它确实提供了一些例外,比如java所需的+符号。但是,我看不到任何表明我的结构有问题的更改。你的意思是因为null后面没有逗号和空格,所以查询是错误的吗?如果没有,你能详细说明一下它有什么问题吗?嗨,克里斯,你在调试你的查询吗?如果没有,请在logcat中打印这个create table变量,复制这个查询并在phpmyadmin上运行它。然后检查输出。
private static final String DATABASE_CREATE = "create table " + TABLE_GRADES + "(" 
        + COLUMN_ID + " integer primary key autoincrement, " 
        + COLUMN_GRADE + " text not null, " 
        + COLUMN_MODULE + " text not null" + ");";