Java 将方法从一个类调用到另一个类
我在一个类中编写了此方法,用于检查数据库中是否存在表:Java 将方法从一个类调用到另一个类,java,android,sqlite,Java,Android,Sqlite,我在一个类中编写了此方法,用于检查数据库中是否存在表: public boolean DoesTableExist(String tableName) { SQLiteDatabase mDatabase = openOrCreateDatabase("privdb",MODE_PRIVATE,null); Cursor cursor = mDatabase.rawQuery("select DISTINCT tbl_name from sqlite_master where
public boolean DoesTableExist(String tableName) {
SQLiteDatabase mDatabase = openOrCreateDatabase("privdb",MODE_PRIVATE,null);
Cursor cursor = mDatabase.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'", null);
if(cursor!=null) {
if(cursor.getCount()>0) {
cursor.close();
return true;
}
cursor.close();
}
return false;
}
我现在想在其他活动或类中调用此方法,而不必每次在每个文件中都编写相同的代码。
我该怎么做呢?通常,您会通过实例化另一个类,然后调用该方法来调用该类中的方法。例如,如果方法所在的类名为
DatabaseUtils
,则应执行以下操作:
DatabaseUtils dbUtils = new DatabaseUtils();
boolean exists = dbUtils.doesTableExist("tablename");
// ^ note that the normal Java convention is to make
// method names start with a lower case letter
boolean exists = DatabaseUtils.doesTableExist("tablename");
然而,这有一种“实用”方法的感觉(对象可能不存储任何状态,因此不需要实例化它),处理这些的常用方法是使方法静态,如下所示:
public static boolean doesTableExist(String tableName) {
这将导致该方法存在于类定义本身上,而不是类的特定实例上,并允许您执行以下操作:
DatabaseUtils dbUtils = new DatabaseUtils();
boolean exists = dbUtils.doesTableExist("tablename");
// ^ note that the normal Java convention is to make
// method names start with a lower case letter
boolean exists = DatabaseUtils.doesTableExist("tablename");
创建该方法所在的类的实例,创建一个get方法并通过该实例调用该方法。 另一种选择是将方法定义为静态方法,并以这种方式调用它 实例:
ClassName classInstance = new ClassName();
classInstance.getMethod(parametar);
静态:
ClassName.methodName(parametar);
以下是关于这方面的更多信息:
将其放入“utils”包中是一个不错的选择。 创建一个名为“utils”的新Java包,添加一个新类,如“DatabaseUtils.Java”,并使其看起来像这样:
public class DatabaseUtils {
public boolean DoesTableExist(String tableName) {
SQLiteDatabase mDatabase = openOrCreateDatabase("privdb",MODE_PRIVATE,null);
Cursor cursor = mDatabase.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'", null);
if(cursor!=null) {
if(cursor.getCount()>0) {
cursor.close();
return true;
}
cursor.close();
}
return false;
}
}
public class main {
public static void main(String [] args)
boolean isTableExisting = DatabaseUtils.doesTableExist("yourTableName")
System.out.println("Table existing? " + isTableExisting);
}
}
现在,您可以从其他地方引用它,例如:
public class DatabaseUtils {
public boolean DoesTableExist(String tableName) {
SQLiteDatabase mDatabase = openOrCreateDatabase("privdb",MODE_PRIVATE,null);
Cursor cursor = mDatabase.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'", null);
if(cursor!=null) {
if(cursor.getCount()>0) {
cursor.close();
return true;
}
cursor.close();
}
return false;
}
}
public class main {
public static void main(String [] args)
boolean isTableExisting = DatabaseUtils.doesTableExist("yourTableName")
System.out.println("Table existing? " + isTableExisting);
}
}
您可能还需要传递数据库的名称(“privdb”)或方法“openOrCreateDatabase(…)”所在的引用
当您的数据库确实存在时,它将打印
“Table existing?true”
,这是一个非常好的答案,谢谢。还有一个问题:从另一个类调用此方法会给我一个空指针:java.lang.NullPointerException:尝试调用虚拟方法“android.database.sqlite.SQLiteDatabase android.content.openOrCreateDatabase”(java.lang.String,int,android.database.sqlite.SQLiteDatabase$CursorFactory)'在空对象引用上-如果该表不存在,在我的类中直接调用它时,它会给我一个“false”作为布尔值。这听起来太错误了,我甚至不知道我是怎么写给你的,但我不明白为什么会发生这种情况为什么在这个方法/类中不可能使用MODE_PRIVATE,相反,我必须像这样在ErrorHandler和FactoryCursor上加上“null”:SQLiteDatabase mDatabase=SQLiteDatabase.openOrCreateDatabase(“privdb”,null,null)?