Android: SQLite cursor.getPosition() returns 字符串?
Android: SQLite cursor.getPosition() returns string?
c.getString(c.getPosition()) returns
1 为第一个元素,
他对于第二个元素,
第三元素锂,和
第四个元素为 9.0122。
这些对我来说是非常奇怪的位置值,我正在尝试理解这一点。
它应该返回设置为 PRIMARY KEY 的 atomicNumber 吗?我是 Android 的新手,在文档中它说 cursor.getPosition():
"Returns the current position of the cursor in the row set"
这是否意味着 returns ROWID 或列中的当前位置?
public void Test(){
String URL = "content://com.apress.gerber.calculator.PeriodicTable/elements";
Uri element = Uri.parse(URL);
Cursor c = getContentResolver().query(element, null, null, null, PeriodicTable.ATOMIC_NUMBER);
if (c.moveToFirst()) {
do{
Toast.makeText(this,
c.getString(c.getColumnIndex(PeriodicTable.ATOMIC_NUMBER)) +
", " + c.getString(c.getColumnIndex( PeriodicTable.SYMBOL)) +
", " + c.getString(c.getColumnIndex( PeriodicTable.NAME)) +
", " + c.getString(c.getColumnIndex(PeriodicTable.MOLAR_MASS)) +
", POSITION: " + c.getString(c.getPosition()),
Toast.LENGTH_SHORT).show();
} while (c.moveToNext());
}
else Toast.makeText(this, "Database is empty.", Toast.LENGTH_SHORT).show();
}
Element.xml 解析成SQLite数据库:
<elements>
<element>
<molarMass>1.0079</molarMass>
<name>Hydrogen</name>
<symbol>H</symbol>
<atomicNumber>1</atomicNumber>
</element>
<element>
<molarMass>4.0026</molarMass>
<name>Helium</name>
<symbol>He</symbol>
<atomicNumber>2</atomicNumber>
</element>
<element>
<molarMass>6.941</molarMass>
<name>Lithium</name>
<symbol>Li</symbol>
<atomicNumber>3</atomicNumber>
</element>
<element>
<molarMass>9.0122</molarMass>
<name>Beryllium</name>
<symbol>Be</symbol>
<atomicNumber>4</atomicNumber>
</element>
</elements>
SQLite table 语句:
static final String CREATE_DB_TABLE =
" CREATE TABLE " + ELEMENTS_TABLE_NAME +
" ( atomicNumber INTEGER PRIMARY KEY ASC, " +
" symbol TEXT NOT NULL, " +
" name TEXT NOT NULL, " +
" molarMass TEXT NOT NULL);";
当您调用 c.getString()
时,您将获取您传入其索引的列中当前行的数据。您的代码将 getPosition()
返回的行号作为该列传递指数。从您的 getPosition()
调用中删除 getString()
以获得您所期望的结果。
", POSITION: " + c.getPosition(),
c.getString(c.getPosition()) returns 1 为第一个元素, 他对于第二个元素, 第三元素锂,和 第四个元素为 9.0122。
这些对我来说是非常奇怪的位置值,我正在尝试理解这一点。
它应该返回设置为 PRIMARY KEY 的 atomicNumber 吗?我是 Android 的新手,在文档中它说 cursor.getPosition():
"Returns the current position of the cursor in the row set"
这是否意味着 returns ROWID 或列中的当前位置?
public void Test(){
String URL = "content://com.apress.gerber.calculator.PeriodicTable/elements";
Uri element = Uri.parse(URL);
Cursor c = getContentResolver().query(element, null, null, null, PeriodicTable.ATOMIC_NUMBER);
if (c.moveToFirst()) {
do{
Toast.makeText(this,
c.getString(c.getColumnIndex(PeriodicTable.ATOMIC_NUMBER)) +
", " + c.getString(c.getColumnIndex( PeriodicTable.SYMBOL)) +
", " + c.getString(c.getColumnIndex( PeriodicTable.NAME)) +
", " + c.getString(c.getColumnIndex(PeriodicTable.MOLAR_MASS)) +
", POSITION: " + c.getString(c.getPosition()),
Toast.LENGTH_SHORT).show();
} while (c.moveToNext());
}
else Toast.makeText(this, "Database is empty.", Toast.LENGTH_SHORT).show();
}
Element.xml 解析成SQLite数据库:
<elements>
<element>
<molarMass>1.0079</molarMass>
<name>Hydrogen</name>
<symbol>H</symbol>
<atomicNumber>1</atomicNumber>
</element>
<element>
<molarMass>4.0026</molarMass>
<name>Helium</name>
<symbol>He</symbol>
<atomicNumber>2</atomicNumber>
</element>
<element>
<molarMass>6.941</molarMass>
<name>Lithium</name>
<symbol>Li</symbol>
<atomicNumber>3</atomicNumber>
</element>
<element>
<molarMass>9.0122</molarMass>
<name>Beryllium</name>
<symbol>Be</symbol>
<atomicNumber>4</atomicNumber>
</element>
</elements>
SQLite table 语句:
static final String CREATE_DB_TABLE =
" CREATE TABLE " + ELEMENTS_TABLE_NAME +
" ( atomicNumber INTEGER PRIMARY KEY ASC, " +
" symbol TEXT NOT NULL, " +
" name TEXT NOT NULL, " +
" molarMass TEXT NOT NULL);";
当您调用 c.getString()
时,您将获取您传入其索引的列中当前行的数据。您的代码将 getPosition()
返回的行号作为该列传递指数。从您的 getPosition()
调用中删除 getString()
以获得您所期望的结果。
", POSITION: " + c.getPosition(),