2

サー、入力名、番号に応じてデータベースのROWIDを返すにはどうすればよいですか?このコードは毎回値0を返すだけです。私の主キーはKEY_ROWIDです。事前に助けてくれてありがとう

//get rowid
public long getRowId(String name, String number) 
{
    // TODO Auto-generated method stub
    String[] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_NUMBER};
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NUMBER+ "=" +number, null, null, null, null);

    long rowid = c.getColumnIndex(KEY_ROWID);
    return rowid;
}

これが私がそれにアクセスする方法です

public void onClick(View arg0) {
            nameChanged = sqlName.getText().toString();
            numChanged = sqlNumber.getText().toString();
            GroupDb info = new GroupDb(EditDetails.this);
            info.open();
            long rowid = info.getRowId(name, num);
            info.updateNameNumber(rowid, nameChanged, numChanged);
            Toast.makeText(getApplicationContext(), rowid+" "+nameChanged+" "+numChanged, Toast.LENGTH_LONG).show();
            ArrayList<Contact> searchResults = info.getView();
            MyCustomBaseAdapter mcba = new MyCustomBaseAdapter(EditDetails.this, searchResults);
            mcba.updateResults(searchResults);
            Toast.makeText(getApplicationContext(), "Update Successful!", Toast.LENGTH_LONG).show();
            info.close();
            }
        });
4

1 に答える 1

6

細かいマニュアルから:

public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
[...]
戻り値

Cursor最初のエントリの前に配置されるオブジェクト。

したがって、最初cに結果セットにステップインし、そのために使用できますmoveToFirst

c.moveToFirst();

次に、カーソルが指している行からROWIDを抽出する必要があります。ただしgetColumnIndex、列名を行の位置にマッピングするためのものです。

指定された列名のゼロベースのインデックスを返します。列が存在しない場合は-1を返します。

はSELECTクエリの最初の列であるgetColumnIndexため、からゼロを取得しています。KEY_ROWID

の結果セットからgetLongを抽出したい場合は、次のように探していると思います。longCursor

long rowid = c.getLong(c.getColumnIndex(KEY_ROWID));

クエリの構造(実行する)がわかっている場合は、getColumnIndex呼び出しをスキップして、既知のインデックスを使用できます。

long rowid = c.getLong(0);

そして、あなたがしているのがROWIDを調べることだけであるなら、あなたはただ選択することができますKEY_ROWID

String[] columns = new String[]{KEY_ROWID};

無視しているものをデータベースから引き出す必要はありません。

于 2012-12-03T06:35:14.527 に答える