Я надеюсь, что кто-нибудь может мне помочь.Запрос не работает на android, столбец «_id» не существует?
Я использую sqlite3 в своем приложении для Android. Я пытаюсь сделать этот запрос:
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));";
Когда я запускаю этот запрос на мой андроид приложение, которое я получаю следующее сообщение об ошибке:
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
Если я запускаю тот же запрос, но с помощью select *:
mCursor = conexion.getDatabase().rawQuery("SELECT * FROM employee "
+ " INNER JOIN company "
+ " ON (employee.idEmployee=company._id) ORDER BY employee.name", null);
Без проблем я получаю, все работает отлично. Но поскольку в моей схеме у меня есть имя для компании и имя для сотрудника, мне нужно различать оба.
Я пробовал выполнить этот запрос с помощью команд cmd и adb, и он работает. Я действительно не понимаю, почему ошибка!
EDITED: Я сделал это, так как @HalR предложил в запросе (не знаю почему), я должен получить идентификаторы. Так что теперь у меня есть:
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. Не знаю, почему, но это искало _id компании, а не idCompany Employee.
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"};
И теперь прекрасно. Спасибо всем, за вашу помощь я действительно оценил :).
нет idEmployee –
нет, есть idCompany. Мой сотрудник ссылается на свою компанию. – kiduxa
У вас есть список в приложении? –