Java 使用android studio在sqlite数据库中插入元组
我正在尝试在sqlite数据库中插入一个元组(记录)。它有一个整数主键。但是当我尝试插入时,我得到了一个错误“空对象引用”。 我搜索了很多,但不幸的是,我无法解决与我的案例有关的错误。 请你帮我一下好吗 代码如下: logcat说有一个致命的例外 这就是我创建表的方式。我的sql insert函数工作正常,但我认为我的数据类型有问题Java 使用android studio在sqlite数据库中插入元组,java,android,sqlite,android-studio,Java,Android,Sqlite,Android Studio,我正在尝试在sqlite数据库中插入一个元组(记录)。它有一个整数主键。但是当我尝试插入时,我得到了一个错误“空对象引用”。 我搜索了很多,但不幸的是,我无法解决与我的案例有关的错误。 请你帮我一下好吗 代码如下: logcat说有一个致命的例外 这就是我创建表的方式。我的sql insert函数工作正常,但我认为我的数据类型有问题 public class AccountHolder_to implements Parcelable { private Integer A_A_ac
public class AccountHolder_to implements Parcelable {
private Integer A_A_accountNumber;
private String A_email;
private String A_username;
private String A_password;
private String A_syncedURL;
private Demographics_to A_A_patientID;
public AccountHolder_to () {
super();
}
private AccountHolder_to(Parcel in) {
super();
this.A_A_accountNumber= in.readInt();
this.A_email = in.readString();
this.A_username = in.readString();
this.A_password = in.readString();
this.A_syncedURL = in.readString();
this.A_A_patientID = in.readParcelable(Demographics_to.class.getClassLoader());
}
public int getA_A_accountNumber() {return A_A_accountNumber;}
public void setA_A_accountNumber(int id) {
this.A_A_accountNumber = id;
}
public String getA_email() {
return A_email;
}
public void setA_email(String email) {
this.A_email = email;
}
public String getA_username() {
return A_username;
}
public void setA_username(String un) {
this.A_username = un;
}
public String getA_password() {
return A_password;
}
public void setA_password(String pw) {
this.A_password = pw;
}
public String getA_syncedURL() {
return A_syncedURL;
}
public void setA_syncedURL(String sr) {
this.A_syncedURL = sr;
}
public Demographics_to getA_A_patientID() {
return A_A_patientID;
}
public void setA_A_patientID(Demographics_to pi) {
this.A_A_patientID = pi;
}
@Override
public String toString() {
return "accountHolder_Table [A_accountNumber:" + A_A_accountNumber + ", name:" + A_email
+ ",username:" + A_username + "password:" + A_password
+ "syncedurl:" +A_syncedURL +"patientid:" + A_A_patientID+ "]";
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(getA_A_accountNumber());
parcel.writeString(getA_email());
parcel.writeString(getA_username());
parcel.writeString(getA_password());
parcel.writeString(getA_syncedURL());
parcel.writeParcelable(getA_A_patientID(), flags);
}
public static final Parcelable.Creator<AccountHolder_to> CREATOR = new Parcelable.Creator<AccountHolder_to>() {
public AccountHolder_to createFromParcel(Parcel in) {
return new AccountHolder_to(in);
}
public AccountHolder_to[] newArray(int size) {
return new AccountHolder_to[size];
}
};
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + A_A_accountNumber;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AccountHolder_to other = (AccountHolder_to) obj;
if (A_A_accountNumber != other.A_A_accountNumber)
return false;
return true;
}
}
public class AccountHolder\u实现包裹{
私有整数A_A_accountNumber;
私人字符串A_电子邮件;
私有字符串A_用户名;
私有字符串A_密码;
私有字符串A_syncedURL;
私人的人口统计资料;
公共帐户持有人(u to){
超级();
}
私人账户持有人(包裹寄送){
超级();
这个.A_A_accountNumber=in.readInt();
this.A_email=in.readString();
this.A_username=in.readString();
this.A_password=in.readString();
this.A_syncedURL=in.readString();
this.A_A_patientID=in.readParcelable(Demographics_to.class.getClassLoader());
}
public int getA_A_accountNumber(){返回A_A_accountNumber;}
公共void setA\u A_uaccountnumber(int id){
this.A_A_accountNumber=id;
}
公共字符串getA_email(){
回复一封电子邮件;
}
公共无效setA_电子邮件(字符串电子邮件){
this.A_email=电子邮件;
}
公共字符串getA_username(){
返回一个_用户名;
}
公共无效setA_用户名(字符串un){
this.A_username=un;
}
公共字符串getA_password(){
返回密码;
}
公共无效setA_密码(字符串pw){
this.A_password=pw;
}
公共字符串getA_syncedURL(){
返回一个_syncedURL;
}
公共空集同步(字符串sr){
此.A_syncedURL=sr;
}
公共人口统计数据{
返回一个_A_patientID;
}
公共无效setA_A_patientID(人口统计数据至pi){
this.A_A_patientID=pi;
}
@凌驾
公共字符串toString(){
return“accountHolder\u Table[A\u accountNumber:+A\u A\u accountNumber+”,name:+A\u email
+,用户名:“+A_用户名+”密码:“+A_密码”
+“syncedurl:“+A_syncedurl+”patientid:“+A_A_patientid+”]”;
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效writeToParcel(Parcel-Parcel,int标志){
parcel.writeInt(getA_A_accountNumber());
parcel.writeString(getA_email());
parcel.writeString(getA_username());
parcel.writeString(getA_password());
writeString(getA_syncedURL());
parcel.writeParcelable(getA_A_patientID(),标志);
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
公共帐户持有人\u要从包裹中创建(包裹中){
将新账户持有人返回至(in);
}
公共帐户持有人\u到[]新数组(整数大小){
将新帐户持有人_返回到[大小];
}
};
@凌驾
公共int hashCode(){
最终整数素数=31;
int结果=1;
结果=素数*结果+A\u A\u账号;
返回结果;
}
@凌驾
公共布尔等于(对象obj){
if(this==obj)
返回true;
if(obj==null)
返回false;
如果(getClass()!=obj.getClass())
返回false;
账户持有人至其他=(账户持有人至)obj;
if(A_A_accountNumber!=其他.A_A_accountNumber)
返回false;
返回true;
}
}
提前谢谢你 谢谢你的评论, 幸运的是,我可以通过执行以下操作修复错误: 首先,正如您所说,我更改了主键的定义,如下所示:
private int A_A_accountNumber;
public int save(AccountHolder_to acchold) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DataBaseHelper.email, acchold.getA_email());
values.put(DataBaseHelper.username, acchold.getA_username());
values.put(DataBaseHelper.password, acchold.getA_password());
values.put(DataBaseHelper.syncedURL, acchold.getA_syncedURL());
values.put(DataBaseHelper.A_patientID, "");
// Inserting Row
long acc_Id = db.insert(dbHelper.accountHolder_Table, null, values);
db.close(); // Closing database connection
return (int) acc_Id;
}
这是一个整数,因为它是一个引用类型,所以导致了问题,我必须为此创建一个对象。但我只是把它改成“int”,它就成功了
其次,在我为CRUD操作创建的AccountHolderDAO中,我更改了插入操作,如下所示:
private int A_A_accountNumber;
public int save(AccountHolder_to acchold) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DataBaseHelper.email, acchold.getA_email());
values.put(DataBaseHelper.username, acchold.getA_username());
values.put(DataBaseHelper.password, acchold.getA_password());
values.put(DataBaseHelper.syncedURL, acchold.getA_syncedURL());
values.put(DataBaseHelper.A_patientID, "");
// Inserting Row
long acc_Id = db.insert(dbHelper.accountHolder_Table, null, values);
db.close(); // Closing database connection
return (int) acc_Id;
}
另一个错误是因为我试图发送一个值并调用主键的“get”方法,主键基本上是“AUTOINCREMENT”。实际上,我没有传递任何消息。post AccountHolder\u to您获得了
NullPointerException
,这意味着您的对象在试图获得getA\u A\u accountNumber
时处于空状态。请检查AccountHolder\u to中的第54行。java@Blackbelt我已发布。A\u A\u accountNumber
为空。自动取消装箱正在使您的应用程序崩溃。