如何从sqlite中的列中选择某个值

时间:2017-07-10 09:52:09

标签: java android database sqlite android-sqlite

我有一个ListView,其中的地点名称显示在SQLite数据库中。数据库有5列:_idMap_noLocationDateNotes

当我点击ListView中的某个项目时,我希望能够从数据库中获取Map_noLocationDateNotes并将它们作为附加内容存储在意图中,以便我能够将它们传递给下一个活动。我曾尝试编写自己的名为getLocation的查询来返回该位置,并查找了有关该主题的不同教程并搜索 SO 以获取答案,但无济于事。

MainActivity.java

package com.********************.******.***************;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.Button;
import android.content.Intent;
import android.view.View;
import android.widget.ListView;



public class MainActivity extends Activity {
    private static final String TAG = "MainActivity";
    DBHelper dbHelper;
    SimpleCursorAdapter simpleCursorAdapter;
    private String map;
    private String location;
    private String date;
    private String note;

    public MainActivity() {
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        requestWindowFeature(Window.FEATURE_ACTION_BAR);
        setContentView(R.layout.activity_main);
        dbHelper = new DBHelper(this);
        displayList();
    }

    public void displayList() {
        final Cursor cursor = dbHelper.getData();
        String from[] = new String[]{dbHelper.LOCATION};
        int to[] = new int[]{R.id.ListLayout1};
        simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.row_item, cursor, from, to, 0);


        final ListView listView = (ListView) findViewById(R.id.list);
        listView.setAdapter(simpleCursorAdapter);
        while (cursor.moveToNext());
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                String location = dbHelper.getLocation(l).toString();
                Intent intent = new Intent(MainActivity.this, EditData.class);
                intent.putExtra("Location", location);
                intent.putExtra("Date", DBHelper.DATE);
                intent.putExtra("Not_at_homes", DBHelper.NOTATHOMES);
                startActivity(intent);
            }
        });
    }

    public void toInput(View view) {
        Button addbutton = (Button) findViewById(R.id.addButton);
        Intent intent = new Intent(MainActivity.this, InputPage.class);
        startActivity(intent);

    }
}

DBhelper.java

package com.******************.*****.****************;

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



public class DBHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "App_database.db";
    public static final String TABLE_NAME = "App_data_table";
    public static final String MAP_NO = "Map_no";
    public static final String LOCATION = "Location";
    public static final String DATE = "Date";
    public static final String NOTES = "Notes";
    public static final String _id = "_id";
    public static final String TAG = "DBHelper";
    private static DBHelper instance = null;


    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
       String createTable = "CREATE TABLE " + TABLE_NAME + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, " + MAP_NO + " INTEGER, " + LOCATION + " TEXT, " + DATE + " INTEGER, " + Notes + " TEXT)";
        db.execSQL(createTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);

    }

    public boolean insertData(String Map_no, String Location, String Date, String Not_at_homes) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(MAP_NO, Map_no);
        contentValues.put(LOCATION, Location);
        contentValues.put(DATE, Date);
        contentValues.put(NOTES, Notes);

        Log.d(TAG, "addData: Adding " + Location + " to " + TABLE_NAME);

        long result = db.insert(TABLE_NAME, null, contentValues);
        if (result == -1) {
            return false;
        } else {
            return true;
        }


    }
//getting data
    public Cursor getData() {
        SQLiteDatabase db = this.getReadableDatabase();
        String query = "SELECT * FROM " + TABLE_NAME;
        Cursor data = db.rawQuery(query, null);
        return data;
    }

    public Cursor getItemID(String map, String location, String date, String notes) {
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "SELECT _id FROM " + TABLE_NAME +
                " WHERE " + MAP_NO + " = '" + map + "'" + " AND " + LOCATION + " = '" + location + "'" +
                " AND " + DATE + " = '" + date + "'" + " AND "
                + NOTES + " = '" + Notes+ "'";
        Cursor data = db.rawQuery(query, null);
        return data;
    }

    public void updateData(int id,String newMapNo, String oldMapNo, String newLocation, String oldLocation, String newDate, String oldDate, String newNotes, String oldNotes){
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "UPDATE " + TABLE_NAME + " SET " + MAP_NO +
                " = '" + newMapNo + " WHERE " + _id + " = '" + id + "'" +
                " AND " + MAP_NO + " = '" + oldMapNo + "'"+ LOCATION +
                " = '" + newLocation + " WHERE " + _id + " = '" + id + "'" +
                " AND " + LOCATION + " = '" + oldLocation + "'"+ DATE +
                " = '" + newDate + " WHERE " + _id + " = '" + id + "'" +
                " AND " + DATE + " = '" + oldDate + "'"+ NOTES+
                " = '" + newNotes + " WHERE " + _id + " = '" + id + "'" +
                " AND " + NOTES + " = '" + oldNotes + "'";
        Log.d(TAG, "updating: query: " + query);
        Log.d(TAG, "updating: Setting map number, Location, Date and Not at homes to new values: Map number: " +
                newMapNo + " Location: " + newLocation + " Date: " +
                newDate + " Notes: " + newNotes);
        db.execSQL(query);
    }

    public void deleteData(int id, String mapNo, String location, String date, String Notes){
        SQLiteDatabase database = this.getWritableDatabase();
        String query = "DELETE FROM " + TABLE_NAME + " WHERE "
                + _id + " = '" + id + "'" + " AND " + MAP_NO + " = '" + mapNo + "'" +
                LOCATION + " = '" + location + "'" + DATE + " = '" + date + "'" + NOTES +
                " = '" + Notes + "'";
        Log.d(TAG, "deleting: query: " + query);
        Log.d(TAG, "deleting: Deleting note with values: Map number: " + mapNo + " Location: " + location + " Created on: " + date + " With notes: " + Notes + ".");
        database.execSQL(query);
    }

    public static DBHelper getInstance(Context context){
        if (instance == null){
            instance = new DBHelper(context.getApplicationContext());
        }

        return instance;
    }

    public Cursor getLocation(long id){
        SQLiteDatabase db = this.getWritableDatabase();
            String query = "SELECT " + LOCATION + " FROM " + TABLE_NAME + " WHERE " + _id + " = '" + id + "'";
            Cursor rowDataLocation = db.rawQuery(query, null);
            return rowDataLocation;
    }

}

3 个答案:

答案 0 :(得分:1)

您可以尝试使用

// =======================================================
var idTrnf = charIDToTypeID( "Trnf" );
var desc2 = new ActionDescriptor();
var idFTcs = charIDToTypeID( "FTcs" );
var idQCSt = charIDToTypeID( "QCSt" );
var idQcsa = charIDToTypeID( "Qcsa" );
desc2.putEnumerated( idFTcs, idQCSt, idQcsa );

var idOfst = charIDToTypeID( "Ofst" );
var desc3 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idPxl = charIDToTypeID( "#Pxl" );
desc3.putUnitDouble( idHrzn, idPxl, 0.000000 );
var idVrtc = charIDToTypeID( "Vrtc" );
var idPxl = charIDToTypeID( "#Pxl" );
desc3.putUnitDouble( idVrtc, idPxl, 0.013677 );

var idOfst = charIDToTypeID( "Ofst" );
desc2.putObject( idOfst, idOfst, desc3 );
var idWdth = charIDToTypeID( "Wdth" );
var idPrc = charIDToTypeID( "#Prc" );
desc2.putUnitDouble( idWdth, idPrc, 86.486860 );
var idHght = charIDToTypeID( "Hght" );
var idPrc = charIDToTypeID( "#Prc" );
desc2.putUnitDouble( idHght, idPrc, -88.215838 );

var idSkew = charIDToTypeID( "Skew" );
var desc4 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idAng = charIDToTypeID( "#Ang" );
desc4.putUnitDouble( idHrzn, idAng, 0.033079 );
var idVrtc = charIDToTypeID( "Vrtc" );
var idAng = charIDToTypeID( "#Ang" );
desc4.putUnitDouble( idVrtc, idAng, 0.000000 );

var idPnt = charIDToTypeID( "Pnt " );
desc2.putObject( idSkew, idPnt, desc4 );
var idAngl = charIDToTypeID( "Angl" );
var idAng = charIDToTypeID( "#Ang" );
desc2.putUnitDouble( idAngl, idAng, -170.957285 );
executeAction( idTrnf, desc2, DialogModes.NO );

<强> FYI

  

String location = dbHelper.getLocation(l).toString();

您应该在 public String getLocation(long id) { SQLiteDatabase db = this.getWritableDatabase(); String get_LOCATION = ""; String last_query = "SELECT " + LOCATION + " FROM " + TABLE_NAME + " WHERE " + _id + " = '" + id + "'"; Cursor c = db.rawQuery(last_query, null); if (c != null && c.moveToFirst()) { get_LOCATION = c.getString(0); // Return Value } db.close(); return get_LOCATION; } 部分中传递正确的 PARAMETER 。确保 getLocation() 包含正确的 ID

答案 1 :(得分:0)

  

使用此

更改ListView OnitemClick方法代码
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            if(cursor.getCount()>0){
                cursor.moveToPosition(i);
                Intent intent = new Intent(MainActivity.this, EditData.class);
                intent.putExtra("Location", cursor.getString(cursor.getColumnIndex(DBHelper.LOCATION))));
                intent.putExtra("Date", cursor.getString(cursor.getColumnIndex(DBHelper.DATE))));
                intent.putExtra("Not_at_homes", cursor.getString(cursor.getColumnIndex(DBHelper.NOTES))));
                startActivity(intent);
            }

        }
    });

答案 2 :(得分:0)

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        Cursor cursor = dbHelper.getLocation(l);
        if(cursor.getCount()>0){
            cursor.moveToPosition(i);
            Intent intent = new Intent(MainActivity.this, EditData.class);
            intent.putExtra("Location", cursor.getString(cursor.getColumnIndex(DBHelper.LOCATION))));
            intent.putExtra("Date", cursor.getString(cursor.getColumnIndex(DBHelper.DATE))));
            intent.putExtra("Not_at_homes", cursor.getString(cursor.getColumnIndex(DBHelper.NOTES))));
            startActivity(intent);
        }

    }
});
  

在OnItemClick内部,当您单击特定项目时,将获取id并将其传递给方法getLocation以将数据作为游标返回。之后,您可以使用Cursor中的结果创建意图,然后开始您的活动。

您可能必须将对象dbHelper保留为最终,以便可以在onClickItem方法中访问它