Android 如何在 SQLite 数据库上使用游标

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11485041/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 07:47:54  来源:igfitidea点击:

How to use a cursor on a SQLite database

androiddatabasesqlite

提问by user1261404

I was following a tutorial to make a database cursor, but I have hit an issue; when I write the code below I get no option to add a query after the database's name:

我正在学习制作数据库游标的教程,但遇到了一个问题;当我编写下面的代码时,我无法选择在数据库名称后添加查询:

public String getData(){
    db.open();
    Cursor c = db.   ;
    return none;
}

dbis my database's name. I was wondering if anyone knows why it doesn't give me the option. When I type query it says hat is does not exist in DBAdapter. Do I have to add something to my DBAdapter class? And if so, what do I have to add?

db是我的数据库名称。我想知道是否有人知道为什么它不给我选择。当我输入查询时,它说 DBAdapter 中不存在 hat。我必须在 DBAdapter 类中添加一些东西吗?如果是这样,我需要添加什么?

This is my Activity Java:

这是我的活动 Java:

package com.course.ucas;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import android.database.sqlite.SQLiteDatabase; 

public class DatabaseActivity extends Activity {
/** Called when the activity is first created. */
DBAdapter db;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

DBAdapter db = new DBAdapter(this);
db.open();
long id;
id = db.insertTitle(
"UNIVERSITY OF ABERDEEN","Computer Science",310,84,0,"BBB","");
id = db.insertTitle(
"UNIVERSITY OF ABERTAY DUNDEE","Computer Science",300,0,70,"CCC","N/A");
id = db.insertTitle(
"ABERYSTWYTH UNIVERSITY","Computer Science",270,79,70,"BBC","N/A");
id = db.insertTitle(
"ANGLIA RUSKIN UNIVERSITY","Computer Science",220,69,50,"CCC","N/A");
id = db.insertTitle(
"ASTON UNIVERSITY","Computer Science",330,91,80,"BBB","N/A");
id = db.insertTitle(
"BANGOR UNIVERSITY","Computer Science",260,86,0,"CCC","N/A");
id = db.insertTitle(
"UNIVERSITY OF BATH","Computer Science",440,91,100,"AAA","A*AB");
id = db.insertTitle(
"UNIVERSITY OF BEDFORDSHIRE","Computer Science",120,74,50,"CCD","N/A");
id = db.insertTitle(
"UNIVERSITY OF BIRMINGHAM","Computer Science",400,76,90,"AAB","N/A");
id = db.insertTitle(
"BIRMINGHAM CITY UNIVERSITY","Computer Science",240,68,70,"BCC","N/A");
id = db.insertTitle(
"THE UNIVERSITY OF BOLTON","Computer Science",0,78,0,"CCC","N/A");
id = db.insertTitle(
"UNIVERSITY OF BRADFORD","Computer Science",180,72,50,"CCC","N/A");
id = db.insertTitle(
"UNIVERSITY OF BRIGHTON","Computer Science",270,80,69,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF BRISTOL","Computer Science",480,96,95,"AAA","N/A");
id = db.insertTitle(
"THE UNIVERSITY OF BUCKINGHAM","Computer Science",0,0,0,"BBC","N/A");
id = db.insertTitle(
"BUCKINGHAMSHIRE NEW UNIVERSITY","Computer Science",150,61,55,"CCD","N/A");
id = db.insertTitle(
"UNIVERSITY OF CAMBRIDGE","Computer Science",580,95,100,"A*AA","N/A");
id = db.insertTitle(
"CANTERBURY CHRIST CHURCH UNIVERSITY","Computer Science",170,81,45,"CCC","N/A");
id = db.insertTitle(
"CARDIFF UNIVERSITY","Computer Science",360,79,82,"ABB","N/A");
id = db.insertTitle(
"CARDIFF METROPOLITAN UNIVERSITY","Computer Science",200,93,55,"BBC","N/A");
id = db.insertTitle(
"UNIVERSITY OF CENTRAL LANCASHIRE","Computer Science",240,75,74,"CCC","BBC");
id = db.insertTitle(
"UNIVERSITY OF CHESTER","Computer Science",240,86,75,"CCC","N/A");
id = db.insertTitle(
"THE CITY UNIVERSITY","Computer Science",320,65,73,"AAA","N/A");
id = db.insertTitle(
"COVENTRY UNIVERSITY","Computer Science",230,67,65,"BBC","N/A");
id = db.insertTitle(
"THE UNIVERSITY OF CUMBRIA","Computer Science",0,0,0,"CCC","N/A");
id = db.insertTitle(
"DE MONTFORT UNIVERSITY","Computer Science",230,80,58,"AAA","N/A");
id = db.insertTitle(
"UNIVERSITY OF DERBY","Computer Science",260,73,70,"BBC","N/A");
id = db.insertTitle(
"UNIVERSITY OF DUNDEE","Computer Science",336,96,85,"BBB","N/A");
id = db.insertTitle(
"DURHAM UNIVERSITY","Computer Science",440,81,100,"AAA","N/A");
id = db.insertTitle(
"UNIVERSITY OF EAST ANGLIA","Computer Science",320,89,55,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF EAST LONDON","Computer Science",205,74,39,"CDD","N/A");
id = db.insertTitle(
"UNIVERSITY OF EDINBURGH","Computer Science",428,90,85,"AAA","ABB");
id = db.insertTitle(
"EDINBURGH NAPIER UNIVERSITY","Computer Science",260,83,58,"CCD","N/A");
id = db.insertTitle(
"UNIVERSITY OF ESSEX","Computer Science",315,84,75,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF EXETER","Computer Science",0,86,95,"ABB","N/A");
id = db.insertTitle(
"UNIVERSITY OF GLAMORGAN / PRIFYSGOL MORGANNWG","Computer Science",280,69,52,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF GLASGOW","Computer Science",384,98,90,"ABB","N/A");
id = db.insertTitle(
"GLASGOW CALEDONIAN UNIVERSITY","Computer Science",258,80,51,"CC","N/A");
id = db.insertTitle(
"UNIVERSITY OF GLOUCESTERSHIRE","Computer Science",220,73,71,"CCC","N/A");
id = db.insertTitle(
"GLYNDWR UNIVERSITY","Computer Science",200,75,70,"CCC","N/A");
id = db.insertTitle(
"GOLDSMITHS' COLLEGE","Computer Science",220,83,70,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF GREENWICH","Computer Science",180,89,54,"BBC","N/A");
id = db.insertTitle(
"HERIOT-WATT UNIVERSITY","Computer Science",288,77,90,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF HERTFORDSHIRE","Computer Science",180,80,62,"CDD","N/A");
id = db.insertTitle(
"UNIVERSITY OF THE HIGHLANDS AND ISLANDS","Computer Science",0,0,0,"D","N/A");
id = db.insertTitle(
"UNIVERSITY OF HUDDERSFIELD","Computer Science",240,63,84,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF HULL","Computer Science",240,83,95,"BBC","N/A");
id = db.insertTitle(
"IMPERIAL COLLEGE, LONDON","Computer Science",510,84,98,"AAA","N/A");
id = db.insertTitle(
"KEELE UNIVERSITY","Computer Science",260,74,0,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF KENT","Computer Science",310,80,90,"BBB","N/A");
id = db.insertTitle(
"KING'S COLLEGE LONDON","Computer Science",370,82,90,"AAB","N/A");
id = db.insertTitle(
"KINGSTON UNIVERSITY","Computer Science",200,73,68,"BBC","N/A");
id = db.insertTitle(
"LANCASTER UNIVERSITY","Computer Science",380,81,80,"ABB","N/A");
id = db.insertTitle(
"UNIVERSITY OF LEEDS","Computer Science",370,69,90,"AAA","N/A");
id = db.insertTitle(
"LEEDS METROPOLITAN UNIVERSITY","Computer Science",180,71,57,"BBC","N/A");
id = db.insertTitle(
"UNIVERSITY OF LEICESTER","Computer Science",330,92,80,"ABB","N/A");
id = db.insertTitle(
"UNIVERSITY OF LIVERPOOL","Computer Science",360,89,80,"AAB","ABB");
id = db.insertTitle(
"LIVERPOOL HOPE UNIVERSITY","Computer Science",280,78,40,"ABB","N/A");
id = db.insertTitle(
"UNIVERSITY COLLEGE LONDON","Computer Science",430,87,90,"A*AA","N/A");
id = db.insertTitle(
"LONDON METROPOLITAN UNIVERSITY","Computer Science",140,73,55,"ABB","N/A");
id = db.insertTitle(
"LOUGHBOROUGH UNIVERSITY","Computer Science",340,88,88,"ABB","N/A");
id = db.insertTitle(
"THE UNIVERSITY OF MANCHESTER","Computer Science",400,82,83,"AAB","N/A");
id = db.insertTitle(
"THE MANCHESTER METROPOLITAN UNIVERSITY","Computer Science",220,67,66,"CCC","N/A");
id = db.insertTitle(
"MIDDLESEX UNIVERSITY","Computer Science",140,73,50,"CDD","N/A");
id = db.insertTitle(
"NEWCASTLE UNIVERSITY","Computer Science",350,88,90,"ABB","N/A");
id = db.insertTitle(
"THE UNIVERSITY OF NORTHAMPTON","Computer Science",200,75,60,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF NORTHUMBRIA","Computer Science",240,80,77,"BBC","N/A");
id = db.insertTitle(
"UNIVERSITY OF NOTTINGHAM","Computer Science",360,82,90,"BBB","N/A");
id = db.insertTitle(
"NOTTINGHAM TRENT UNIVERSITY","Computer Science",260,69,68,"BBC","N/A");
id = db.insertTitle(
"OXFORD UNIVERSITY","Computer Science",520,0,90,"AAA","N/A");
id = db.insertTitle(
"OXFORD BROOKES UNIVERSITY","Computer Science",260,85,85,"BBC","N/A");
id = db.insertTitle(
"UNIVERSITY OF PLYMOUTH","Computer Science",260,76,75,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF PORTSMOUTH","Computer Science",240,81,72,"BBC","N/A");
id = db.insertTitle(
"QUEEN'S UNIVERSITY BELFAST","Computer Science",320,84,84,"BBB","N/A");
id = db.insertTitle(
"QUEEN MARY, UNIVERSITY OF LONDON","Computer Science",300,88,65,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF READING","Computer Science",350,79,95,"ABB","N/A");
id = db.insertTitle(
"THE ROBERT GORDON UNIVERSITY","Computer Science",240,79,80,"CCC","N/A");
id = db.insertTitle(
"ROYAL HOLLOWAY, UNIVERSITY OF LONDON","Computer Science",320,82,0,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF SALFORD","Computer Science",240,89,75,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF SHEFFIELD","Computer Science",390,83,95,"ABB","N/A");
id = db.insertTitle(
"SHEFFIELD HALLAM UNIVERSITY","Computer Science",240,73,73,"BBC","N/A");
id = db.insertTitle(
"UNIVERSITY OF SOUTHAMPTON","Computer Science",450,92,95,"AAA","N/A");
id = db.insertTitle(
"SOUTHAMPTON SOLENT UNIVERSITY","Computer Science",240,68,85,"CDD","N/A");
id = db.insertTitle(
"STAFFORDSHIRE UNIVERSITY","Computer Science",240,70,78,"CDD","N/A");
id = db.insertTitle(
"UNIVERSITY OF ST ANDREWS","Computer Science",458,90,0,"AAB","N/A");
id = db.insertTitle(
"UNIVERSITY OF STIRLING","Computer Science",255,100,65,"BBC","N/A");
id = db.insertTitle(
"UNIVERSITY OF STRATHCLYDE","Computer Science",333,97,90,"BBC","N/A");
id = db.insertTitle(
"UNIVERSITY OF SUNDERLAND","Computer Science",225,59,70,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF SURREY","Computer Science",380,89,90,"AAB","N/A");
id = db.insertTitle(
"UNIVERSITY OF SUSSEX","Computer Science",360,84,85,"ABB","BBB");
id = db.insertTitle(
"SWANSEA UNIVERSITY","Computer Science",280,82,75,"ABB","N/A");
id = db.insertTitle(
"TEESSIDE UNIVERSITY","Computer Science",260,78,64,"BBC","N/A");
id = db.insertTitle(
"UNIVERSITY OF ULSTER","Computer Science",237,73,63,"BBB","N/A");
id = db.insertTitle(
"UNIVERSITY OF WALES: TRINITY SAINT DAVID","Computer Science",0,77,0,"CDD","N/A");
id = db.insertTitle(
"UNIVERSITY OF WALES, NEWPORT","Computer Science",230,81,50,"CDD","N/A");
id = db.insertTitle(
"UNIVERSITY OF WARWICK","Computer Science",480,87,100,"AAB","N/A");
id = db.insertTitle(
"UNIVERSITY OF THE WEST OF ENGLAND, BRISTOL","Computer Science",240,74,84,"BBB","N/A");
id = db.insertTitle(
"THE UNIVERSITY OF WEST LONDON","Computer Science",0,37,0,"CDD","N/A");
id = db.insertTitle(
"THE UNIVERSITY OF WESTMINSTER","Computer Science",180,54,63,"CCC","AA");
id = db.insertTitle(
"UNIVERSITY OF THE WEST OF SCOTLAND","Computer Science",238,69,52,"BBC","N/A");
id = db.insertTitle(
"UNIVERSITY OF WOLVERHAMPTON","Computer Science",150,70,61,"CCD","N/A");
id = db.insertTitle(
"UNIVERSITY OF WORCESTER","Computer Science",210,65,55,"CCC","N/A");
id = db.insertTitle(
"UNIVERSITY OF YORK","Computer Science",460,91,100,"AAA","N/A");


  db.close();
}
public String getData(){
    db.open();
    Cursor c = db.rawQuery("SELECT * FROM titles", null);
    c.moveToFirst();   
    db.close();
    return c.getString(c.getColumnIndex("UCAS"));
  }
}

and this is my adapter:

这是我的适配器:

package com.course.ucas;

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

 public class DBAdapter {
public static final String KEY_ROWID = "_id";
public static final String KEY_UNIVERSITY = "University";
public static final String KEY_COURSE = "Course";   
public static final String KEY_UCAS = "UCAS";
public static final String KEY_SATISFACTION = "Satisfaction";
public static final String KEY_EMPLOYED = "Employed";
public static final String KEY_OFFER = "Offer";
public static final String KEY_OTHER = "Other";
private static final String TAG = "DBAdapter";
private static final String DATABASE_NAME = "UCAS";
private static final String DATABASE_TABLE ="titles";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE =
"create table titles (_id integer primary key autoincrement, University text not null, Course text not null, UCAS int not null, Satisfaction int not null, Employed int not null, Offer text not null, Other text not null);";
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public DBAdapter(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
Log.w(TAG, "Upgrading database from version " + oldVersion
+ " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS titles");
onCreate(db);
}
}
public DBAdapter open() throws SQLException
{
db = DBHelper.getWritableDatabase();
return this;
}
//---closes the database---
public void close()
{
DBHelper.close();
}
//---insert a title into the database---
public long insertTitle(String university, String other, int i, int j,int k, String   UCAS, String employed)
{
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_UNIVERSITY, university);
initialValues.put(KEY_COURSE, j);
initialValues.put(KEY_UCAS , UCAS);
initialValues.put(KEY_SATISFACTION, k);
initialValues.put(KEY_EMPLOYED , employed);
initialValues.put(KEY_OFFER , i);
initialValues.put(KEY_OTHER , other);
return db.insert(DATABASE_TABLE, null, initialValues);
}
//---deletes a particular title---
public boolean deleteTitle(long rowId)
{
return db.delete(DATABASE_TABLE, KEY_ROWID +
"=" + rowId, null) > 0;
}
//---retrieves all the titles---
public Cursor getAllTitles()
{
return db.query(DATABASE_TABLE, new String[] {
KEY_ROWID,
KEY_UNIVERSITY,
KEY_COURSE,
KEY_UCAS ,
KEY_SATISFACTION,
KEY_EMPLOYED,
KEY_OFFER,
KEY_OTHER,
},
null,
null,
null,
null,
null);
}
//---retrieves a particular title---
public Cursor getTitle(long rowId) throws SQLException
{
Cursor mCursor =
db.query(true, DATABASE_TABLE, new String[] {
KEY_ROWID,
KEY_UNIVERSITY,
KEY_COURSE,
KEY_UCAS,
KEY_SATISFACTION,
KEY_EMPLOYED,
KEY_OFFER,
KEY_OTHER,
},
KEY_ROWID + "=" + rowId,
null,
null,
null,
null,
null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
//---updates a title---
public boolean updateTitle(long rowID, String university, String other, int i, int j,int k, String UCAS, String employed)
{
ContentValues args = new ContentValues();
args.put(KEY_UNIVERSITY, university);
args.put(KEY_COURSE, i);
args.put(KEY_UCAS , UCAS);
args.put(KEY_SATISFACTION, j);
args.put(KEY_EMPLOYED , employed);
args.put(KEY_OFFER , k);
args.put(KEY_OTHER , other);
return db.update(DATABASE_TABLE, args,
KEY_ROWID + "=" + rowID, null) > 0;
}

public String[] columns = new String[]{ KEY_ROWID, KEY_UNIVERSITY, KEY_COURSE,  KEY_UCAS, KEY_SATISFACTION, KEY_EMPLOYED, KEY_OFFER, KEY_OTHER };
}

回答by Simon Dorociak

So you can use two methods:

所以你可以使用两种方法:

Difference is that query()has protect against sql injectionsby default against rawQuery()method that not.

不同的是,query()具有防止sql injections在默认情况下对rawQuery()方法没有。

But you most likely need to read some tutorial so check Android SQLite Database Tutorial

但是您很可能需要阅读一些教程,因此请检查 Android SQLite Database Tutorial

回答by jaisonDavis

This is how you extract data.'query' is not a keyword you should use here, instead use 'rawQuery'

这就是你提取数据的方式。'query'不是你应该在这里使用的关键字,而是使用'rawQuery'

   public String getData(){
        String s;
        db.open();
        Cursor c = db.rawQuery("SELECT * FROM Table", null);
        c.moveToFirst();   
        s=c.getString(c.getColumnIndex("columnName"));
        db.close();
        return s
      }

回答by Clas ?stman

You have an adapter. Why don't you use. Like this.

你有一个适配器。你为什么不使用。像这样。

public String getData(){
  db.open();
  Cursor c = db.getAllTitles();
  c.moveToFirst();   
  db.close();
  return c.getString(c.getColumnIndex("UCAS"));
}