我有一个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证明...我找不到解决方案。在最后的证明中,控制台中的错误是:“=”附近的错误:语法错误,但它从未起作用。谢谢你的帮助。
答案 0 :(得分:0)
where nombre_empresa="+vals.get(i).getEmpresa()+")"
由于nombre_empresa
是一个字符字段,所以你需要在条件中使用引号,即
where nombre_empresa = '" + vals.get(i).getEmpresa() + "')"