1

这是源代码 - 当我尝试添加 +“按姓氏排序”时出现错误有什么想法吗?(绝对是新手)我有 // 在我的尝试前面大约 55 行。我试图让结果按姓氏排序

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();
    }
}
4

2 回答 2

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 } );
于 2012-05-19T02:43:47.780 回答
0

我认为您在 Order By 之前缺少 WHERE 子句。

例如:

         SELECT * FROM items
         WHERE item LIKE 'B%'
         ORDER BY cost;
于 2012-05-19T02:43:43.320 回答