在android中删除子查询

时间:2014-06-17 13:35:27

标签: android mysql sql android-sqlite

我有一个sqlitedatabase,其定义是:

public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub

    db.execSQL("CREATE TABLE IF NOT EXISTS carteras (" + "id INTEGER PRIMARY KEY AUTOINCREMENT,"
            + "nombre_cartera  VARCHAR(30));");

    db.execSQL("CREATE TABLE IF NOT EXISTS empresas (" + "id INTEGER PRIMARY KEY,"
            + "nombre_empresa VARCHAR(30),"
            + "precio_actual DECIMAL(7));");

    db.execSQL("CREATE TABLE IF NOT EXISTS operaciones (" +
             "fk_empresa INTEGER NOT NULL," +
             "fk_cartera INTEGER NOT NULL," +
             "cantidad INT(7)," +
             "precio_compra DECIMAL(7),"+
             "PRIMARY KEY (fk_empresa,fk_cartera)," +
             "FOREIGN KEY (fk_empresa) REFERENCES empresas(id)," + 
             "FOREIGN KEY (fk_cartera) REFERENCES carteras (id));");

在其他活动中,我需要删除多个chechbox项目,我这样做:

public void eliminar() {
        bd = base.getWritableDatabase();
        for (int i = 0; i < vals.size(); i++) {
            if(vals.get(i).isChecked()==true)
            {

//     String[] columns = {"id"};
//Cursor fila = bd.query("empresas", columns, "nombre_empresa=?", new String[] {vals.get(i).getEmpresa() }, null, null, null);
//bd.execSQL("delete from operaciones where fk_empresa IN (select e.nombre_empresa from empresas as e INNER JOIN operaciones fk_empresa=e.nombre_empresa where nombre_empresa="+vals.get(i).getEmpresa()+")", null);


Cursor fila = bd.rawQuery("delete from operaciones where fk_empresa IN (select e.nombre_empresa from empresas as e INNER JOIN operaciones fk_empresa=e.nombre_empresa where nombre_empresa="+vals.get(i).getEmpresa()+")", null);
                while (fila.moveToNext()) 
                {
                    aux=fila.getInt(0);
                    System.out.println(aux);
                }
//                cant=bd.delete("operaciones", "fk_empresa=" , null);
                //cant = bd.delete("operaciones", "id="+aux , null);    
            }

        }
        bd.close();

//        if (cant >= 1)
//        Toast.makeText(this, "Se borró la cartera con éxito",Toast.LENGTH_SHORT).show();
//        else
//        Toast.makeText(this, "Se produjo un error, vuelva a intentarlo",Toast.LENGTH_SHORT).show();
    }

}

子查询不起作用。我用db.execSQL,db.rawQuery证明...我找不到解决方案。在最后的证明中,控制台中的错误是:“=”附近的错误:语法错误,但它从未起作用。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

where nombre_empresa="+vals.get(i).getEmpresa()+")"

由于nombre_empresa是一个字符字段,所以你需要在条件中使用引号,即

where nombre_empresa = '" + vals.get(i).getEmpresa() + "')"