这是源代码 - 当我尝试添加+“按姓氏排序”时出现错误 有任何想法吗? (绝对是新手) 我在我的尝试面前大约有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();
}
}
答案 0 :(得分: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 } );
答案 1 :(得分:0)
我认为您在Order By之前缺少WHERE子句。
例如:
SELECT * FROM items
WHERE item LIKE 'B%'
ORDER BY cost;