我正在开发一个Android应用程序.它有多个线程读取和写入Android SQLite数据库.我收到以下错误:
SQLiteException:错误代码5:数据库已锁定
我理解SQLite会在插入/更新时锁定整个数据库,但在我运行select查询时插入/更新时似乎只会发生这些错误.select迭代返回一个游标,当我迭代它时,它会被打开很多(几次几秒).如果select查询没有运行,我永远不会得到锁.我很惊讶select可以锁定数据库.这是可能的,还是还有其他事情发生?
什么是避免这种锁定的最佳方法?
我在JPA中有两个实体:Entry和Comment.Entry包含两个Comment对象集合.
@Entity
public class Entry {
...
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@IndexColumn(base = 1, name = "dnr")
private List<Comment> descriptionComments = new ArrayList<Comment>();
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@IndexColumn(base = 1, name = "pmnr")
private List<Comment> postMortemComments = new ArrayList<Comment>();
...
}
Run Code Online (Sandbox Code Playgroud)
为了存储这样的对象,JPA + Hibernate创建了"Entry"表,"Comment"表和SINGLE"Entry_Comment":
create table Entry_Comment (Entry_id integer not null, postMortemComments_id integer not null, pmnr integer not null, descriptionComments_id integer not null, dnr integer not null, primary key (Entry_id, dnr), unique (descriptionComments_id), unique (postMortemComments_id))
对象的存储失败, …
我正在开发一个使用SQLite作为后端的Android应用程序.
我想确保数据库中的所有表都使用UTF-8.我怎样才能做到这一点?
我试过了:
CREATE TABLE myTable (_all_columns_definitions_) DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
但是出现了语法错误.
如何在Android中获得虚拟键盘的高度?可能吗?
我尝试从主窗口获取它,但它给了我完整的应用程序高度.但我想获得键盘高度.
如果我有一个包含enum类型的类,我可以扩展此类并覆盖枚举类型或向此枚举添加更多常量吗?目的是用户将能够在getColor()不知道动态对象是来自基类还是派生类的情况下调用方法.例如:
public class Car {
private String name;
private CarColors color;
public enum CarColors {
BLUE,
GREEN
}
public Car(CarColors c) {
color=c;
}
public CarColors getColor() {
return color;
}
}
public class RacingCar extends Car {
private CarColors color;
public RacingCar(CarColors c) {
color=c;
}
public enum CarColors {
BLUE,
GREEN,
RED
}
@Override //?????
public CarColors getColor() {
return color;
}
}
Run Code Online (Sandbox Code Playgroud)
在主要:
Car racingCar = new RacingCar();
CarColors color = racingCar.getColor();
Run Code Online (Sandbox Code Playgroud) 当我编译这样的东西时:
public class MyClass
{
void myMethod(String name, String options, String query, String comment)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
并将其编译为类文件,似乎参数名称丢失了.也就是说,当其他一些Java代码引用MyClass并想要调用或覆盖时myMethod,我的IDE(当前是Eclipse)似乎从类文件中获取此方法签名:
void myMethod(String arg0, String arg1, String arg2, String arg3);
Run Code Online (Sandbox Code Playgroud)
我知道,Eclipse(可能还有其他的IDE太)让我提供一个链接到源或javadoc的(如Bishiboosh指出的)的MyClass,可以充分利用这一点.但我很好奇是否有某种方法可以告诉javac我们将名称包含在类文件中,以便该类的用户可以看到参数名称,即使它们只有类文件.
当我用类编译一个类时java -g:vars,参数的名称包含在类文件中.-g:vars似乎等同于Eclipse - >项目属性 - > Java编译器 - >将变量属性添加到生成的类文件中.
几位作者提出了这个解决方案,但尼克的回答终于让我相信了.
在我的机器上,Eclipse有时会使用这些信息,有时它没有,这可能是我的错或Eclipse中的错误,但不是类文件或编译的问题.无论如何,现在我知道信息肯定存在.
虽然这对于类来说很好(有点),但它不适用于接口.
对我来说,逻辑上的原因似乎是,-g:vars只提供局部变量的名称,这也是javac的文档所述.在方法体中,它的参数与局部变量非常相似,因此它们被-g:vars覆盖.接口方法没有实体,因此它们不能有局部变量.
我最初的问题只是要求上课,因为我不知道可能有任何不同.
正如gid所指出的,类文件格式不支持参数名称的存储.我在类文件规范中找到了一个描述数据结构的部分,该数据结构应该是方法的参数名称,但在编译接口时绝对不会使用它.
在编译类时,我无法判断是否使用了所提到的数据结构,或者Eclipse是否根据方法体内参数的使用推断出参数名称.专家可以澄清这一点,但我认为这并不相关.
那里有没有配备气压传感器的Android设备?
我知道android.hardware.Sensor类有一个TYPE_PRESSURE常量,该getAltitude方法SensorManager几乎提到了大气压力.
那么,是否有任何Android手机都有晴雨表?
我想构建一个Google协议缓冲库的原生版本.
我该怎么办?
android ×6
java ×3
sqlite ×2
android-ndk ×1
collections ×1
compilation ×1
eclipse ×1
enums ×1
hibernate ×1
javac ×1
jpa ×1
locking ×1
persistence ×1
porting ×1
pressure ×1