Java 数据库正确访问一个变量,但不能访问另一个变量
所以我有两个变量,我目前正在尝试访问。水和木桶。我不确定为什么waterAmt变量工作正常,但另一个变量工作不正常。bucketExp似乎没有按应有的方式存储,尽管它的存储方式与waterAmt相同。提前谢谢你的帮助 访问数据库的代码:Java 数据库正确访问一个变量,但不能访问另一个变量,java,android,database,sqlite,mobile,Java,Android,Database,Sqlite,Mobile,所以我有两个变量,我目前正在尝试访问。水和木桶。我不确定为什么waterAmt变量工作正常,但另一个变量工作不正常。bucketExp似乎没有按应有的方式存储,尽管它的存储方式与waterAmt相同。提前谢谢你的帮助 访问数据库的代码: //pull data data = new Database(SetupTimerPC1.this); data.open(); bucketExpTotal = data.getBucketExp(); totalWater = data.getWaterA
//pull data
data = new Database(SetupTimerPC1.this);
data.open();
bucketExpTotal = data.getBucketExp();
totalWater = data.getWaterAmt();
data.close();
//add new data to old
bucketExpTotal += bucketExp;
totalWater += waterAmt;
//push data
data.open();
data.bucketExpEntry(bucketExpTotal);
data.waterAmountEntry(totalWater);
data.close();
public long waterAmountEntry(int waterAmt)
{
ContentValues cv = new ContentValues();
cv.put(KEY_WATER, waterAmt);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}//end waterAmountEntry function
public long bucketExpEntry(int bucketExp)
{
ContentValues cv = new ContentValues();
cv.put(KEY_BUCKETEXP, bucketExp);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}//end bucketExpEntry function
public int getWaterAmt()
{
int waterAmount = 0, iWaterAmount = 0;
String[] columns = new String[] {KEY_ROWID, KEY_ROCK, KEY_METEORROCK, KEY_WATER,
KEY_POPULATION, KEY_SHOVEL, KEY_BUCKET, KEY_PICKAXE, KEY_SHOVELEXP,
KEY_BUCKETEXP, KEY_PICKAXEEXP};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
if (c != null && c.getCount() > 0)
{
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
{
iWaterAmount = c.getColumnIndex(KEY_WATER);
waterAmount = c.getInt(iWaterAmount);
}//end for
c.close();
return waterAmount;
}//end if
return 0;
}//end getWaterAmt function
public int getBucketExp()
{
int bucketExp = 0, iBucketExp = 0;
String[] columns = new String[] {KEY_ROWID, KEY_ROCK, KEY_METEORROCK, KEY_WATER,
KEY_POPULATION, KEY_SHOVEL, KEY_BUCKET, KEY_PICKAXE, KEY_SHOVELEXP,
KEY_BUCKETEXP, KEY_PICKAXEEXP};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
if (c != null && c.getCount() > 0)
{
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
{
iBucketExp = c.getColumnIndex(KEY_BUCKETEXP);
bucketExp = c.getInt(iBucketExp);
}//end for
c.close();
return bucketExp;
}//end if
return 0;
}//end getBucketExp function
将waterAmt输入数据库的代码:
//pull data
data = new Database(SetupTimerPC1.this);
data.open();
bucketExpTotal = data.getBucketExp();
totalWater = data.getWaterAmt();
data.close();
//add new data to old
bucketExpTotal += bucketExp;
totalWater += waterAmt;
//push data
data.open();
data.bucketExpEntry(bucketExpTotal);
data.waterAmountEntry(totalWater);
data.close();
public long waterAmountEntry(int waterAmt)
{
ContentValues cv = new ContentValues();
cv.put(KEY_WATER, waterAmt);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}//end waterAmountEntry function
public long bucketExpEntry(int bucketExp)
{
ContentValues cv = new ContentValues();
cv.put(KEY_BUCKETEXP, bucketExp);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}//end bucketExpEntry function
public int getWaterAmt()
{
int waterAmount = 0, iWaterAmount = 0;
String[] columns = new String[] {KEY_ROWID, KEY_ROCK, KEY_METEORROCK, KEY_WATER,
KEY_POPULATION, KEY_SHOVEL, KEY_BUCKET, KEY_PICKAXE, KEY_SHOVELEXP,
KEY_BUCKETEXP, KEY_PICKAXEEXP};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
if (c != null && c.getCount() > 0)
{
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
{
iWaterAmount = c.getColumnIndex(KEY_WATER);
waterAmount = c.getInt(iWaterAmount);
}//end for
c.close();
return waterAmount;
}//end if
return 0;
}//end getWaterAmt function
public int getBucketExp()
{
int bucketExp = 0, iBucketExp = 0;
String[] columns = new String[] {KEY_ROWID, KEY_ROCK, KEY_METEORROCK, KEY_WATER,
KEY_POPULATION, KEY_SHOVEL, KEY_BUCKET, KEY_PICKAXE, KEY_SHOVELEXP,
KEY_BUCKETEXP, KEY_PICKAXEEXP};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
if (c != null && c.getCount() > 0)
{
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
{
iBucketExp = c.getColumnIndex(KEY_BUCKETEXP);
bucketExp = c.getInt(iBucketExp);
}//end for
c.close();
return bucketExp;
}//end if
return 0;
}//end getBucketExp function
将bucketExp输入数据库的代码:
//pull data
data = new Database(SetupTimerPC1.this);
data.open();
bucketExpTotal = data.getBucketExp();
totalWater = data.getWaterAmt();
data.close();
//add new data to old
bucketExpTotal += bucketExp;
totalWater += waterAmt;
//push data
data.open();
data.bucketExpEntry(bucketExpTotal);
data.waterAmountEntry(totalWater);
data.close();
public long waterAmountEntry(int waterAmt)
{
ContentValues cv = new ContentValues();
cv.put(KEY_WATER, waterAmt);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}//end waterAmountEntry function
public long bucketExpEntry(int bucketExp)
{
ContentValues cv = new ContentValues();
cv.put(KEY_BUCKETEXP, bucketExp);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}//end bucketExpEntry function
public int getWaterAmt()
{
int waterAmount = 0, iWaterAmount = 0;
String[] columns = new String[] {KEY_ROWID, KEY_ROCK, KEY_METEORROCK, KEY_WATER,
KEY_POPULATION, KEY_SHOVEL, KEY_BUCKET, KEY_PICKAXE, KEY_SHOVELEXP,
KEY_BUCKETEXP, KEY_PICKAXEEXP};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
if (c != null && c.getCount() > 0)
{
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
{
iWaterAmount = c.getColumnIndex(KEY_WATER);
waterAmount = c.getInt(iWaterAmount);
}//end for
c.close();
return waterAmount;
}//end if
return 0;
}//end getWaterAmt function
public int getBucketExp()
{
int bucketExp = 0, iBucketExp = 0;
String[] columns = new String[] {KEY_ROWID, KEY_ROCK, KEY_METEORROCK, KEY_WATER,
KEY_POPULATION, KEY_SHOVEL, KEY_BUCKET, KEY_PICKAXE, KEY_SHOVELEXP,
KEY_BUCKETEXP, KEY_PICKAXEEXP};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
if (c != null && c.getCount() > 0)
{
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
{
iBucketExp = c.getColumnIndex(KEY_BUCKETEXP);
bucketExp = c.getInt(iBucketExp);
}//end for
c.close();
return bucketExp;
}//end if
return 0;
}//end getBucketExp function
从数据库中提取waterAmt的代码:
//pull data
data = new Database(SetupTimerPC1.this);
data.open();
bucketExpTotal = data.getBucketExp();
totalWater = data.getWaterAmt();
data.close();
//add new data to old
bucketExpTotal += bucketExp;
totalWater += waterAmt;
//push data
data.open();
data.bucketExpEntry(bucketExpTotal);
data.waterAmountEntry(totalWater);
data.close();
public long waterAmountEntry(int waterAmt)
{
ContentValues cv = new ContentValues();
cv.put(KEY_WATER, waterAmt);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}//end waterAmountEntry function
public long bucketExpEntry(int bucketExp)
{
ContentValues cv = new ContentValues();
cv.put(KEY_BUCKETEXP, bucketExp);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}//end bucketExpEntry function
public int getWaterAmt()
{
int waterAmount = 0, iWaterAmount = 0;
String[] columns = new String[] {KEY_ROWID, KEY_ROCK, KEY_METEORROCK, KEY_WATER,
KEY_POPULATION, KEY_SHOVEL, KEY_BUCKET, KEY_PICKAXE, KEY_SHOVELEXP,
KEY_BUCKETEXP, KEY_PICKAXEEXP};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
if (c != null && c.getCount() > 0)
{
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
{
iWaterAmount = c.getColumnIndex(KEY_WATER);
waterAmount = c.getInt(iWaterAmount);
}//end for
c.close();
return waterAmount;
}//end if
return 0;
}//end getWaterAmt function
public int getBucketExp()
{
int bucketExp = 0, iBucketExp = 0;
String[] columns = new String[] {KEY_ROWID, KEY_ROCK, KEY_METEORROCK, KEY_WATER,
KEY_POPULATION, KEY_SHOVEL, KEY_BUCKET, KEY_PICKAXE, KEY_SHOVELEXP,
KEY_BUCKETEXP, KEY_PICKAXEEXP};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
if (c != null && c.getCount() > 0)
{
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
{
iBucketExp = c.getColumnIndex(KEY_BUCKETEXP);
bucketExp = c.getInt(iBucketExp);
}//end for
c.close();
return bucketExp;
}//end if
return 0;
}//end getBucketExp function
从数据库中提取bucketExp的代码:
//pull data
data = new Database(SetupTimerPC1.this);
data.open();
bucketExpTotal = data.getBucketExp();
totalWater = data.getWaterAmt();
data.close();
//add new data to old
bucketExpTotal += bucketExp;
totalWater += waterAmt;
//push data
data.open();
data.bucketExpEntry(bucketExpTotal);
data.waterAmountEntry(totalWater);
data.close();
public long waterAmountEntry(int waterAmt)
{
ContentValues cv = new ContentValues();
cv.put(KEY_WATER, waterAmt);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}//end waterAmountEntry function
public long bucketExpEntry(int bucketExp)
{
ContentValues cv = new ContentValues();
cv.put(KEY_BUCKETEXP, bucketExp);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}//end bucketExpEntry function
public int getWaterAmt()
{
int waterAmount = 0, iWaterAmount = 0;
String[] columns = new String[] {KEY_ROWID, KEY_ROCK, KEY_METEORROCK, KEY_WATER,
KEY_POPULATION, KEY_SHOVEL, KEY_BUCKET, KEY_PICKAXE, KEY_SHOVELEXP,
KEY_BUCKETEXP, KEY_PICKAXEEXP};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
if (c != null && c.getCount() > 0)
{
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
{
iWaterAmount = c.getColumnIndex(KEY_WATER);
waterAmount = c.getInt(iWaterAmount);
}//end for
c.close();
return waterAmount;
}//end if
return 0;
}//end getWaterAmt function
public int getBucketExp()
{
int bucketExp = 0, iBucketExp = 0;
String[] columns = new String[] {KEY_ROWID, KEY_ROCK, KEY_METEORROCK, KEY_WATER,
KEY_POPULATION, KEY_SHOVEL, KEY_BUCKET, KEY_PICKAXE, KEY_SHOVELEXP,
KEY_BUCKETEXP, KEY_PICKAXEEXP};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
if (c != null && c.getCount() > 0)
{
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
{
iBucketExp = c.getColumnIndex(KEY_BUCKETEXP);
bucketExp = c.getInt(iBucketExp);
}//end for
c.close();
return bucketExp;
}//end if
return 0;
}//end getBucketExp function
现在,您的查询相当于:
"SELECT [columns] FROM [table];"
这将返回表中的所有行。接下来,您将迭代整个结果集,并且在每次迭代中,您将值设置为返回等于结果行中的某个列
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
bucketExp = cursor.getInt(...);
}
本质上,这意味着bucketExp
将等于结果最后一行中该列的值
我认为您想要的是特定行/记录的值。您需要更改查询以仅返回您正在查找的行,并摆脱for
循环。下面是一个通过ID查找特定行并返回bucketExp的示例:
public int getBucketExp(long id) {
String[] columns = new String[] { KEY_BUCKETEXP };
String where = KEY_ROWID + " = ?";
String[] whereArgs = new String[] { Long.toString(id) };
Cursor cursor = ourDatabase.query(DATABASE_TABLE, columns, where, whereArgs,
null, null, null);
int bucketExp = 0;
if (cursor.moveToFirst()) {
bucketExp = cursor.getInt(cursor.getColumnIndex(KEY_BUCKETEXP));
}
return bucketExp;
}
在这两种
get
方法中,您都在整个游标上循环,并返回最后一个结果的值。这是你的本意吗?哦,不,那不是我的本意。我只希望每个变量能够访问它自己存储的值,并保存它自己的值。有什么不同的想法吗?对不起,我是android和SQLite新手,非常感谢您的帮助。该表应该有多少行?只有一行,所以我不需要担心过滤掉这些行。我试图偏离你的例子,但没有任何回报。你说我应该在名为where的字符串中的“KEY_ROWID”之后包含什么?另外,当我将代码更改为类似getWaterAmt函数中的示例时,我也不再在那里获得正确的金额。“只有一行”--你在问题中发布的代码使用SQLiteDatabase.insert
,因此,您正在执行插入而不是更新。每次调用wateramounty
或bucketExpEntry
都将创建一个新行。使用SQLiteDatabase.update
,如果这不是您想要的。where
字符串应该有问号。问号将依次替换为中的参数,其中rgs
。在本例中,我将其设置为使用已知的行ID并将其用于WHERE子句,因为我假设(基于您的帖子)您有多行。太棒了。谢谢。这解决了我的问题。我不知道。