我希望任何人都可以帮助我。
我在我的 android 应用程序上使用 sqlite3。我正在尝试执行此查询:
mCursor = conexion.getDatabase().rawQuery("SELECT employee.name, company.name FROM employee "
+ " INNER JOIN company "
+ " ON (employee.idCompany=company._id) ORDER BY employee.name", null);
这是我的架构:
CREATE table company ("_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "name TEXT NOT NULL);";
CREATE table employee ("_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "name TEXT NOT NULL, "
+ "fullName TEXT NOT NULL, "
+ "idCompany INTEGER NOT NULL, "
+ "FOREIGN KEY(idCompany) REFERENCES company (_id));";
当我在我的 android 应用程序上运行此查询时,我收到以下错误:
05-09 22:35:23.170: E/AndroidRuntime(10920): FATAL EXCEPTION: main
05-09 22:35:23.170: E/AndroidRuntime(10920): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ej.ej/com.ej.ej.controlador.AplicacionActivity}: java.lang.IllegalArgumentException: column '_id' does not exist
如果我运行相同的查询但选择 *:
mCursor = conexion.getDatabase().rawQuery("SELECT * FROM employee "
+ " INNER JOIN company "
+ " ON (employee.idEmployee=company._id) ORDER BY employee.name", null);
我没问题,它工作正常。但是因为在我的模式中,我有公司名称和员工名称,所以我需要区分两者。
我尝试使用 cmd 和 adb 命令执行此查询,它可以工作。我真的不明白为什么会出错!!
编辑:我让它工作,正如@HalR 在查询中建议的那样(不知道为什么)我必须检索 ID。所以现在我有:
mCursor = conexion.getDatabase().rawQuery("SELECT company._id, employee.name as employee, company.name as company FROM employee "
+ " INNER JOIN company "
+ " ON (employee.idCompany=company._id) ORDER BY employee.name", null);
但是我还有一个问题,它不在查询中,它在我的 ActivityFragment 上(感谢@Hoan Nguyen,他让我再次看到了这部分代码):列出我的员工,我得到了我的员工的名字和idCompany。不知道为什么,但这是在寻找 Company 的 _id 而不是 Employee 的 idCompany。
String[] from = new String[] { "name", "idCompany"};
int[] to = new int[] { R.id.textViewNombreIzq, R.id.textViewNombreCent };
ListView lvEmployee = (ListView) view.findViewById (android.R.id.list);
ListClientsCursorAdapter notes = new ListClientsCursorAdapter(context, R.layout.activity_file_client, mCursorEmployee, from, to, 0);
lvEmployee .setAdapter(notes);
我只是改变了:
String[] from = new String[] { "name", "idCompany"};
为了:
String[] from = new String[] { "employee", "company"};
现在很好。谢谢大家,我真的很感激你的帮助:)。