我在Java和C#中创建了一个允许我执行SQL查询的类,例如我有一个名为Delete的方法,它接受几个参数;
public static int Delete(String table, String column, String operand, Object value)
Run Code Online (Sandbox Code Playgroud)
我将值作为Object类型,因为我可能想要删除基于String,Integers或booleans的行,这意味着该方法足够灵活,可以支持不同的类型.然后我通过在Java中使用instanceof测试(或C#中的.GetType),根据它是否为字符串向查询添加其他" ' "字符
原油示例:
if (value instanceof String)
{
System.out.println("It's a String");
}
else
{
System.out.println("It's not a String");
}
Run Code Online (Sandbox Code Playgroud)
在实现类的其余部分时,我开始自己思考前面提到的方法是否是理想的方法,或者我是否应该为特定的数据类型实现其他方法,一个用于容纳String,另一个用于Integer等等.
如果我去实现它,那么它将意味着在逻辑上会有其他方法具有最小的差异,但是每个方法只有一个目的,使它们易于遵循和记录.另一方面,如果我保持原样,那么生成和维护的代码就会少得多,它可以管理任何类型的Delete语句(就数据类型而言),只需要几个if语句确定通过参数传入的对象的类型.
从面向对象/最佳代码实践的角度来看,哪种方法最好?
谢谢你的信息!
我正在尝试使用 ?s 作为参数来构建我的查询,但它显然有问题。希望文档至少提供一个示例...
SQLDb.rawQuery("SELECT C.?, B.?, B.?, B.? FROM ? C, ? B WHERE C.? = B.?", new String[]
{Tables.CATEGORIES_NAME, Tables.BUDGET_DATE, Tables.BUDGET_VALUE, Tables.KIND, Tables.CATEGORIES, Tables.BUDGET, Tables.CATEGORIES, Tables.TABLE_ID, Tables.TABLE_ID});
Run Code Online (Sandbox Code Playgroud)
那些 const 都是字符串,只是列的名称。我究竟做错了什么?