SQLite cursor.getCount()>0但是cursor.moveToFirst得到FALSE

兰小陵 2018-08-29 11:51:33
我的数据库是这样的,里面只有一张pic的表,存储了图片的二进制码,列名是picture
create table pic(picture Blob)

现在我已经插入了两条数据,然后想把图片读出来
Cursor cursor = db_test.rawQuery("select picture from pic",null);
if (cursor != null && cursor.getCount() > 0){
Toast.makeText(this,"读取图片成功:" + cursor.getCount(),Toast.LENGTH_SHOW).show();
}

显示的结果是“读取图片成功:2”,也就是说表里确实有两条数据,cursor已经读到了,但是一旦要读取cursor里的数据就出错,于是我改动了一下代码
Cursor cursor = db_test.rawQuery("select picture from pic",null);
if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()){
Toast.makeText(this,"读取图片成功:" + cursor.getCount(),Toast.LENGTH_SHOW).show();
}
else {
Toast.makeText(this,"读取图片失败" ,Toast.LENGTH_SHOW).show();
}

得到的结果是“读取图片失败”,也就是说cursor.moveToFirst()返回的是FALSE,求大神指点,这是为什么啊?明明cursor里有两条数据,但是不能moveToFirst()也不能moveToNext(),纠结了好久了还没解决。
...全文
920 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
兰小陵 2018-08-31
  • 打赏
  • 举报
回复
求大神帮忙啊啊啊啊啊啊~~~~
兰小陵 2018-08-29
  • 打赏
  • 举报
回复
求大神帮忙啊啊啊啊啊啊~~~~
其SQL語 句的格式為: create table table_name (column_name1 column_type, column_name2 column_type, …); 例如: create table Student(stud_no text primary key, stud_name text); 如果你想知道學號為‘102’以外的學生名字,可以寫如下: select stud_no, stud_name from Student where stud_no <> ‘102’ ; 如果你想知道學號不是‘101’,而且學生名字不是‘Linda’的資料,可以寫為: select stud_name from Student where stud_no <> ‘101’ and stud_name <> ‘Linda’; 這就把兩個表格聯結起來: select Student.stud_name, Course.course_name from Student, Course where Student.stud_no = Course.stud_no; 這會進行加總了: select SUM(score1), SUM(score2) from New_Course; 還可計算平均值: select AVG(score1), AVG(score2) from New_Course New_Course 表格 course_name stud_no score1 score2 DATABASE 101 70.0 74.5 ART 101 60.0 45.0 DATABASE 102 95.0 90.5 GROUP BY 子句可建立比較小的組(Group),並且對每一個組進行加總等運 算。換句話說,它產生每一組的整體性資訊。例如: select course_name, SUM(score1), SUM(score2) from New_Course group by course_name 得出結果為: course_name SUM(score1) SUM(score2) DATABASE 165.0 165.0 ART 60.0 45.0 藉由 GROUP BY 語句,可以讓 SUM()等函數對屬於一組的資料進行運算。當 你指定「GROUP BY 區域」時, 屬於同一個區域的一組資料將只會得到一行 (Column)的值。◆ private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) {} @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} } private DatabaseHelper mOpenHelper; public void onClick(View v){ if (v == btn){ mOpenHelper = new DatabaseHelper(v.getContext()); SQLiteDatabase db = mOpenHelper.getWritableDatabase(); String sql = "create table Student(" + "stud_no text not null, " + "stud_name text );"; try { db.execSQL(sql); setTitle("create table ok!"); } catch (SQLException e) { Log.e("ERROR", e.toString()); setTitle("create table Error!"); }} if (v == btn2){ mOpenHelper = new DatabaseHelper(v.getContext()); SQLiteDatabase db = mOpenHelper.getWritableDatabase(); String sql = "drop table Student"; try { db.execSQL(sql); setTitle("drop table ok!"); } catch (SQLException e) { Log.e("ERROR", e.toString()); setTitle("drop table Error!"); }} f (v == btn3){ mOpenHelper = new DatabaseHelper(v.getContext()); SQLiteDatabase db = mOpenHelper.getWritableDatabase(); String sql_1 = "insert into Student (stud_no, stud_name) values('S108', 'Lily Chen');"; String sql_2 = "insert into Student (stud_no, stud_name) values('S201', 'Tom Kao');"; String sql_3 = "insert into Student (stud_no, stud_name) values('S333', 'Peter Rabbit');"; try { db.execSQL(sql_1); db.execSQL(sql_2); db.execSQL(sql_3); setTitle("insert records ok!"); } catch (SQLException e) { Log.e("ERROR", e.toString()); } } if (v == btn4){ mOpenHelper = new DatabaseHelper(v.getContext()); SQLiteDatabase db = mOpenHelper.getReadableDatabase(); String col[] = {"stud_no", "stud_name" }; cur = db.query("Student", col, null, null, null, null, null); Integer n = cur.getCount(); String ss = Integer.toString(n); setTitle(ss + " records"); cur.moveToFirst(); } if (v == btn5) finish(); }} ***************8 private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE Student(" + "stud_no" + " TEXT PRIMARY KEY," + "stud_name" + " TEXT" + ");"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} } @@@@@@@@@ if (v == btn3){ mOpenHelper = new DatabaseHelper(v.getContext()); SQLiteDatabase db = mOpenHelper.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put("stud_no", "S108"); cv.put("stud_name", "Lily Chen"); db.insert("Student", null, cv); cv = new ContentValues(); cv.put("stud_no", "S201"); cv.put("stud_name", "Tom Kao"); db.insert("Student", null, cv); cv = new ContentValues(); cv.put("stud_no", "S333"); cv.put("stud_name", "Peter Rabbit"); db.insert("Student", null, cv); setTitle("insert record ok!"); } if (v == btn4){ mOpenHelper = new DatabaseHelper(v.getContext()); SQLiteDatabase db = mOpenHelper.getReadableDatabase(); String col[] = {"stud_no", "stud_name" }; cur = db.query("Student", col, null, null, null, null, null); Integer n = cur.getCount(); String ss = Integer.toString(n); setTitle(ss + " records"); cur.moveToFirst(); } if (v == btn5){ if(!cur.isAfterLast()){ String ss = cur.getString(0) + ", " + cur.getString(1); setTitle(ss); cur.moveToNext(); } else setTitle("======"); } if (v == btn6){ mOpenHelper = new DatabaseHelper(v.getContext()); SQLiteDatabase db = mOpenHelper.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put("stud_no", "S288"); cv.put("stud_name", "Linda Wang"); db.update("Student", cv, "stud_no = 'S201'", null); } if (v == btn7){ mOpenHelper = new DatabaseHelper(v.getContext()); SQLiteDatabase db = mOpenHelper.getWritableDatabase(); db.delete("Student", "stud_no = 'S108'", null); } if(v.equals(btn8)){ mOpenHelper = new DatabaseHelper(v.getContext()); SQLiteDatabase db = mOpenHelper.getWritableDatabase(); if (db != null) db.close(); this.finish(); }}} 1. 欲新增一筆資料時,上一個範例使用 SQL 語句來達成,如下: String sql = "insert into Student (stud_no, stud_name) values ('S108', 'Lily Chen');"; db.execSQL(sql_1); 在本範例則採用另一種途徑,將資料先存入 Android的 ContentValues物件裡, 然後將此物件當成參數而傳遞給 db.insert()函數,如下: ContentValues cv = new ContentValues(); cv.put("stud_no", "S108"); cv.put("stud_name", "Lily Chen"); db.insert("Student", null, cv); 2. 查詢時,把欲查出的欄位名稱存於字串陣列裡,再把它傳給 db.query()函數即 可。如下: String col[] = {"stud_no", "stud_name" }; cur = db.query("Student", col, null, null, null, null, null); Integer n = cur.getCount(); 查詢之後,db.query()回傳資料庫游標(Cursor)值給 cur,然後 cur.getCount()就 傳回所查到的資料筆數。 3. 指令: if( !cur.isAfterLast() ){ String ss = cur.getString(0) + ", " + cur.getString(1); // ……. cur.moveToNext(); } 由 cur.isAfterLast()判斷目前是否已經超出最後一筆資料了。如果不是,就藉由 cur.getString(0)取得第 1 個欄位的資料;而 cur.getString(0)取得第 2 個欄位的資 料值。
Android数据库实验全文共7页,当前为第1页。Android数据库实验全文共7页,当前为第1页。实验报告 Android数据库实验全文共7页,当前为第1页。 Android数据库实验全文共7页,当前为第1页。 实验项目:Android数据库实验 一、实验目的 1、理解Android中常用的数据存储方式及各自特点; 2、掌握Sqlite数据库的相关操作; 3、掌握编程访问Sqlite数据库的方法; 二、实验原理 1、数据存储方式:SharedPreferences、文件、数据库等; 2、Sqlite数据库访问; 三、实验步骤、数据记录及处理 1、手动操作Sqlite数据库; 2、编程访问Sqlite数据库,实验用户登录、注册等基本功能; 1.定义数据库MySQLiteOpenHelper继承父类SQLiteOpenHelper写基本操作要用的方法并建立相关的类。相关代码如下: MySQLiteOpenHelper.java: public class MySQLiteOpenHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "S.db"; public static final String TABLE_NAME = "S_table"; public static final String COL_1 = "ID"; public static final String COL_2 = "NAME"; public static final String COL_3 = "PASSWORD"; public MySQLiteOpenHelper(Context contect) { super(contect, DATABASE_NAME, null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,PASSWORD TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); Android数据库实验全文共7页,当前为第2页。Android数据库实验全文共7页,当前为第2页。 } public Integer deleteData(String id) { SQLiteDatabase db = this.getWritableDatabase(); int i = db.delete(TABLE_NAME, "ID=?", new String[]{id}); return i; } public boolean find(User userpeople){ SQLiteDatabase db = this.getWritableDatabase(); User[] user =queryAllData(); if(user==null)return false; for(User i:user){ if(i.name.equals(userpeople.name)&& i.password.equals(userpeople.password)){ return true; } } return false; } public User[] queryAllData() { SQLiteDatabase db = this.getWritableDatabase(); Cursor results = db.query(TABLE_NAME, new String[] { COL_1,COL_2, COL_3},null,null,null,null,null); return ConvertToPeople(results); } private User[] ConvertToPeople(Cursor cursor){ int resultCounts = cursor.getCount(); if (resultCounts == 0 "" !cursor.moveToFirst()){ return null; } User[] user = new User[resultCounts]; for (int i = 0 ; i

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧