我一直在研究用于 sqlite 数据库的 android sdk 的信息和文档,但我仍然有点卡住。我有一个从此处找到的示例中检索到的数据库类。这是我的课:
package com.example.medtracker;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
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.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdapter {
private static final String DATABASE_NAME = "meds.db";
private String DATABASE_TABLE;
private static final int DATABASE_VERSION = 1;
// Index Key column
public static final String KEY_ID = "_id";
// Name of the column index of each column in DB
public ArrayList<String> TABLE_KEYS = new ArrayList<String>();
public ArrayList<String> TABLE_OPTIONS = new ArrayList<String>();
public final String KEY_TIMESTAMP = "timeStamp";
public final int TIMESTAMP_COLUMN = 1;
// Create new database
private String DATABASE_CREATE;
// Variable to hold database instant
private SQLiteDatabase db;
// Database open/upgrade helper
private myDBHelper dbHelper;
public DBAdapter(Context context, String table, ArrayList<String> keys,
ArrayList<String> options) {
// Start initializing all of the variables
DATABASE_TABLE = table;
TABLE_KEYS = (ArrayList<String>) keys.clone();
TABLE_OPTIONS = options;
String keyString = "";
for (int i = 0; TABLE_KEYS.size() > i; i++) {
// Add commas to the options elements if there is a next value.
if (i + 1 < TABLE_OPTIONS.size() && TABLE_OPTIONS.get(i) != null) {
TABLE_OPTIONS.set(i, TABLE_OPTIONS.get(i) + ",");
} else if (i + 1 == TABLE_OPTIONS.size()
&& TABLE_OPTIONS.get(i) != null) {
if (i + 1 < TABLE_KEYS.size()) {
TABLE_OPTIONS.set(i, TABLE_OPTIONS.get(i) + ",");
} else {
TABLE_KEYS.set(i, TABLE_KEYS.get(i) + "");
}
} else if (i + 1 != TABLE_KEYS.size()) {
TABLE_KEYS.set(i, TABLE_KEYS.get(i) + ",");
} else {
TABLE_KEYS.set(i, TABLE_KEYS.get(i) + "");
}
System.out.println(TABLE_OPTIONS.toString());
System.out.println(TABLE_KEYS.toString());
if (i + 1 <= TABLE_OPTIONS.size() && TABLE_OPTIONS.get(i) != null)
keyString = keyString + " " + TABLE_KEYS.get(i) + " "
+ TABLE_OPTIONS.get(i);
else if (i + 1 > TABLE_OPTIONS.size()
|| TABLE_OPTIONS.get(i) == null) {
keyString = keyString + " " + TABLE_KEYS.get(i);
}
}
// Create the database creation string.
DATABASE_CREATE = "CREATE TABLE IF NOT EXISTS " + DATABASE_TABLE + " ("
+ "_id" + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ KEY_TIMESTAMP + "," + keyString + ");";
// Create a new Helper
dbHelper = new myDBHelper(context, DATABASE_NAME, null,
DATABASE_VERSION, DATABASE_TABLE, DATABASE_CREATE);
}
public DBAdapter open() throws SQLException {
db = dbHelper.getWritableDatabase();
return this;
}
public void close() {
db.close();
}
public long insertEntry(ArrayList<String> key, ArrayList<String> value) {
String timeStamp = new Timestamp(Calendar.getInstance()
.getTimeInMillis()).toString();
ContentValues contentValues = new ContentValues();
for (int i = 0; key.size() > i; i++) {
contentValues.put(key.get(i), value.get(i));
}
contentValues.put(KEY_TIMESTAMP, timeStamp);
return db.insert(DATABASE_TABLE, null, contentValues);
}
public boolean removeEntry(long rowIndex) {
return db.delete(DATABASE_TABLE, KEY_ID + "=" + rowIndex, null) > 0;
}
public Cursor getAllEntries(String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String sortBy, String sortOption) {
return db.query(DATABASE_TABLE, columns, selection, selectionArgs,
groupBy, having, sortBy + " " + sortOption);
}
public int updateEntry(long rowIndex, ArrayList<String> key,
ArrayList<String> value) {
String timeStamp = new Timestamp(Calendar.getInstance()
.getTimeInMillis()).toString();
String where = KEY_ID + "=" + rowIndex;
ContentValues contentValues = new ContentValues();
for (int i = 0; key.size() > i; i++) {
contentValues.put(key.get(i), value.get(i));
}
contentValues.put(KEY_TIMESTAMP, timeStamp);
return db.update(DATABASE_TABLE, contentValues, where, null);
}
public boolean clearTable() {
return db.delete(DATABASE_TABLE, null, null) > 0;
}
private static class myDBHelper extends SQLiteOpenHelper {
private String creationString;
private String tableName;
@SuppressWarnings("unused")
SQLiteDatabase db;
/**
* Creates a myDBHelper object.
*
* @param context
* The context where the access is needed
* @param name
* Name of database file
* @param factory
* A CursorFactory, or null to use default CursorFactory
* @param version
* Database version
* @param tableName
* Name of table within database
* @param creationString
* SQL String used to create the database
*/
public myDBHelper(Context context, String name, CursorFactory factory,
int version, String tableName, String creationString) {
super(context, name, factory, version);
this.creationString = creationString;
this.tableName = tableName;
}
/**
* Creates the database table.
*
* @param db
* The database used by this helper to create the table in
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(creationString);
}
/**
* This method determines if the database needs to be updated or not.
*
* @param db
* The database used by this helper
* @param oldVersion
* The old database version
* @param newVersion
* The new database version
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Log the version upgrade
Log.w("TaskDBAdapter", "Upgrading from version " + oldVersion
+ " to " + newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + tableName);
onCreate(db);
}
/**
* Creates tables when the database is opened if the tables need to be
* created.
*
* @param db
* The database used by this helper
*/
@Override
public void onOpen(SQLiteDatabase db) {
db.execSQL(creationString);
}
}
}
然后我做了一个类来添加对象: public class AddMed extends Activity implements OnClickListener {
Button submit;
EditText name, dossage;
DBAdapter database;
String names, amount;
String total;
ArrayList<String> btr;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.addmed);
submit = (Button) findViewById(R.id.bSubmit);
name = (EditText) findViewById(R.id.etNameOfMed);
dossage = (EditText) findViewById(R.id.etHowMuch);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.bSubmit:
names = name.getText().toString();
amount = dossage.getText().toString();
total = names + amount;
btr.add(total);
database.open();
database.insertEntry(btr, btr);
database.close();
break;
}
}
}
然后我有另一个带有文本视图的类,我尝试创建一个新的 DBAdatper 实例并使用光标中的 getAllEntries 方法,但我对参数感到困惑。有人可以启发我吗?感谢您的帮助。