public List<set> setQuery(String bookId){ List<set>list=new ArrayList<>(); Cursor cursor=DB.query("my_set",null,"book_id=?",new String[]{String.valueOf(bookId)},null,null,null,null); while (cursor.moveToNext()){ set set=new set(); set.setId(String.valueOf(cursor.getInt(0))); set.setBookId(cursor.getString(1)); set.setTitle(cursor.getString(2)); set.setContent(cursor.getString(3)); list.add(set); } cursor.close(); return list; }报错java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mywriteproject/com.example.mywriteproject.setActivity}: android.database.sqlite.SQLiteException: no such table: my_set (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM my_set WHERE book_id=?
时间: 2023-06-19 16:10:41 浏览: 198
这个错误提示是说数据库中没有名为“my_set”的表,导致查询语句执行失败。你可以检查一下以下几点:
1. 确认数据库中是否存在名为“my_set”的表,可以在数据库管理工具中查看。
2. 确认在建立数据库连接时是否正确指定了数据库名称和版本号,以及是否正确创建了“my_set”表。
3. 如果你在应用程序中使用了多个数据库,需要确认使用的是正确的数据库连接。
如果以上几点都没有问题,可以尝试重新安装应用程序或者清空应用程序数据,再次运行看看是否能够解决问题。
相关问题
public ArrayList<Borrow> AllBorrow(DBHelper dbHelper){ SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.rawQuery("select * from borrow order by boid desc",null); ArrayList<Borrow> list = new ArrayList<>(); if (cursor != null && cursor.getCount() > 0){ while (cursor.moveToNext()){ String boid = cursor.getString(cursor.getColumnIndex("boid")); String bookid = cursor.getString(cursor.getColumnIndex("bookid")); String botime = cursor.getString(cursor.getColumnIndex("botime")); String userid = cursor.getString(cursor.getColumnIndex("userid")); int bostate = cursor.getInt(cursor.getColumnIndex("bostate")); String backtime = cursor.getString(cursor.getColumnIndex("backtime")); String reviewer = cursor.getString(cursor.getColumnIndex("reviewer")); Borrow borrow = new Borrow(boid,botime,bookid,userid,bostate,backtime,reviewer); list.add(borrow); } } db.close(); return list; } //还书 public void ReturnBook(DBHelper dbHelper,String boid,String backtime,String reviewer){ SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("bostate",1); values.put("backtime",backtime); values.put("reviewer",reviewer); db.update("borrow",values,"boid=?",new String[]{boid}); db.close(); } }解释每一行代码
这段代码是一个 Android 应用程序中的数据库访问类 DBHelper 中的两个方法。第一个方法 AllBorrow 用于查询 borrow 数据表中的所有记录,并返回一个 ArrayList<Borrow> 对象。该方法接收一个 DBHelper 对象作为参数,以便获取数据库实例。代码的第一行通过 dbHelper.getWritableDatabase() 获取可写的数据库实例。接下来的一行通过执行 SQL 语句 "select * from borrow order by boid desc" 查询 borrow 表中的所有记录,并将结果保存在一个 Cursor 对象中。然后,代码通过遍历 Cursor ,提取每一行记录中的字段值,将其封装为一个 Borrow 对象,并将 Borrow 对象添加到 ArrayList<Borrow> 对象中。最后一行关闭数据库连接并返回 ArrayList<Borrow> 对象。
第二个方法 ReturnBook 用于更新 borrow 表中的一条记录,以标记该书已经归还。该方法接收一个 DBHelper 对象,一个 boid 字符串、一个 backtime 字符串和一个 reviewer 字符串作为参数。代码的第一行通过 dbHelper.getWritableDatabase() 获取可写的数据库实例。接下来的一行创建一个 ContentValues 对象,将需要更新的字段和值存入其中。然后,代码通过执行 db.update() 方法,更新 borrow 表中 boid 字段等于传入的 boid 字符串的记录。最后一行关闭数据库连接。
public class BorrowTableHelper { //新增借阅信息 public boolean AddBorrow(DBHelper dbHelper, Borrow borrow){ SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("botime",borrow.getBotime()); values.put("bookid",borrow.getBookid()); values.put("userid",borrow.getUserid()); values.put("bostate",borrow.getBostate()); long id = db.insert("borrow",null,values); db.close(); boolean flag; if (id != -1){ flag = true; }else { flag = false; } return flag; } //查询借阅记录 public ArrayList<Borrow> ShowBorrow(DBHelper dbHelper,String uid){ SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.rawQuery("select * from borrow where userid = ? order by boid desc",new String[]{uid}); ArrayList<Borrow> list = new ArrayList<>(); if (cursor != null && cursor.getCount() > 0){ while (cursor.moveToNext()){ String bookid = cursor.getString(cursor.getColumnIndex("bookid")); String botime = cursor.getString(cursor.getColumnIndex("botime")); int bostate = cursor.getInt(cursor.getColumnIndex("bostate")); String backtime = cursor.getString(cursor.getColumnIndex("backtime")); String reviewer = cursor.getString(cursor.getColumnIndex("reviewer")); Borrow borrow = new Borrow(botime,bookid,bostate,backtime,reviewer); list.add(borrow); } } db.close(); return list; }解释每一行代码
这段代码是一个帮助类,名为BorrowTableHelper,其中包含了两个方法,分别是AddBorrow和ShowBorrow,用于新增借阅信息和查询借阅记录。现在对这两个方法逐行进行解释:
1. `public boolean AddBorrow(DBHelper dbHelper, Borrow borrow){`
这是AddBorrow方法的开始,它有两个参数,一个是DBHelper类型的dbHelper,表示用于操作数据库的帮助类;另一个是Borrow类型的borrow,表示要新增的借阅信息。
2. `SQLiteDatabase db = dbHelper.getWritableDatabase();`
创建一个SQLiteDatabase类型的对象db,通过调用dbHelper的getWritableDatabase()方法获取可写的数据库对象。
3. `ContentValues values = new ContentValues();`
创建一个ContentValues类型的对象values,用于存放新增的借阅信息。
4. `values.put("botime",borrow.getBotime());`
将借阅时间(botime)、书籍ID(bookid)、用户ID(userid)、借阅状态(bostate)等信息放入values中。
5. `long id = db.insert("borrow",null,values);`
将values中的信息插入到“borrow”表中,并返回插入数据的行号id。
6. `db.close();`
关闭数据库连接。
7. `boolean flag;`
创建一个boolean类型的变量flag,用于存放新增借阅信息的结果。
8. `if (id != -1){ flag = true; }else { flag = false; }`
判断插入数据的行号id是否为-1,如果不是则说明插入成功,将flag设置为true,否则设置为false。
9. `return flag;`
返回新增借阅信息的结果。
10. `public ArrayList<Borrow> ShowBorrow(DBHelper dbHelper,String uid){`
这是ShowBorrow方法的开始,它有两个参数,一个是DBHelper类型的dbHelper,表示用于操作数据库的帮助类;另一个是String类型的uid,表示要查询的用户ID。
11. `SQLiteDatabase db = dbHelper.getWritableDatabase();`
创建一个SQLiteDatabase类型的对象db,通过调用dbHelper的getWritableDatabase()方法获取可写的数据库对象。
12. `Cursor cursor = db.rawQuery("select * from borrow where userid = ? order by boid desc",new String[]{uid});`
创建一个Cursor类型的对象cursor,执行SQL查询语句“select * from borrow where userid = ? order by boid desc”,并传入查询参数uid,将查询结果放入cursor中。
13. `ArrayList<Borrow> list = new ArrayList<>();`
创建一个ArrayList类型的对象list,用于存放查询结果。
14. `if (cursor != null && cursor.getCount() > 0){`
判断查询结果是否为空且查询结果的行数是否大于0。
15. `while (cursor.moveToNext()){`
循环遍历查询结果。
16. `String bookid = cursor.getString(cursor.getColumnIndex("bookid"));`
从查询结果中获取书籍ID。
17. `String botime = cursor.getString(cursor.getColumnIndex("botime"));`
从查询结果中获取借阅时间。
18. `int bostate = cursor.getInt(cursor.getColumnIndex("bostate"));`
从查询结果中获取借阅状态。
19. `String backtime = cursor.getString(cursor.getColumnIndex("backtime"));`
从查询结果中获取归还时间。
20. `String reviewer = cursor.getString(cursor.getColumnIndex("reviewer"));`
从查询结果中获取审核人。
21. `Borrow borrow = new Borrow(botime,bookid,bostate,backtime,reviewer);`
创建一个Borrow类型的对象borrow,将获取到的借阅信息作为参数传入。
22. `list.add(borrow);`
将borrow对象添加到list中。
23. `db.close();`
关闭数据库连接。
24. `return list;`
返回查询结果。
阅读全文