无法从Android上的sqlite db获取任何数据

时间:2013-05-17 16:46:49

标签: java android database sqlite

我有一个执行此功能的数据库助手:

public Cursor getCourseNames() throws SQLException {
    mDb = mDbHelper.getReadableDatabase();

    return mDb.query("Course",null, COURSE_ROWID, null, null, null, null, null); 
}

它所拉出的表格如下:

private static final String COURSE_ID = "CourseID";
private static final String COURSE_NAME = "Name";
private static final String COURSE_CODE = "CourseCode";
private static final String COURSE_ROWID = "_id";


private static final String COURSE_CREATE =
    "create table " +
    "Course" + " ( " + 
    COURSE_ROWID + " integer primary key autoincrement, " +
    COURSE_ID + "integer not null," +
    COURSE_NAME + "text not null, " +
    COURSE_CODE + "text not null" + ");";

在我的主要活动中,我尝试这个并得到一个空指针......

public void buildCoursetoChapterList(){

    Cursor cursor = dbHelper.getCourseNames();
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(MainActivity.this, android.R.layout.simple_list_item_1, cursor, null, null);

    ListView listView = (ListView) findViewById(R.id.list);

    listView.setAdapter(adapter);
}

任何人都知道我的问题是什么? 我之前将数据放入数据库:

if(dbHelper.checkCourseForData() !=null)
{
    setContentView(R.layout.classlist);
}
else
{
    dbHelper.addFirstClassToDb(course_code, name, course_id);
    Log.d+i("Course added to DB", course_code + " " + name + " " + course_id);
}               

试过这个但仍然没有,我想选择课程中的所有名称值。 毫无头绪......失去希望。

public Cursor checkCourseForData() throws SQLException {
    String[] values = {COURSE_NAME};
    Cursor mCursor = mDb.query("Course",values,COURSE_ROWID + "=" + "Name", null, null, null, null, null); 
    if (mCursor != null) { mCursor.moveToFirst(); } 

    return mCursor;

}

1 个答案:

答案 0 :(得分:0)

应该是这个

public Cursor getCourseNames() throws SQLException {
    String[] values = {COURSE_NAME};
    mDb = mDbHelper.getReadableDatabase();

    return mDb.query("Course",values,COURSE_ROWID, null, null, null, null, null); 
}

说明:

api中的方法被定义为

  

public Cursor query(String table,String [] columns,String selection,   String [] selectionArgs,String groupBy,String having,String orderBy)

所以你需要相应地传递字符串。

使用我的示例作为参考,它适用于我

    private String name;
private String Events_Table = "events";
private String[] Columns = {"_id", "Name", "Date", "Time_Slot", "Venue", "Details", "EHName", "EHNumber"} ;
private String WhereClause = Columns[1]+"=?" ;

    Cursor cursor = db.query(Events_Table, Columns, WhereClause, new String[] {name}, null, null, null);

考虑阅读本文

参数

table 用于编译查询的表名。

要返回的列的列表。传递null将返回所有列,不鼓励这些列阻止从不会使用的存储中读取数据。

选择一个过滤器,声明要返回哪些行,格式化为SQL WHERE子句(不包括WHERE本身)。传递null将返回给定表的所有行。

selectionArgs 您可以在选择中包含?,它将被selectionArgs中的值替换,以便它们出现在选择中。这些值将绑定为字符串。

groupBy 过滤器,声明如何对行进行分组,格式化为SQL GROUP BY子句(不包括GROUP BY本身)。传递null将导致行不被分组。 如果正在使用行分组,则过滤器声明要包含在游标中的哪些行组,格式化为SQL HAVING子句(不包括HAVING本身)。传递null将导致包含所有行组,并且在未使用行分组时是必需的。

orderBy 如何对行进行排序,格式化为SQL ORDER BY子句(不包括ORDER BY本身)。传递null将使用默认排序顺序,该顺序可能是无序的。