2016-06-26 3 views
0

Я хочу подключиться к таблицам в моей базе данных с разными ID (CustomerID, OrderID). Я использую следующий код, чтобы создать свой внешний ключ:Нет такого столбца с внешним ключом

FOREIGN KEY("+ COLUMN_ORDER_ID + ") REFERENCES+TABLE_NAME_CUSTOMER + "(" + COLUMN_CUSTOMER_ID + "));"; 

Я не проводки полного исходного кода, потому что мой первый стол отлично работает, и я думаю, что проблема является внешним ключом.

отфильтровать данные с помощью этого метода:

public List<Orders> getOrdersByCustomerID() { 
    List<Orders> orderList = new ArrayList<Orders>(); 
    String query = "select " + COLUMN_ORDER_ID 
      + "," + COLUMN_ORDER_NAME 
      + "," + COLUMN_SETS 
      + "," + COLUMN_REPEATS 
      + "," + COLUMN_SECTION 
      + " from " + TABLE_NAME_ORDERS 
      + " where " + COLUMN_CUSTOMER_ID 
      + "=" + COLUMN_ORDER_ID; 
    db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(query, null); 
    if (cursor.moveToFirst()) { 
     do { 
      Orders orders = new Orders(cursor.getString(0), cursor.getString(1), cursor.getInt(2), cursor.getInt(3), cursor.getString(4)); 
      orderList.add(orders); 
     } while (cursor.moveToNext()); 
    } 
    db.close(); 
    return orderList; 
} 

Я получаю сообщение об ошибке:

06-26 17: 11: 26.154 10163-10163/com.xxx.xxx.xxx

Е/AndroidRuntime: неустранимый: основной процесс: com.xxx.xxx.xxx, ПИД: 10163

java.lang.RuntimeException: Невозможно начать деятельность android.database.sqlite.SQLiteException: нет такого столбца: customerId (Sqlite code 1): при компиляции: выберите orderId, orderName, наборы, повторы, раздел из заказов, где customerId = orderId, (ошибка ОС - 2: Нет такого файла или каталога)

Я думаю, что связь между этими двумя идентификаторами неверна или мне нужно передать идентификатор из таблицы моих клиентов? Какие-нибудь советы? По моему мнению, Customer может иметь несколько Order. Вот почему я использую внешний ключ; Надеюсь, это правильно.

+0

Ошибки относится к колонку ('customerId'), которую он не нашел в таблице (' orders') - вы можете показать нам структуру (имена столбцов) ваш ' таблица заказов? – ishmaelMakitla

+0

customerId - это столбец в моей таблице покупателя, в моей таблице заказов у ​​меня нет столбца с именем costumerId – developKinberg

+0

. Тогда ваш запрос (как отражено в ошибке) неверен: '' select orderId, orderName, sets, repeat, section от заказов, где customerId = orderId ... "' - почему вы проверяете, является ли 'customerId' (по порядкам таблицы) равным' orderId'? Вместо этого это должен быть идентификатор клиента, который передается в качестве аргумента вашей функции. – ishmaelMakitla

ответ

0

Редактировать: Я ошибся, по-видимому, запросы по умолчанию не учитываются по умолч нию в mysql.

Редактировать: Чтобы создать внешний ключ, обе таблицы должны содержать ConsumerId. Это позволяет установить отношения с использованием внешнего ключа. Ваш запрос должен быть изменен, как и после создания внешнего ключа. Это должно быть что-то вроде этого

select " + COLUMN_ORDER_IDq 
     + "," + COLUMN_ORDER_NAME 
     + "," + COLUMN_SETS 
     + "," + COLUMN_REPEATS 
     + "," + COLUMN_SECTION 
     + " from " + TABLE_NAME_ORDERS + "," + TABLE_NAME_CUSTOMERS 
     + " where " + TABLE_NAME_ORDERS +"." + COLUMN_CUSTOMER_ID 
     + "=" + TABLE_NAME_CUSTOMERS + "." + COLUMN_CUSTOMER_ID 
+0

У меня есть две таблицы, и в таблице моих клиентов у меня есть столбец costumerId, это мой ключ ссылки ко второй таблице с порядком. – developKinberg

+0

Имена в выражении SQL не учитывают регистр, если не указаны. – Andreas

+0

В сообщении об ошибке указано, что в таблице 'orders' нет столбца' customerId'. – Andreas

Смежные вопросы