2012-05-19 45 views
1

这里是源代码 - 当我尝试添加+“按姓排序”时出现错误 有没有想法? (绝对是一个新手) 我有/ /在我的尝试55线下来。 我试图得到的结果通过姓氏如何获得java数据库sql有'按姓氏排序'?

package com.tritech.colony; 

import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.EditText; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 

public class SearchPersonByColonyActivity extends Activity implements OnItemClickListener 
{ 
    private EditText searchPersonByColonyEditText ; 
    private SQLiteDatabase db ; 
    private Cursor cursor ; 
    private ListAdapter adapter ; 
    private ListView personByColonyListView ; 
    private DatabaseHelper databaseHelper ; 
    private String colonyName ; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.searchpersonbycolony); 
     this.colonyName =  this.getIntent().getStringExtra(DatabaseHelper.KEY_COLONY_NAME); 
     this.databaseHelper = new DatabaseHelper(this); 
     this.databaseHelper.createDatabase(); 
     try { 
      this.databaseHelper.openDatabase(); 
     } catch(SQLException ex) { 
      Log.e(DatabaseHelper.TAG, "Database can not be opened", ex); 
     } 
     this.databaseHelper.close(); 
     this.db = this.databaseHelper.getReadableDatabase() ; 
     this.searchPersonByColonyEditText =   (EditText)this.findViewById(R.id.searchPersonByColonyEditText); 
     this.personByColonyListView = (ListView)this.findViewById(R.id.searchPersonByColonyList); 
     this.personByColonyListView.setOnItemClickListener(this); 
     this.cursor = this.db.rawQuery("SELECT _id as _id , " + 
       DatabaseHelper.KEY_LAST_NAME + " , " + 
       DatabaseHelper.KEY_FIRST_NAME + " , " + 
       "\"" + DatabaseHelper.KEY_SR_JR + "\" " + 
       "FROM " + DatabaseHelper.TABLE_NAME + 
       " WHERE " + DatabaseHelper.KEY_COLONY_NAME + " LIKE ?", 
       new String[] { this.colonyName }); 
// tried these for line above and they fails 
// new String[] { this.colonyName } + " ORDER BY " + DatabaseHelper.KEY_LAST_NAME); 
// new String[] { this.colonyName } + " ORDER BY lastname"); 

     this.startManagingCursor(this.cursor); 
     this.adapter = new SimpleCursorAdapter(this, 
       R.layout.searchpersonbycolonyrow , 
       this.cursor , 
       new String[] { DatabaseHelper.KEY_LAST_NAME ,  DatabaseHelper.KEY_FIRST_NAME , DatabaseHelper.KEY_SR_JR }, 
       new int[] { R.id.searchPersonByColonyLastnameTextView ,   R.id.searchPersonByColonyFirstnameTextView , R.id.searchPersonByColonySrJrTextView }); 
     this.personByColonyListView.setAdapter(this.adapter); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     boolean back_tag = this.getSharedPreferences(MainActivity.TAG, MODE_PRIVATE).getBoolean(MainActivity.BACK_TAG, false); 
     if(back_tag) { 
      this.finish(); 
     } 
    } 

    public void searchPerson(View v) { 
     String text = this.searchPersonByColonyEditText.getText().toString(); 
     if(!text.equals("")) { 
      this.cursor = this.db.rawQuery("SELECT _id as _id , " + 
       DatabaseHelper.KEY_LAST_NAME + " , " + 
        DatabaseHelper.KEY_FIRST_NAME + " , " + 
        "\"" + DatabaseHelper.KEY_SR_JR + "\" " + 
        "FROM " + DatabaseHelper.TABLE_NAME + 
        " WHERE " + DatabaseHelper.KEY_COLONY_NAME + " LIKE ?" + 
        " AND " + DatabaseHelper.KEY_LAST_NAME + " LIKE ?" , 
        new String[] { this.colonyName , "%"+text+"%" }); 
     } else { 
      this.cursor = this.db.rawQuery("SELECT _id as _id , " + DatabaseHelper.KEY_LAST_NAME + " , " + DatabaseHelper.KEY_FIRST_NAME + " FROM " +  DatabaseHelper.TABLE_NAME + " WHERE " + DatabaseHelper.KEY_COLONY_NAME + " LIKE ?", new String[] { this.colonyName }); 
      this.cursor = this.db.rawQuery("SELECT _id as _id , " + 
        DatabaseHelper.KEY_LAST_NAME + " , " + 
        DatabaseHelper.KEY_FIRST_NAME + " , " + 
        "\"" + DatabaseHelper.KEY_SR_JR + "\" " + 
        "FROM " + DatabaseHelper.TABLE_NAME + 
        " WHERE " + DatabaseHelper.KEY_COLONY_NAME + " LIKE ?", 
        new String[] { this.colonyName }); 
     } 
     this.startManagingCursor(this.cursor); 
     this.adapter = new SimpleCursorAdapter(this, 
       R.layout.searchpersonbycolonyrow , 
       this.cursor , 
       new String[] { DatabaseHelper.KEY_LAST_NAME ,  DatabaseHelper.KEY_FIRST_NAME , DatabaseHelper.KEY_SR_JR }, 
       new int[] { R.id.searchPersonByColonyLastnameTextView ,  R.id.searchPersonByColonyFirstnameTextView , R.id.searchPersonByColonySrJrTextView }); 
     this.personByColonyListView.setAdapter(this.adapter); 
    } 

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Intent intent = new Intent(this , PersonDetailsActivity.class); 
     Cursor cursor = (Cursor)this.adapter.getItem(position); 
     intent.putExtra(DatabaseHelper.KEY_ID, cursor.getInt( cursor.getColumnIndex(DatabaseHelper.KEY_ID))); 
     this.startActivity(intent); 
    } 

    protected void onDestroy() { 
     this.cursor.close(); 
     this.databaseHelper.close(); 
    super.onDestroy(); 
    } 
} 

回答

1

rawQuery()看起来像它有两个参数:sql语句,并且字符串数组,将SQL语句替换的?如果这是正确的,我想你想要的是:

 this.cursor = this.db.rawQuery("SELECT _id as _id , " + 
      DatabaseHelper.KEY_LAST_NAME + " , " + 
      DatabaseHelper.KEY_FIRST_NAME + " , " + 
      "\"" + DatabaseHelper.KEY_SR_JR + "\" " + 
      "FROM " + DatabaseHelper.TABLE_NAME + 
      " WHERE " + DatabaseHelper.KEY_COLONY_NAME + " LIKE ? ORDER BY " 
      + DatabaseHelper.KEY_LAST_NAME, 
      new String[] { this.colonyName }); 
0

进行排序,我认为你缺少的顺序按前WHERE子句。

为如:

  SELECT * FROM items 
     WHERE item LIKE 'B%' 
     ORDER BY cost;