-2

だから私はSQLiteとプログラミングの世界に不慣れです。アプリでDBからユーザー名を見つけて、見つかった場合はその名前を表示し、そうでない場合は見つからないことを表示します。しかし、どういうわけか私のsearchUnameメソッドは私のアプリを強制終了しています。

ここからメソッドが呼び出されます

 else if (v.getId() == R.id.bsubmit){
        EditText xa = (EditText)findViewById(R.id.et1);
        String stru = xa.getText().toString();

        String user = helper.searchUname(stru);

        if (user.equals(stru)){
            TextView tv = (TextView)findViewById(R.id.tv4);
            tv.setText(user);
        }
        else{
            TextView tv = (TextView)findViewById(R.id.tv4);
            tv.setText("not found");
        }
        }

ここに私のデータベースがあります

public class DatabaseHelper extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "contacts.db";
private static final String TABLE_NAME = "contacts";
private static final String COLUMN_ID = "id";
private static final String COLUMN_UNAME = "uname";
private static final String COLUMN_PASS = "pass";
private static final String COLUMN_POINT = "pnt";
SQLiteDatabase db;
private static final String TABLE_CREATE = "create table contacts (id integer primary key not null , " +
        "uname text not null , pass text not null ,  pnt integer not null );";

public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(TABLE_CREATE);
    this.db = db;
}

これが私のsearchUnameメソッドです。

    public String searchUname (String stru){

    db = this.getReadableDatabase();
    String query = "select uname from "+TABLE_NAME;
    Cursor c = db.rawQuery(query , null);
    String a = "not found";
    String b;

    c.moveToFirst();

        do{
            b = c.getString(1);
            if (b.equals(stru)){
                a = b;

                break;
            }

        }
    while (c.moveToNext());

    return a;
}
4

1 に答える 1

0

返されない列を取得しようとしています ( 1 )

b = c.getString(1);

1列しか返さないため、次のように取得できます。

b = c.getString(0);

列のインデックスは0ベースなので、インデックスではなく名前
で 列を取得します。

b = c.getString(c.getColumnIndex("uName"));

[編集]

次のようにメソッド ロジックを改善できます。

public String searchUname (String stru)
{
    db = this.getReadableDatabase();
    String query = "select uname from " + TABLE_NAME + " WHERE uname = '" + stru + "'";
    Cursor c = db.rawQuery(query , null);

    String a = "not found";
    if c.moveToFirst();
    {
        a = c.getString(c.getColumnIndex("uName"));
    }

    return a;
}
于 2016-01-26T09:07:59.190 に答える