0

我想检查在EditText中输入的用户名是否已经存在于SQL数据库中。

为此,使用 EditText 的内容创建一个新字符串。

user = nombreUsuario.getText().toString().trim();

创建一个读取数据库所有用户的方法,并且游标的内容也传递一个String。

public String obtenerNombresDeUsuario() {

    String lectura = "";
    Cursor c = db.query(TABLA_BASEDATOS, new String[] {KEY_NOMBRE, }, null, null, null, null, null);

    int nom = c.getColumnIndex(KEY_NOMBRE);

    for (c.moveToFirst(); c.isAfterLast(); c.moveToNext()){
        lectura = c.getString(nom) + '\n';

    }
    return lectura;
}

然后使用方法。contains() 查看数据库名称是否已经存在,但不起作用。

if (duplicado.contains(user)){
    //Creamos el aviso
    Toast aviso = Toast.makeText(getApplicationContext(), "El nombre de usuario ya existe, por favor seleccione un nombre de usuario distinto", Toast.LENGTH_LONG);
    aviso.show();
}else{
    //insertamos el nombre de usuario en la base de datos
    db.insertarContacto(user, "0");
    db.cerrar();
}

使其工作的任何建议

4

1 回答 1

0
for (c.moveToFirst(); c.isAfterLast(); c.moveToNext()){

我认为应该是

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){

你只想要一个名字从这里回来吗?目前你正在循环,但每次都重置 lectura 值。您可以使用

lecture += c.getString(nom) + '\n';

如果会有很多字符串,您可能需要使用字符串生成器。

public String obtenerNombresDeUsuario() {

    Cursor c = db.query(TABLA_BASEDATOS, new String[] {KEY_NOMBRE, }, null, null, null, null, null);

    int nom = c.getColumnIndex(KEY_NOMBRE);

     StringBuilder lectura = new StringBuilder();
     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
        lectura.append(c.getString(nom) + '\n');

     }
     return lectura.toString();
}

您还可以仅使用 sql 检查 lectura 是否存在

public boolean lecturaExists(String lectura) {

    Cursor c = db.query(TABLA_BASEDATOS, new String[] {KEY_NOMBRE, }, "lectura_name = ?", new String[]{lectura}, null, null, null);

    int nom = c.getColumnIndex(KEY_NOMBRE);

    boolean exists = c.moveToFirst();
    c.close();
    return exists ;
}
于 2013-06-24T00:52:41.117 回答