2016-05-12 62 views
0

我正在使用「SELECT docid as _id(blabla)」來搜索關鍵字.. 使用第一個DBAdapter,我可以搜索關鍵字我鍵入..但第二個不能.. 爲什麼?android-difference docid在這個Java文件(SELECT docid as _id)

將對DBAdapter(docID的作品)

package inklinked.tessearchtambahfitur; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DBAdapter { 

public static final String KEY_ROWID = "rowid"; 
public static final String KEY_CUSTOMER = "customer"; 
public static final String KEY_NAME = "name"; 
public static final String KEY_ADDRESS = "address"; 
public static final String KEY_ADDRESS1 = "address1"; 
public static final String KEY_ADDRESS2 = "address2"; 
public static final String KEY_CITY = "city"; 
public static final String KEY_STATE = "state"; 
public static final String KEY_ZIP = "zipCode"; 
public static final String KEY_SEARCH = "searchData"; 

private static final String TAG = "CusomersDBAdapter"; 
private DatabaseHelper mDbHelper; 
private SQLiteDatabase mDb; 

private static final String DATABASE_NAME = "CustomerData"; 
private static final String FTS_VIRTUAL_TABLE = "CustomerInfo"; 
private static final int DATABASE_VERSION = 1; 

//Create a FTS3 Virtual Table for fast searches 
private static final String DATABASE_CREATE = 
     "CREATE VIRTUAL TABLE " + FTS_VIRTUAL_TABLE + " USING fts3(" + 
      KEY_NAME + "," + 
       " UNIQUE (" + KEY_NAME + "));"; 


private final Context mCtx; 

private static class DatabaseHelper extends SQLiteOpenHelper { 

    DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 


    @Override 
    public void onCreate(SQLiteDatabase db) { 
     Log.w(TAG, DATABASE_CREATE); 
     db.execSQL(DATABASE_CREATE); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
       + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS " + FTS_VIRTUAL_TABLE); 
     onCreate(db); 
    } 
} 

public DBAdapter(Context ctx) { 
    this.mCtx = ctx; 
} 

public DBAdapter open() throws SQLException { 
    mDbHelper = new DatabaseHelper(mCtx); 
    mDb = mDbHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    if (mDbHelper != null) { 
     mDbHelper.close(); 
    } 
} 


public long createCustomer(String name) { 

    ContentValues initialValues = new ContentValues(); 
    String searchValue = name ; 
    initialValues.put(KEY_NAME, name); 
    //initialValues.put(KEY_SEARCH, searchValue); 

    return mDb.insert(FTS_VIRTUAL_TABLE, null, initialValues); 
} 


public Cursor searchCustomer(String inputText) throws SQLException { 
    Log.w(TAG, inputText); 
    String query = "SELECT docid as _id," + 
      KEY_NAME + 
      " from " + FTS_VIRTUAL_TABLE + 
      " where " + KEY_NAME + " MATCH '" + inputText + "';"; 
    Log.w(TAG, query); 
    Cursor mCursor = mDb.rawQuery(query,null); 

    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor; 

} 


public boolean deleteAllCustomers() { 

    int doneDelete = 0; 
    doneDelete = mDb.delete(FTS_VIRTUAL_TABLE, null , null); 
    Log.w(TAG, Integer.toString(doneDelete)); 
    return doneDelete > 0; 

    } 

} 

將對DBAdapter(文檔ID失敗)* I已經變成SELECT _id,(布拉布拉),沒有錯誤,並連接到我的MainDIY(搜索活動),但它不能顯示搜索結果

package inklinked.tessearchtambahfitur; 

    import android.content.ContentValues; 
    import android.content.Context; 
    import android.database.Cursor; 
    import android.database.SQLException; 
    import android.database.sqlite.SQLiteDatabase; 
    import android.database.sqlite.SQLiteOpenHelper; 
    import android.util.Log; 

    import java.util.ArrayList; 
    import java.util.List; 

import timber.log.Timber; 

public class DBAdapter 
{ 
    private static final String DB_NAME  = "contact_db"; 
    private static final int DB_VER  = 1; 

    public static final String FTS_VIRTUAL_TABLE = "contact"; 
    public static final String COL_ID  = "_id"; 
    public static final String COL_NAME = "name"; 
    public static final String COL_SEARCH = "searchData"; 
    public static final String COL_TELP = "telp"; 

    private static final String TAG   = "ContactDBAdapter"; 
    private DatabaseHelper  dbHelper; 
    private SQLiteDatabase db; 

    private static final String DB_CREATE = "CREATE VIRTUAL TABLE " + FTS_VIRTUAL_TABLE + " USING fts3(" + 
      COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_NAME + "TEXT NOT NULL," + 
      " UNIQUE (" + COL_NAME + "));"; 

    private final Context context; 

    private static class DatabaseHelper extends SQLiteOpenHelper 
    { 

     public DatabaseHelper(Context context) 
     { 
      // TODO Auto-generated constructor stub 
      super(context, DB_NAME, null, DB_VER); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) 
     { 
      // TODO Auto-generated method stub 
      db.execSQL(DB_CREATE); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
     { 
      // TODO Auto-generated method stub 
      Log.d(TAG, "upgrade DB"); 
      db.execSQL("DROP TABLE IF EXISTS " + FTS_VIRTUAL_TABLE); 
      onCreate(db); 

     } 

    } 

    public DBAdapter(Context context) 
    { 
     this.context = context; 
     // TODO Auto-generated constructor stub 
    } 

    public DBAdapter open() throws SQLException 
    { 
     dbHelper = new DatabaseHelper(context); 
     db = dbHelper.getWritableDatabase(); 
     return this; 
    } 

    public void close() 
    { 
     if (dbHelper != null) { 
      dbHelper.close(); 
     } 
    } 

    public void createContact(DataDIY contact) 
    { 
     ContentValues val = new ContentValues(); 
     //String searchValue = name; 
     val.put(COL_NAME, contact.getName()); 
     //val.put(COL_TELP, contact.getTelp()); 
     db.insert(FTS_VIRTUAL_TABLE, null, val); 
    } 

    public boolean deleteContact(int id) 
    { 
     return db.delete(FTS_VIRTUAL_TABLE, COL_ID + "=" + id, null) > 0; 
    } 

    public Cursor getAllContact() 
    { 
     return db.query(FTS_VIRTUAL_TABLE, new String[] 
       { 
         COL_ID, COL_NAME 
       }, null, null, null, null, null); 
    } 

    public Cursor getSingleContact(int id) 
    { 
     Cursor cursor = db.query(FTS_VIRTUAL_TABLE, new String[] 
       { 
         COL_ID, COL_NAME 
       }, COL_ID + "=" + id, null, null, null, null); 

     if (cursor != null) 
      cursor.moveToFirst(); 

     return cursor; 
    } 

    public boolean updateContact(DataDIY contact) 
    { 
     ContentValues val = new ContentValues(); 
     val.put(COL_NAME, contact.getName()); 
     //val.put(COL_TELP, contact.getTelp()); 

     return db.update(FTS_VIRTUAL_TABLE, val, COL_ID + "=" + contact.getId(), null) > 0; 
    } 

    public Cursor searchByInputText(String inputText) throws SQLException { 

     Log.w(TAG, inputText); 
     String query = "SELECT docid as _id," + 
       COL_NAME + 
       " from " + FTS_VIRTUAL_TABLE + 
       " where " + COL_NAME + " LIKE '%" + inputText + "%'"; 
     Log.w(TAG, query); 
     Cursor mCursor = db.rawQuery(query,null); 

     if (mCursor != null) { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 


    } 

} 

我MainDIY.java

import android.app.Activity; 
import android.app.SearchManager; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.content.Intent; 
import android.database.Cursor; 
import android.support.design.widget.FloatingActionButton; 
import android.support.v4.widget.SimpleCursorAdapter; 
import android.support.v7.app.ActionBarActivity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.support.v7.widget.SearchView; 
//search 


import timber.log.Timber; 


public class MainDIY extends ActionBarActivity implements OnItemClickListener, SearchView.OnQueryTextListener, SearchView.OnCloseListener 
{ 
    public static final String KEY_ID  = "_id"; 

    private static final int INSERT_ID = Menu.FIRST; 

    private DBAdapter   db; 

    ImageView btnCari,btnAdd; 
    FloatingActionButton fab; 

    private static final String TAG = "DIY"; 

    ListView listview; 
    //private ArrayList<String> arraylist=new ArrayList<String>(); 
    private SQLiteDatabase MYdatabase; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_diy); 
     Timber.d("line 37, content activity_diy"); 
     db = new DBAdapter(this); 
     db.open(); 

     listview = (ListView) findViewById(R.id.list); 

     listview.setEmptyView(findViewById(R.id.empty)); 

/* 
     db.createCustomer("PIZZA1"); 
     db.createCustomer("PIZZA2"); 
     db.createCustomer("PIZZA3"); 

*/ 

     // float button 
     fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MainDIY.this, AddDIY.class); 
       startActivity(intent); 
      } 
     }); 


     listview.setOnItemClickListener(this); 

    } 

    // menampilkan apa yang dicari dan ada di database 
    private void hasilPencarian(String query) { 
     /** menampilkan apa yang dicari dan ada di database */ 

     Cursor cursor = db.searchByInputText((query != null ? query.toString() : "@@@@")); 

     if (cursor == null) { 
      // 
     } else { 
      // Specify the columns we want to display in the result 
      String[] from = new String[] { 

        DBAdapter.COL_NAME}; 
      // Specify the Corresponding layout elements where we want the columns to go 
      int[] to = new int[] { 
        R.id.search_text_view}; Log.d("MainDIY","r.id.searchtextview"); 


      // Create a simple cursor adapter for the definitions and apply them to the ListView 
      android.widget.SimpleCursorAdapter customers = new android.widget.SimpleCursorAdapter(this,R.layout.search_item, cursor, from, to); 
      Log.d("MainDIY",query); 
      listview.setAdapter(customers); 
     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     // Inflate menu to add items to action bar if it is present. 
     inflater.inflate(R.menu.menu_main, menu); 
     // Associate searchable configuration with the SearchView 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 

     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(false); 

     SearchView.OnQueryTextListener textChangeListener = new SearchView.OnQueryTextListener() { 
      @Override 

      public boolean onQueryTextChange(String newText) { 

      if (!newText.isEmpty()){ 
      hasilPencarian(newText + "*"); 
      Timber.i("text berubah "+newText.toString()); 
      } else { 

       Timber.i("searchview kosong"); 
      } 
       return false; 
      } 

      public boolean onQueryTextSubmit(String query) { 
       hasilPencarian(query + "*"); 
       return false; 
      } 

     }; 
     searchView.setOnQueryTextListener(textChangeListener); 

     return super.onCreateOptionsMenu(menu); 
    } 






    @Override 
    public void onItemClick(AdapterView<?> arg0, View v, int pos, long id) 
    { 
     // TODO Auto-generated method stub 
     Bundle bundle = new Bundle(); 
     bundle.putLong(KEY_ID, id); 
     Intent intent = new Intent(MainDIY.this, EditDIY.class); 
     intent.putExtras(bundle); 
     db.close(); 
     startActivity(intent); 

    } 

    @Override 
    public boolean onClose() { 
     Timber.d("onclose"); 
     hasilPencarian(""); 
     return false; 

    } 


    public boolean onQueryTextChange(String newText) { 
     hasilPencarian(newText + "*"); 
     return false; 
    } 

    public boolean onQueryTextSubmit(String query) { 
     hasilPencarian(query + "*"); 
     return false; 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 

     if (db != null) { 
      db.close(); 
     } 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     handleIntent(intent); 
    } 

    private void handleIntent(Intent intent) { 

     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 
      //use the query to search 
     } 
    } 


} 

回答

0

它可以顯示..其工作 對於你的新手想學習CRUD並搜索SQLite本地數據庫,看一下my github