>source

그래서 쇼핑 목록 앱이 있습니다. mainActivity 있다 recyclerView 사용자의 목록을 포함합니다. 식료품 목록, 주간 목록 등

사용자가 항목을 클릭하면 제품 활동으로 이동합니다. recyclerView . 그리고 저는 2 개의 다른 SQLite 데이터베이스 1 : lists 2 : products를 가지고 있습니다.

내가 사용한 로직은 사용자가 목록을 추가 할 때 목록 데이터베이스가 목록 이름과 ID를 기록하고 제품 데이터베이스에 목록 이름도 추가하며 사용자가 제품을 추가 할 때 update() 대신에 insert()SQLite 열이 이미 존재하므로 제품 데이터베이스에서 제품 이름과 ID가 업데이트됩니다.

다음은 목록 및 제품 테이블의 구조입니다.

LISTS
  ID      LIST_NAME
1  1       list 1
2  2       list 2
PRODUCTS
  ID      LIST_NAME    PRODUCT_NAME
1  1       list 1     product1 in list1
2  2       list 1     product2 in list1

문제는 목록을 추가 한 다음 제품으로 이동하면이 오류가 표시됩니다.

android.database.sqlite.SQLiteException: no such column: list (Sqlite code 1 SQLITE_ERROR): , while compiling: SELECT * FROM prducts WHERE LIST_NAME = list, (OS error - 2:No such file or directory)

이것은 내부의 방법입니다 SQLiteOpenHelper 다음 줄에 오류가 표시됩니다. cursor = db.rawQuery(productsQuery, null);

public Cursor getAllProducts(String list_name)
    {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = null;
        if (db != null)
        {
            String productsQuery = " SELECT * FROM " +DB_TABLE+ " WHERE "+LIST_NAME_COLUMN+ " = "+list_name;
            cursor = db.rawQuery(productsQuery, null);
        }
        return cursor;
    }

내가 사용한 제품 활동에서 Bundle bundle = getIntent().getExtras(); 목록 활동에서 목록 이름을 전달합니다. 그리고 내가 사용한 목록 활동에서 intent.putExtra("list_name", list_name);


  • 답변 # 1

    문자열 값을 전달합니다. list_name sql 문에서 인용되므로 열 이름으로 간주됩니다.
    사용 ? 쿼리의 자리 표시 자 및 전달 list_name 두 번째 인수로 rawQuery() :

    String productsQuery = "SELECT * FROM " + DB_TABLE + " WHERE " + LIST_NAME_COLUMN + " = ?";
    cursor = db.rawQuery(productsQuery, new String[] {list_name});
    
    

    이렇게하면 쿼리에 전달하는 매개 변수를 인용하는 것에 대해 걱정할 필요가 없습니다.

  • 이전 linux - tail에서 출력을 grep하고 파일 이름을 포함하는 방법은 무엇입니까?
  • 다음 SQLAlchemy에서 무결성 오류 발생, "테이블의 업데이트 또는 삭제가 외래 키 제약 조건을 위반 함"