我正在使用带有静态编程语言的android持久性库Room
。
Dao看起来像这样
@Dao
interface CountryDao {
@Query("SELECT * FROM countries")
fun loadAllCountried() : LiveData<List<CountryEntity>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertAll(products: List<CountryEntity>)
@Query("SELECT * FROM countries WHERE id = :countryId")
fun loadCountry(countryId: Int): LiveData<CountryEntity>
@Query("SELECT * FROM countries WHERE id = :countryId")
fun loadCountrySync(countryId: Int): CountryEntity
}
这对我来说似乎很好,但我得到了这个错误
错误:查询中的每个绑定变量必须有一个匹配的方法参数。找不到:countryId的方法参数
我可以看到参数被命名为Country Id
,那么可能是什么问题呢?
仅供参考:这是CountryDao_I生成的代码mpl.java
@Override
public CountryEntity loadCountrySync(int arg0) {
final String _sql = "SELECT * FROM countries WHERE id = ?";
final RoomSQLiteQuery _statement = RoomSQLiteQuery.acquire(_sql, 1);
int _argIndex = 1;
final Cursor _cursor = __db.query(_statement);
try {
final int _cursorIndexOfId = _cursor.getColumnIndexOrThrow("id");
final int _cursorIndexOfPopulation = _cursor.getColumnIndexOrThrow("population");
final CountryEntity _result;
if(_cursor.moveToFirst()) {
_result = new CountryEntity();
final int _tmpId;
_tmpId = _cursor.getInt(_cursorIndexOfId);
_result.setId(_tmpId);
final long _tmpPopulation;
_tmpPopulation = _cursor.getLong(_cursorIndexOfPopulation);
_result.setPopulation(_tmpPopulation);
} else {
_result = null;
}
return _result;
} finally {
_cursor.close();
_statement.release();
}
}
在这种方法中,我看到arg0在方法中的任何地方都没有使用。
编辑:这似乎在新插件中得到了修复。这里有几个答案是正确的,但我不能接受每个答案,对不起。
对于我来说,项目中的kotlin v.1.2.10及更高版本只能通过下一种方式工作:
@Query("select * from user where pk = :userId")
fun findUserById(userId: Long): DBUser
名称:查询中的“userId”和方法中的“userId”应该相同。
如果您的构建中没有定义“kotlin kapt”插件,则会发生此错误。gradle文件。如果确实启用了kapt插件,编译器将按预期将绑定参数与方法参数相匹配。
Kotlin没有正确保存参数的名称-这是https://youtrack.jetbrains.com/issue/KT-17959
您可以通过在@Query语句中使用参数名来解决这个问题:
@Query("SELECT * FROM countries WHERE id = :arg0")
fun loadCountry(countryId: Int): LiveData<CountryEntity>
@Query("SELECT * FROM countries WHERE id = :arg0")
fun loadCountrySync(countryId: Int): CountryEntity
我正在使用android的房间数据库。在我最近更新到静态编程语言1.7.0之前,它一直运行良好。现在我得到以下错误: 这是我的刀: 这是我的身材 当我将Kotlin降级到1.6.21时,它运行良好。这是科特林病毒还是我做错了什么?
我得到这个错误: 当尝试像这样的Room和静态编程语言时: 但我正在传递并使用这个参数。有人知道问题是什么,或者能给我举个例子,让我看看和科特林一起使用房间的情况吗?
我想要找到一个文件的名称包含'Bob',并有一个位置在'paducah'或'smyrna'。 以下是我现在所拥有的: 我知道问题出在location数组上,因为如果我将它改为一个没有数组的元素,那么查询就可以正常工作。 这是我能找到的最接近的答案。 它没有工作,我收到以下错误: [term]查询格式错误,应为[END_OBJECT],但找到[FIELD_NAME]
我试图创建一个弹性搜索查询,它必须匹配单独字段上的三个查询之一,并且还有一个额外的查询,而不是需要匹配的。执行bool查询和Must子句的问题是,它必须匹配所有3个,而使用'应该'时,它并不总是匹配所需的,除非使用minimum_should_match设置为2。在这种情况下,由于最小匹配,它在匹配3个必需文档之一的文档上不匹配。 我当前的查询是这样的(对不起,这里没有代码) 我也尝试了以下方法,
问题内容: 我对Java完全不了解,但是在今晚练习时,我发现使用OOP设计时,主类中的每个方法都必须是静态的,对吗?在这段代码中,我无法在不是静态的类中调用方法。 似乎我可能遗漏了为什么要声明一个类是否为静态的问题。谢谢你的帮助! 问题答案: 您可以调用非静态方法,但是只能通过对象来调用。也就是说,您需要在给定对象上调用该方法。 您的主类也可以实例化,因此并非主类中的每个方法都必须是静态的。例如:
问题内容: 我写的是,我正在使用Netbeans向每个函数添加类似专业的注释。因此,我从每一个开始,然后按来让Netbeans完成用于以下功能的默认注释方案。 到现在为止,我一直只在PHP语言中使用它,在这种情况下,如果遵循PHP函数确实包含了声明,则Netbeans始终仅在注释方案中添加部分。在所谓的“过程”(不返回任何值的函数)上,缺少此部分。 今天,我为Javascript函数尝试了同样的事