gpt4 book ai didi

android - 从 SQL 数据库中提取单行

转载 作者:行者123 更新时间:2023-11-29 23:24:56 25 4
gpt4 key购买 nike

所以我目前正在尝试从我的数据库中提取一行,但是当我尝试时我只是遇到了这个错误。

2018-12-12 06:17:52.499 9065-9065/com.example.caesp.dmtool E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.caesp.dmtool, PID: 9065
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.caesp.dmtool/com.example.caesp.dmtool.CreateCharacter}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2955)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetString(Native Method)
at android.database.CursorWindow.getString(CursorWindow.java:451)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
at com.example.caesp.dmtool.CreateCharacter.onCreate(CreateCharacter.java:128)
at android.app.Activity.performCreate(Activity.java:7183)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030) 
at android.app.ActivityThread.-wrap11(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6938) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 

就我的数据库而言,它看起来像这样

@Override
public void onCreate(SQLiteDatabase db)
{
// query to create a new table named dog
String CampaignList = "CREATE TABLE Campaigns" +
"(CamName TEXT);";

db.execSQL(CampaignList);// execute the query



String CharacterList = "CREATE TABLE Characters" +
"(CharName TEXT," +
"Campaign TEXT," +
"Class TEXT," +
"Level INTEGER," +
"Race TEXT," +
"Player_Name TEXT," +
"STR INTEGER," +
"DEX INTEGER," +
"CON INTEGER," +
"INT INTEGER," +
"WIS INTEGER," +
"CHA INTEGER," +
"First INTEGER," +
"Second INTEGER," +
"Third INTEGER," +
"Fourth INTEGER," +
"Fifth INTEGER," +
"Sixth INTEGER," +
"Seventh INTEGER," +
"Eighth INTEGER," +
"Ninth INTEGER," +
"Acro INTEGER," +
"Anhan INTEGER," +
"Arc INTEGER," +
"Ath INTEGER," +
"Dec INTEGER," +
"His INTEGER," +
"Ins INTEGER," +
"Inti INTEGER," +
"Inves INTEGER," +
"Med INTEGER," +
"Nat INTEGER," +
"Perc INTEGER," +
"Perf INTEGER," +
"Pers INTEGER," +
"Rel INTEGER," +
"Slei INTEGER," +
"Ste INTEGER," +
"Sur INTEGER," +
"Prof_Bon INTEGER," +
"Attacks TEXT," +
"AC INTEGER," +
"InitBon INTEGER," +
"Spd INTEGER," +
"HP_Max INTEGER," +
"HP TEXT," +
"Hit_Die TEXT," +
"Equip TEXT," +
"Backstory TEXT," +
"ProfnLang TEXT," +
"Feats TEXT," +
"SSDC INTEGER," +
"SCA TEXT," +
"SAB INTEGER," +
"Spells TEXT" +
");";

db.execSQL(CharacterList);
} // end method onCreate

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
} // end method onUpgrade
}

我的 get 方法和我尝试运行的部分 Activity 是这样的

if (RQCode == 2){
CurrentName = extras.getString("CharName");
DatabaseConnector dc = new DatabaseConnector(this);
dc.open();
Cursor c = dc.getOneCharacter(CurrentName);
if (c != null && c.moveToFirst()){
Name.setText(c.getString(c.getColumnIndex("CharName")));
Player.setText(c.getString(c.getColumnIndex("Player_Name")));
Level.setText(c.getString(c.getColumnIndex("Level")));
Race.setText(c.getString(c.getColumnIndex("Race")));
Class.setText(c.getString(c.getColumnIndex("Class")));
STR.setText(c.getString(c.getColumnIndex("STR")));
DEX.setText(c.getString(c.getColumnIndex("DEX")));
CON.setText(c.getString(c.getColumnIndex("CON")));
INT.setText(c.getString(c.getColumnIndex("INT")));
WIS.setText(c.getString(c.getColumnIndex("WIS")));
CHA.setText(c.getString(c.getColumnIndex("CHA")));
Acro.setText(c.getString(c.getColumnIndex("Acro")));
Anhan.setText(c.getString(c.getColumnIndex("Anhan")));
Arc.setText(c.getString(c.getColumnIndex("Arc")));
Ath.setText(c.getString(c.getColumnIndex("Ath")));
Dec.setText(c.getString(c.getColumnIndex("Dec")));
His.setText(c.getString(c.getColumnIndex("His")));
Ins.setText(c.getString(c.getColumnIndex("Ins")));
Inti.setText(c.getString(c.getColumnIndex("Inti")));
Inves.setText(c.getString(c.getColumnIndex("Inves")));
Med.setText(c.getString(c.getColumnIndex("Med")));
Nat.setText(c.getString(c.getColumnIndex("Nat")));
Perc.setText(c.getString(c.getColumnIndex("Perc")));
Perf.setText(c.getString(c.getColumnIndex("Perf")));
Pers.setText(c.getString(c.getColumnIndex("Pers")));
Rel.setText(c.getString(c.getColumnIndex("Rel")));
Slei.setText(c.getString(c.getColumnIndex("Slei")));
Ste.setText(c.getString(c.getColumnIndex("Ste")));
Surv.setText(c.getString(c.getColumnIndex("Sur")));
AC.setText(c.getString(c.getColumnIndex("AC")));
Init.setText(c.getString(c.getColumnIndex("Init")));
Spd.setText(c.getString(c.getColumnIndex("Spd")));
HP.setText(c.getString(c.getColumnIndex("HP")));
HitDice.setText(c.getString(c.getColumnIndex("Hit_Die")));
ProfBon.setText(c.getString(c.getColumnIndex("Prof_Bon")));
Attacks.setText(c.getString(c.getColumnIndex("Attacks")));
Spells.setText(c.getString(c.getColumnIndex("Spells")));
SAB.setText(c.getString(c.getColumnIndex("SAB")));
SCA.setText(c.getString(c.getColumnIndex("SCA")));
SSDC.setText(c.getString(c.getColumnIndex("SSDC")));
First.setText(c.getString(c.getColumnIndex("First")));
Second.setText(c.getString(c.getColumnIndex("Second")));
Third.setText(c.getString(c.getColumnIndex("Third")));
Fourth.setText(c.getString(c.getColumnIndex("Fourth")));
Fifth.setText(c.getString(c.getColumnIndex("Fifth")));
Sixth.setText(c.getString(c.getColumnIndex("Sixth")));
Seventh.setText(c.getString(c.getColumnIndex("Seventh")));
Eighth.setText(c.getString(c.getColumnIndex("Eighth")));
Ninth.setText(c.getString(c.getColumnIndex("Ninth")));
ProfnLang.setText(c.getString(c.getColumnIndex("ProfnLang")));
Feats.setText(c.getString(c.getColumnIndex("Feats")));
Equipment.setText(c.getString(c.getColumnIndex("Equipment")));
Backstory.setText(c.getString(c.getColumnIndex("Backstory")));
}


}

由于某种原因,它卡在了“Init”整数处。

现在我的主要目标是获取我从数据库中提取的信息,并将其附加到我在此 Activity 中设置的一堆 View 中。我会工作到中午左右,但我会尽力与任何愿意提供帮助的人沟通。

最佳答案

问题是其中一个 getColumnIndex(column) 没有找到匹配的列(因此返回 -1)。

根据

Returns the zero-based index for the given column name, or -1 if the column doesn't exist. If you expect the column to exist use getColumnIndexOrThrow(String) instead, which will make the error more clear. Cursor - getColumnIndex

我相信这是因为您使用了 Init.setText(c.getString(c.getColumnIndex("Init"))); 即它正在尝试在表中找到名为 init 的列,它似乎被定义为 InitBon

  • 请注意,游标 getColumnIndex 存在一个错误,因为它区分大小写。

解决打字错误/拼写错误/列名错误的方法是将它们编码为常量,然后始终使用完全相同的常量。

关于android - 从 SQL 数据库中提取单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53742112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com