简体   繁体   中英

How do I get the java db sql to have a 'Order by lastname'?

Here is the source -- I get errors when I try to add + " Order by lastname" Any ideas? (definitely a newbie) I have // in front of my attempt about 55 lines down. I am trying to get the results to be sorted by lastname

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

rawQuery() looks like it takes two arguments: the sql statement, and an array of strings that will replace the ?'s in the sql statement. If that's correct, I think what you want is:

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

I think you are missing the WHERE clause before the Order By.

for eg :

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM