2013-04-23 145 views
2

有谁知道为什么我会得到上述错误?为什么我会收到以下错误:'no such column'module''?

这里是代码:

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

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; 
} 
} 
+0

卸载您的应用程序并在每次修改表格时再次运行。 – 2013-04-23 02:01:21

回答

0

你已经忘记了你的弦一柱名经过简单,。这就是你得到Column Not Found的原因。更改

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" + ");"; 

希望这有助于。

+0

我做了更改,但仍然遇到同样的问题:/ – 2013-04-23 12:13:36

+0

@ChrisBennett在清除数据并重新安装后检查? – 2013-04-24 04:17:37

+0

我还需要清除数据?我重新安装,但没有清除数据...将尝试,谢谢:) – 2013-04-25 16:01:00

0

在cursorToGrade()函数中,在从db中获取值时,应该使用类似于此的代替硬编码0 & 1.

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

我做了更改,但仍然遇到同样的问题:/ – 2013-04-23 12:12:39

0

空后添加一个空格:

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

我做了更改,但仍遇到同样的问题:/ – 2013-04-23 12:13:04

+0

尝试在空白后添加逗号。问题在于SQl,因此您可以通过dab shell在设备上打开数据库,并查看结构是否正确。确保在对create table语法进行任何更改后重新创建表。 – 2013-04-23 15:27:58

1

看到此列COLUMN_GRADE + “文本不为空”你缺少逗号(,)和空间空后。

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" + ");"; 

更正此创建查询和删除数据库或卸载你的应用程序,并再次运行应用程序,并检查它。

我希望它帮助你。

+0

我做了更改并卸载了应用程序,但仍然遇到同样的问题:/ – 2013-04-23 12:14:34

+0

做了上述操作。 我在phpmyadmin中创建了一个表来测试它是否会给出相同的sql代码来创建表,并且它会执行一些例外,如java所需的+符号。但是,我看不到任何可能表明我的结构有问题的更改 您是否意味着查询错误,因为空值后没有逗号和空格?如果不是,请您详细说明它有什么问题吗? – 2013-04-23 16:56:33

+0

嘿Chris,你在调试你的查询吗?如果不是那么请在logcat中打印这个创建表变量并复制这个查询并在phpmyadmin上运行它。然后检查输出。 – 2013-04-29 09:48:47

相关问题