我已经阅读了一些问题/答案,说Java没有,也不太可能获得C#样式属性。但是,在这个问题:How to organize database access code in Android project?中,有一些示例代码的答案如下:
c = localDBRW.rawQuery(sql, selectionArgs);
在对该答案的评论中,他说localDBRW“被定义为对getWritableDatabase()的引用。”对我来说,这意味着在上面的行中调用getWritableDatabase()并在getWritableDatabase()的结果上调用rawQuery。
所以我的问题是:这是怎么做到的?
在C#中,这将是微不足道的。我是Java的新手,所以我甚至不确定哪些术语会让我得到答案。搜索“属性”,“方法”和“引用”并没有导致这种特殊用法。
答案摘要:
我正抓住一个梦想。我正在以一种意味着我的愿望成真的方式解释原始陈述。唉,这不是事情的方式。 Java没有任何C#属性语法的希望,我被驱逐到写obj.getX()而不是obj.X的永恒。
答案 0 :(得分:1)
localDBRW
“被定义为对getWritableDatabase()
”的引用
我认为这只是意味着在使用之前有这个声明,仅此而已:
localDBRW = getWritableDatabase();
目前Java中没有类似属性的语义。您不能使用字段访问语法来调用方法。最接近这一点的是第一次访问某个字段并触发其初始化代码,但这是一个完全不同的结构。
答案 1 :(得分:1)
localDBRW是一个getWritableDatabase()。它被定义为对getWritableDatabase()的引用。我建议您在需要时调用getWritableDatabase()而不是localDBRW。
不要从字面上理解。 localDBRW
是一个属性,并使用getWritableDatabase()
调用的结果初始化(某处)。所以它是一个可写的数据库。在Java中,属性永远不能保存对方法(函数指针)的引用。
答案 2 :(得分:1)
编辑以回应您的澄清。我保留了旧的答案,以防它对某人有用。
Java具有反射API,允许您查找和调用对象的任意命名方法。所以你不会有一个
theMethod.invoke()
打电话,而不是
// assuming you have a Class clazz and Object clazzObj
Method theMethod= clazz .getMethod(
"someName", null /* or a list of desired params*/);
theMethod.invoke(clazzObj, arglist);
我认为这个(也许有一个合适的类来改变{clazzObj,theMethod}对,你可以非常接近你需要的行为,我想这是某种数据驱动的调度。
===老答案====
到目前为止,我可以看到你是tryint用一些参数执行一些SQL,然后处理结果的行和列。
这样可以通过JDBC预处理语句调用完成,对结果集进行一些迭代。结果集允许您按编号访问列。
我认为Java和C#方法之间没有任何区别。您引用的示例
c.moveToFirst();
recordID = c.getString(c.getColumnIndex("id"));
c.close();
JDBC tutorial显示如下代码
String query = "
SELECT COFFEES.COF_NAME " +
"FROM COFFEES, SUPPLIERS " +
"WHERE SUPPLIERS.SUP_NAME LIKE 'Acme, Inc.' " +
"and SUPPLIERS.SUP_ID = COFFEES.SUP_ID";
ResultSet rs = stmt.executeQuery(query);
System.out.println("Coffees bought from Acme, Inc.: ");
while (rs.next()) {
String coffeeName = rs.getString("COF_NAME");
System.out.println(" " + coffeeName);
}
你要按姓名获得coumns。