我有以下两种方法
方法1
public String[] getSongIds(String whereClause)
{
String countQuery = "SELECT songid FROM TABLE_INDEX WHERE " + whereClause;
Cursor cursor = db.rawQuery(countQuery, null);
int cursorSize = cursor.getCount();
int[] songIds = new int[cursorSize];
int count=0;
if (cursor != null ) {
if (cursor.moveToFirst()){
do{
songIds[count] = cursor.getInt(cursor.getColumnIndex("songid"));
count++;
}while(cursor.moveToNext());
}
}
cursor.close();
db.close();
return getSongTitles(songIds);
}
方法2
private String[] getSongTitles(int[] songIds) {
/some algorithm
return songTitles;
}
方法1是从其他程序包中调用的。方法1对SQLite数据库运行查询并调用第二个方法。我需要捕获通常通过在方法1中执行SQLite查询而引起的异常。最好返回(-1)之类的东西,以便可以从最初调用这些方法的包中向用户显示一条消息。因此,我希望方法1避免在存在(错误输入)SQL异常的情况下调用方法2,而是将内容返回给其他程序包
ps我看到了几种捕获此异常的方法,但对它们的方法不满意。想知道什么是解决此问题的最佳方法。干杯
参考方案
捕获异常,将其包装在一个自定义异常中,然后将其抛出:
public String[] getSongIds(String whereClause) throws FetchSongException {
String countQuery = "SELECT songid FROM TABLE_INDEX WHERE " + whereClause;
try {
Cursor cursor = db.rawQuery(countQuery, null);
int cursorSize = cursor.getCount();
int[] songIds = new int[cursorSize];
int count=0;
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
songIds[count] = cursor.getInt(cursor.getColumnIndex("songid"));
count++;
} while(cursor.moveToNext());
}
cursor.close(); // you should put this in a finally block
db.close();
return getSongTitles(songIds);
}
} catch (SQLException sqle) {
throw new FetchSongException("Unable to fetch song ids.", sqle);
}
}
然后,调用getSongIds
的任何人都需要捕获此新异常:
try {
String[] result = getSongsIds("something");
} catch (FetchSongException e) {
// Display user message with e.getMessage();
}
Java:正则表达式模式匹配器是否有大小限制? - java我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)
Java-NoSuchMethodError没有被异常捕获 - java我的印象是,Exception非常适合捕获所有可能的异常,因为每个异常都具有Exception作为基类。然后,在开发Android应用程序时,我使用了以下方法,该方法在某些自定义ROM中已被删除。boolean result = false; try{ result = Settings.canDrawOverlays(context); } catch(E…
Java:线程池如何将线程映射到可运行对象 - java试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …
Java-搜索字符串数组中的字符串 - java在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…
JAVA:字节码和二进制有什么区别? - javajava字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…