在本地数据库上存储数据
Storing Data on a Local Database
感谢 Whosebug 的贡献者,我能够使用 Android Studio 开发我的第一个 Android 应用程序,而无需事先了解 Java。
这是一个具有两个 EditText 字段和一个 OK 按钮的独特界面条码扫描应用程序(使用 ZXing)。这两个字段填充了条码扫描器。
我想将数据存储在本地数据库的两个 EditText 字段中,其中有两列(用于这两个字段)和一列 table。
我不是要代码,我只是要指导方针和建议来推动我的应用程序的开发。
谢谢
为什么选择数据库来存储这2个值?
您是否考虑过偏好?我觉得比较合适
首先,你应该阅读这篇文章https://developer.android.com/guide/topics/data/data-storage
现在,考虑所有相关因素,自行决定什么最适合您的需求。
这对我来说就像一个宠物项目,你只想存储两个值,
我建议您使用 SharedPreferences
存储它们
参考https://developer.android.com/training/data-storage/shared-preferences
我认为你应该使用 Sqlite 数据库,这就是你应该使用它的方式。
DBHelper.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;
public class DBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "MyDBName.db";
public static final String CONTACTS_TABLE_NAME = "barcode";
public static final String CONTACTS_COLUMN_ID = "id";
public static final String CONTACTS_COLUMN_TEXT1 = "field1";
public static final String CONTACTS_COLUMN_TEXT2 = "field2";
private HashMap hp;
public DBHelper(Context context) {
super(context, DATABASE_NAME , null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(
"create table barcode" +
"(id integer primary key, field1 text, field2 text)"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS barcode");
onCreate(db);
}
public boolean insertData (String text1, String text2) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("field1", text1);
contentValues.put("field2", text2);
db.insert("barcode", null, contentValues);
return true;
}
public Cursor getData(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery( "select * from barcode where id="+id+"", null );
return res;
}
public boolean updateBarcode (Integer id, String text1, String text2) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("field1", text1);
contentValues.put("field2", text2);
db.update("barcode", contentValues, "id = ? ", new String[] { Integer.toString(id) } );
return true;
}
您的 Activity 或片段
private DBHelper mydb ;
mydb = new DBHelper(this);
//insert
if(mydb.insertBarcode(EditText1.getText().toString(),
EditText2.getText().toString())){
Toast.makeText(getApplicationContext(), "done",
Toast.LENGTH_SHORT).show();
} else{
Toast.makeText(getApplicationContext(), "not done",
Toast.LENGTH_SHORT).show();
}
//Read
Cursor getBarcode= mydb.getData(id_to_search);
您还可以在 DBHelper.java
中添加更多功能,例如从 table 读取完整数据等
感谢 Whosebug 的贡献者,我能够使用 Android Studio 开发我的第一个 Android 应用程序,而无需事先了解 Java。 这是一个具有两个 EditText 字段和一个 OK 按钮的独特界面条码扫描应用程序(使用 ZXing)。这两个字段填充了条码扫描器。
我想将数据存储在本地数据库的两个 EditText 字段中,其中有两列(用于这两个字段)和一列 table。
我不是要代码,我只是要指导方针和建议来推动我的应用程序的开发。
谢谢
为什么选择数据库来存储这2个值? 您是否考虑过偏好?我觉得比较合适
首先,你应该阅读这篇文章https://developer.android.com/guide/topics/data/data-storage
现在,考虑所有相关因素,自行决定什么最适合您的需求。
这对我来说就像一个宠物项目,你只想存储两个值, 我建议您使用 SharedPreferences
存储它们参考https://developer.android.com/training/data-storage/shared-preferences
我认为你应该使用 Sqlite 数据库,这就是你应该使用它的方式。
DBHelper.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;
public class DBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "MyDBName.db";
public static final String CONTACTS_TABLE_NAME = "barcode";
public static final String CONTACTS_COLUMN_ID = "id";
public static final String CONTACTS_COLUMN_TEXT1 = "field1";
public static final String CONTACTS_COLUMN_TEXT2 = "field2";
private HashMap hp;
public DBHelper(Context context) {
super(context, DATABASE_NAME , null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(
"create table barcode" +
"(id integer primary key, field1 text, field2 text)"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS barcode");
onCreate(db);
}
public boolean insertData (String text1, String text2) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("field1", text1);
contentValues.put("field2", text2);
db.insert("barcode", null, contentValues);
return true;
}
public Cursor getData(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery( "select * from barcode where id="+id+"", null );
return res;
}
public boolean updateBarcode (Integer id, String text1, String text2) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("field1", text1);
contentValues.put("field2", text2);
db.update("barcode", contentValues, "id = ? ", new String[] { Integer.toString(id) } );
return true;
}
您的 Activity 或片段
private DBHelper mydb ;
mydb = new DBHelper(this);
//insert
if(mydb.insertBarcode(EditText1.getText().toString(),
EditText2.getText().toString())){
Toast.makeText(getApplicationContext(), "done",
Toast.LENGTH_SHORT).show();
} else{
Toast.makeText(getApplicationContext(), "not done",
Toast.LENGTH_SHORT).show();
}
//Read
Cursor getBarcode= mydb.getData(id_to_search);
您还可以在 DBHelper.java