请问如何在Android数据库中检索最后一个?我正在使用Sugar ORM库来抽象所有数据库操作,但我似乎无法弄清楚如何检索数据库中最旧的记录.
是否可以创建Sugar ORM独有的列?或者是否可以插入或替换指定的行,例如用户名,但是这个用户名可能不在db中,因为他可能没有创建.
Sugar ORM在Android <5上完美运行,但在Android 5上它崩溃了.我使用的是1.4版
请帮我.
错误: android.database.sqlite.SQLiteException: no such table: AUDIO (code 1): , while compiling: SELECT * FROM AUDIO
proguard-rules.pro
-keep class me.lobanov.mp3downloadsfree.models.** { *; }
Run Code Online (Sandbox Code Playgroud)
我的模特课:
package me.lobanov.mp3downloadsfree.models;
import com.orm.SugarRecord;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Audio extends SugarRecord {
private long aud_id;
private String aud_artist;
private String aud_title;
private String aud_url;
private long aud_duration;
public Audio() {
}
public Audio(long aud_id, String aud_artist, String aud_title, String aud_url, long aud_duration){
this.aud_id = aud_id; …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用Sugar ORM 1.5,我希望在用户注销时清除所有信息.
我想避免删除数据库文件或尽可能使用纯SQLite脚本.
我找到的唯一解决方案是在所有表上使用deleteAll,但我想知道是否有更好的方法来执行它.
问候,
编辑
我解决了在删除数据库SugarContext.terminate();之前删除数据库之前删除数据库的问题SugarContext.init(context);.
看起来这是Henry Dang在评论中指出的最佳解决方案,它比删除所有数据更快.
我有一个带有一些名称和网址的列表视图。我的应用程序启动后,我检查本地数据库中是否有任何记录。所以如果有的话,首先清除我的旧记录,然后用列表视图数据填充表列,如果不只是插入数据......我就是这样做的:
List<LocalProduct> allAuthors = LocalProduct.listAll(LocalProduct.class);
if (allAuthors == null) {
for (int allList=0;allList<adapter.getCount();allList++){
Product my = adapter.getItem(allList);
String offline_name = my.name.toString().trim();
String offline_url = my.image_url.toString().trim();
LocalProduct book = new LocalProduct(offline_name, offline_url);
book.save();
}
}else {
/*
SugarContext.terminate();
SchemaGenerator schemaGenerator = new SchemaGenerator(getContext());
schemaGenerator.deleteTables(new SugarDb(getContext()).getDB());
SugarContext.init(getContext());
schemaGenerator.createDatabase(new SugarDb(getContext()).getDB());
*/
for (int allList=0;allList<adapter.getCount();allList++){
Product my = adapter.getItem(allList);
String offline_name = my.name.toString().trim();
String offline_url = my.image_url.toString().trim();
LocalProduct book = new LocalProduct(offline_name, offline_url);
book.save();
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码的注释区域将删除并重新创建表,这每次都会导致延迟......我怎么能删除我的记录!?
我正在使用Sugar ORM来查询应用列表.我有一个布尔列用于标记字段,使用:
@Setter @Getter public boolean isNew = false;
Run Code Online (Sandbox Code Playgroud)
现在,在API调用之后,我将更新并保存记录以标记所有新应用程序然后显示我将使用以下内容查询它:
List<AppsModel> app_list = AppsModel.find(AppsModel.class, "is_new = ?", "true");
Run Code Online (Sandbox Code Playgroud)
问题是它返回0条目,它在我的结尾有3.要检查我获取所有列表并逐个检查列以检查其值:
List<AppsModel> test = AppsModel.listAll(AppsModel.class);
for(int i=0;i<test.size();i++){
Log.e("Test app size", String.valueOf(test.get(i).isNew()));
}
Run Code Online (Sandbox Code Playgroud)
并且它按预期返回3并带有真值.我可以使用这个循环列表,但我不想,因为我想尽可能保持我的代码清洁.
我在这里错过了什么吗?
我试图从mylist到数据库插入数千个数据,需要很长时间来保存每个数据.
有没有办法改善保存性能?
for (int j = 0; j < listPeople.size(); j++) {
Person people= listPeople.get(j);
people.save();}
Log
11-27 04:15:06.991 10268-10268/com.testall I/Sugar? Person saved : 1
11-27 04:15:07.991 10268-10268/com.testall I/Sugar? Person saved : .......
11-27 04:16:08.991 10268-10268/com.testall I/Sugar? Person saved : 1000
Run Code Online (Sandbox Code Playgroud) 在克隆了repo并将库文件夹作为模块导入到我的AndroidStudio项目中之后,我在编译时遇到了这个错误(我需要对库进行一些更改,所以我必须克隆它)
public class UserBean extends SugarRecord<UserBean> implements Bean, Serializable {
...
}
Run Code Online (Sandbox Code Playgroud)
当我看看我的SugarRecord时,我也没有看到任何通用参数
public class SugarRecord {
protected Long id = null;
...
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
我已经创建了使用的现有数据库SQLiteOpenHelper,但现在我想转移到Sugar Orm并尝试在现有数据库中添加新表.我正在关注糖orm页面(Sugar Orm Configuration)的配置页面上提到的所有要点.
这是我的配置的样子,
AndroidManifest.xml中
<application
android:name=".application"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data android:name="DATABASE" android:value="database.db" />
<meta-data android:name="VERSION" android:value="5" />
<meta-data android:name="QUERY_LOG" android:value="true" />
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example.in.smart" />
Run Code Online (Sandbox Code Playgroud)
application.java(应用程序类)
public class application extends com.orm.SugarApp
{
private static Context instance;
public static Context get() {
return application.instance;
}
Run Code Online (Sandbox Code Playgroud)
模型类
public class Now extends SugarRecord<Now> {
public String type = null;
public String name = null;
public String address = null;
public Date created;
public Now(){}
public …Run Code Online (Sandbox Code Playgroud) 我有一个使用Sugar ORM的数据库,每次我创建一个扩展SugarRecord的新类时,我需要将我在android清单上的database_version升级为Sugar ORM识别新表.好的,直到那时.
问题是Sugar ORM正在删除我以前在数据库的每个表上的所有数据!我有很多关于它们的数据,我无法删除它并在每次数据库升级时重新插入它.
有一些方法可以避免这种情况吗?
谢谢
我有在Kotlin Advertiser扩展的课程SugarRecord:
class Advertiser : SugarRecord<Advertiser> {
var number: String? = null
var name: String? = null
constructor() {}
constructor(number: String, name: String) {
this.number = number
this.name = name
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试通过Java查找记录时,它运行良好:
Advertiser advertiser = Advertiser.find(Advertiser.class, "number = ?", "123123").get(0);
Run Code Online (Sandbox Code Playgroud)
但是当我将此代码转换为Kotlin时,我遇到了问题:
如何在Kotlin中进行查找?