2012-04-17 51 views
0

夥計們我一直在研究這段代碼很長一段時間,但我無能爲力。它已經返回錯誤,雖然列存在,順便說一句。我在sqlitebrowser中創建了我的數據庫。沒有這樣的列錯誤,儘管列存在

下面是返回錯誤的方法:

Cursor getWordMatches(String query) { 
    myDataBase = khol(); 
    Cursor cur = myDataBase.rawQuery("SELECT " + colid + "," +col2+" ," 
      + col3 + " from " + deptTable + " WHERE " + col2 + " LIKE '" 
      + query + "%'", new String[] {}); 


    myDataBase.close(); 
    return cur; 
} 

其中CUR = 「列2」 和我打電話SuggestionProvider類此功能

SuggestionProvider類

public class SuggestionProvider extends ContentProvider { 
String TAG = "SuggestionProvider"; 

public static String AUTHORITY = "example.search.custom.SuggestionProvider"; 
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY 
     + "/Curedata"); 

// MIME types used for searching words or looking up a single definition 
public static final String DISEASE_MIME_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE 
     + "/vnd.example.search.custom.Curedata"; 
public static final String DESCRIPTION_MIME_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE 
     + "/vnd.example.search.custom.Curedata"; 

private DatabaseHelper2 mHelper; 

// UriMatcher stuff 
private static final int SEARCH_DISEASE = 0; 
private static final int GET_DISEASE = 1; 
private static final int SEARCH_SUGGEST = 2; 
private static final UriMatcher sURIMatcher = buildUriMatcher(); 

@Override 
public int delete(Uri uri, String selection, String[] selectionArgs) { 
    // TODO Auto-generated method stub 
    throw new UnsupportedOperationException(); 

} 

private static UriMatcher buildUriMatcher() { 
    // TODO Auto-generated method stub 
    UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); 
    // to get definitions... 
    matcher.addURI(AUTHORITY, "Curedata", SEARCH_DISEASE); 
    matcher.addURI(AUTHORITY, "Curedata/#", GET_DISEASE); 
    // to get suggestions... 
    matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, 
      SEARCH_SUGGEST); 
    matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", 
      SEARCH_SUGGEST); 

    return matcher; 
} 

@Override 
public String getType(Uri uri) { 
    // TODO Auto-generated method stub 
    switch (sURIMatcher.match(uri)) { 
    case SEARCH_DISEASE: 
     return DISEASE_MIME_TYPE; 
    case GET_DISEASE: 
     return DESCRIPTION_MIME_TYPE; 
    case SEARCH_SUGGEST: 
     return SearchManager.SUGGEST_MIME_TYPE; 

    default: 
     throw new IllegalArgumentException("Unknown URL " + uri); 
    } 
} 

@Override 
public Uri insert(Uri uri, ContentValues values) { 
    // TODO Auto-generated method stub 
    throw new UnsupportedOperationException(); 
} 

@Override 
public boolean onCreate() { 
    mHelper = new DatabaseHelper2(getContext()); 
    return true; 
} 

@Override 
public Cursor query(Uri uri, String[] projection, String selection, 
     String[] selectionArgs, String sortOrder) { 
    // TODO Auto-generated method stub 
    switch (sURIMatcher.match(uri)) { 
    case SEARCH_SUGGEST: 
     if (selectionArgs == null) { 
      throw new IllegalArgumentException(
        "selectionArgs must be provided for the Uri: " + uri); 
     } 

     return mHelper.getWordMatches(selectionArgs[0]); 
    case SEARCH_DISEASE: 
     if (selectionArgs == null) { 
      throw new IllegalArgumentException(
        "selectionArgs must be provided for the Uri: " + uri); 
     } 
     return mHelper.getWordMatches(selectionArgs[0]); 

    case GET_DISEASE: 
     return getWord(uri); 

    default: 
     throw new IllegalArgumentException("Unknown Uri: " + uri); 
    } 
} 


private Cursor getWord(Uri uri) { 
    // TODO Auto-generated method stub 
    String disease = uri.getLastPathSegment(); 
    mHelper.getstring(disease); 
    return mHelper.getdisease(); 

} 

@Override 
public int update(Uri uri, ContentValues values, String selection, 
     String[] selectionArgs) { 
    // TODO Auto-generated method stub 
    throw new UnsupportedOperationException(); 
} 

但logcat的是給出例外

android.database.sqlite.SQLiteException->no such column:column2 

幫我一把。我卡住了!

編輯:
的DATABSE創建代碼

public class DatabaseHelper2 extends SQLiteOpenHelper { 


private static String DB_PATH = "/data/data/example.SQLitetest/"; 

private static String DB_NAME = "desicures.db"; 

    private SQLiteDatabase myDataBase, mydb1; 

private final Context myContext; 

private String colname = "Area"; 

private String deptTable = "Curedata"; 

public static String col2 = "column2"; 

public static String col3 = "Description"; 


public static String colid = "_ID"; 
private String s; 
private String y = "Y"; 


public DatabaseHelper2(Context context) { 

    super(context, DB_NAME, null, 1); 
    this.myContext = context; 
} 



public SQLiteDatabase khol() throws SQLException { 

    // Open the database 
    String myPath = DB_PATH + DB_NAME; 
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, 
      SQLiteDatabase.OPEN_READWRITE); 
    return myDataBase; 
} 

@Override 
public synchronized void close() { 

    if (myDataBase != null) 
     myDataBase.close(); 

    super.close(); 

} 

ArrayList<String> getAllDiseases() { 
    ArrayList<String> list = new ArrayList<String>(); 

    myDataBase = khol(); 
    Cursor cur = myDataBase.rawQuery("SELECT " + col2 + " from " 
      + deptTable + " WHERE " + colname + "='head'", new String[] {}); 
    while (cur.moveToNext()) { 
     list.add(cur.getString(cur.getColumnIndexOrThrow(col2))); 

    } 
    cur.close(); 
    myDataBase.close(); 
    return list; 
} 

Cursor getWordMatches(String query) { 
    myDataBase = khol(); 
    Cursor cur = myDataBase.rawQuery("SELECT " + colid +","+col2+" ," 
      + col3 + " from " + deptTable + " WHERE " + col2 + " LIKE '" 
      + query + "%'", new String[] {}); 
    /*Cursor cur = myDataBase.rawQuery("SELECT " +"'"+ colid+"'" +","+"'"+col2+"'"+" ," 
      + "'"+col3+"'" + " from " + deptTable + " WHERE " + "'"+col2+"'" + " LIKE '" 
      + query + "%'", new String[] {});*/ 

    //myDataBase.close(); 
    return cur; 
} 

void getstring(String s) { 
    this.s = s; 
} 

Cursor getdisease() { 

    myDataBase = khol(); 
    Cursor cur = myDataBase.rawQuery("SELECT " + col3 + " from " 
      + deptTable + " WHERE " + colid + "='" + s + "'", 
      new String[] {}); 
    return cur; 
} 

String getdisease1() { 

    String list; 
    myDataBase = khol(); 
    Cursor cur = myDataBase.rawQuery("SELECT " + col3 + " from " 
      + deptTable + " WHERE " + colid + "='" + s + "'", 
      new String[] {}); 
    cur.moveToFirst(); 
    list = cur.getString(cur.getColumnIndexOrThrow(col3)); 
    return list; 
} 


@Override 
public void onCreate(SQLiteDatabase db) { 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

} 

} 

我已經嘗試了很多方法,我發現,這getWordMatches會引起一些問題。它不會返回任何東西,即使我按照答案中的建議在我的所有列上使用「'」。但是如果我沒有使用「'」,那麼它會給出「沒有這樣的列」的錯誤。
請幫忙。

+0

你能告訴你的數據庫創建的代碼? – 2012-04-17 18:38:39

+0

@ John-code added..help .. – user182022 2012-04-18 03:31:44

+0

解決..我做了一個非常愚蠢的錯誤..我寫錯了包名..sorry .. – user182022 2012-04-18 03:51:55

回答

0

不要關閉你的數據庫。刪除此行myDataBase.close();

除了什麼Habib.OSU說