2011-07-03 35 views
6

Tôi có mã sau tạo bảng của tôi. Tôi chèn dữ liệu vào nó trông giống như mãVấn đề với truy vấn SQL Android ở đâu khoản

_id  date  recordName  total 
-------------------------------------- 
7  2011  TestMaxRecord  5 

Java này:

public static final String KEY_ROWID = "_id"; 
public static final String KEY_DATE = "date"; 
public static final String KEY_TOTAL = "total"; 
public static final String KEY_RECORD_NAME = "recordName"; 

private static final String DATABASE_CREATE_RECORDS = "create table " + DATABASE_TABLE_RECORDS + " (" 
+ KEY_ROWID + " integer primary key autoincrement, " 
+ KEY_DATE + " text not null, " 
+ KEY_RECORD_NAME + " text not null, " 
+ KEY_TOTAL + " text not null);"; 

public Cursor getRecord(String name) throws SQLException { 
    return mDb.query(true, DATABASE_TABLE_RECORDS, new String[] {KEY_ROWID, KEY_DATE, KEY_RECORD_NAME, KEY_TOTAL}, KEY_RECORD_NAME + " = " + name, null, null, null, null, null); 
} 

Nó ném một ngoại lệ mỗi khi nơi name = "TestMaxRecord" (mặc dù có dữ liệu trong đó) với các lỗi sau

android.database.sqlite.SQLiteException: không có cột như: TestMaxRecord:, khi biên dịch: SELECT DISTINCT _id, ngày, recordName, tổng TỪ ghi ĐÂU recordName = TestMaxRecord

Hình như tôi đang tìm tiêu đề cột TestMaxRecord. Tôi là một newbie android nhưng sao chép phần này khá nhiều chính xác từ một ví dụ (nó đã được sử dụng int mặc dù). Có sự khác biệt nào giữa việc sử dụng int và Strings trên truy vấn của bạn không?

Trả lời

11

Bạn cần đặt dấu nháy đơn xung quanh giá trị, nếu không nó sẽ coi nó là cột.

KEY_RECORD_NAME + " = '" + name + "'" 

Lưu ý: Giải pháp này là mở to SQL Injection, bạn nên sử dụng placeholders tham số, và vượt qua các giá trị thông qua selectionArgs luận:

public Cursor getRecord(String name) throws SQLException { 
    return mDb.query(true, 
    DATABASE_TABLE_RECORDS, 
    new String[] {KEY_ROWID, KEY_DATE, KEY_RECORD_NAME, KEY_TOTAL}, 
    KEY_RECORD_NAME + " = ?", 
    new String[] {name}, 
    null, null, null, null); 
} 

Ngoài ra, nhìn vào SQLiteQueryBuilder

+0

Ừ mà làm việc , cảm ơn. Có phải vì nó là một chuỗi? Tôi đã xem xét các tài nguyên trong liên kết của bạn trước đây và nó không giúp đỡ với các mệnh đề WHERE. Ít chuỗi hơn trong mệnh đề WHERE ... ít nhất là tôi đã từng tìm thấy. – easycheese

Các vấn đề liên quan