最近ofo共享单车进入到我们校园,一开始时计费挺贵的,此时我又正好在学安卓,就尝试写了一个功能非常简单的APP。它的主要功能是记住车牌号和密码,可以通过车牌号查询密码。其实写这个APP时我主要是想用数据库的知识为自己做一个小程序,尝试一下自己第一个APP的实现,并没有其他意思。
1.界面如下:
2.添加数据:
3.查询全部数据或者单个数据:
下面是主要代码:
1.建立数据类:
public class Item {
public long user;
public long password;
@Override
public String toString(){
return "车牌号:" + String.valueOf(user) + " 密码:" + String.valueOf(password);
}
2.继承SQLiteOpenHelper:
public class Ofo_DBAdapter {
private static final String DB_NAME = "ofo.db";
private static final String DB_TABLE = "ofoinfo";
private static final int DB_VERSION = 1;
public static final String KEY_USER = "user";
public static final String KEY_PASSWORD ="password";
private SQLiteDatabase db;
private final Context context;
private DBOpenHelper dbOpenHelper;
public Ofo_DBAdapter(Context _context){
context = _context;
}
public void close(){
if(db != null){
db.close();
db = null;
}
}
public static class DBOpenHelper extends SQLiteOpenHelper{
public DBOpenHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
private static final String DB_CREATE = "create table " + DB_TABLE+ "("
+ KEY_USER + " integer primary key autoincrement, " + KEY_PASSWORD + " integer);";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + DB_CREATE);
}
}
public void open()throws SQLiteException{
dbOpenHelper = new DBOpenHelper(context, DB_NAME, null, DB_VERSION);//此时会执行SQL语句创建数据库
try{
db = dbOpenHelper.getWritableDatabase();//得到数据库实例
}
catch(SQLiteException sq){
db = dbOpenHelper.getReadableDatabase();
}
}
//数据添加
public long insert(Item item){
ContentValues newValues = new ContentValues();//相当于载体
newValues.put(KEY_USER, item.user);
newValues.put(KEY_PASSWORD, item.password);
return db.insert(DB_TABLE, null, newValues);
}
private Item[] ConverToItem(Cursor cursor){
int resultCounts = cursor.getCount();
if(resultCounts == 0 || !cursor.moveToFirst()){
return null;
}
Item[] item = new Item[resultCounts];
for(int i = 0; i < resultCounts; i++){
item[i] = new Item();
item[i].user = cursor.getInt(cursor.getColumnIndexOrThrow(KEY_USER));
item[i].password = cursor.getInt(cursor.getColumnIndexOrThrow(KEY_PASSWORD));
cursor.moveToNext();
}
return item;
}
//查询单个数据
public Item[] getOneData(long id){
Cursor results = db.query(DB_TABLE, new String[]{ KEY_USER, KEY_PASSWORD},
KEY_USER + "=" + id, null, null, null, null);
return ConverToItem(results);
}
//查询全部数据
public Item[] getAllData(){
Cursor results = db.query(DB_TABLE, new String[]{ KEY_USER, KEY_PASSWORD},
null, null, null, null, null);
return ConverToItem(results);
}
//删除全部数据
public long deleteAllData(){
return db.delete(DB_TABLE, null, null);
}
}
3.控件功能:
Button add, query, display, delete;
EditText edit_user, edit_password;
TextView text;
Ofo_DBAdapter ofo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
add = (Button)findViewById(R.id.add);
query = (Button)findViewById(R.id.query);
display = (Button)findViewById(R.id.display);
delete = (Button)findViewById(R.id.delete);
edit_user = (EditText)findViewById(R.id.edit_user);
edit_password = (EditText)findViewById(R.id.edit_password);
text = (TextView)findViewById(R.id.text);
edit_user.setFilters(new InputFilter[]{ new InputFilter.LengthFilter( 5 )});
edit_password.setFilters(new InputFilter[]{ new InputFilter.LengthFilter( 4 )});
ofo = new Ofo_DBAdapter(this);//错过一次
ofo.open();//错过一次
//添加数据
add.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(edit_user.length() == 0 || edit_password.length() == 0){
Toast.makeText(getApplication(), "请把数据补充完整", Toast.LENGTH_SHORT).show();
return;
}
Item item = new Item();
item.user = Integer.parseInt(edit_user.getText().toString());
item.password = Integer.parseInt(edit_password.getText().toString());
long result = ofo.insert(item);
if(result == -1){
Toast.makeText(getApplication(), "添加数据失败,此数据已加入数据库", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getApplication(), "此数据添加成功", Toast.LENGTH_SHORT).show();
}
text.setText("");
}
});
//查询单个数据
query.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(edit_user.length() == 0){
Toast.makeText(getApplication(), "查询失败,请输入学号再查询", Toast.LENGTH_SHORT).show();
return;
}
else{
long id = Integer.parseInt(edit_user.getText().toString());
Item []item = ofo.getOneData(id);
if(item == null){
Toast.makeText(getApplication(), "数据库中没有车牌号为" +
edit_user.getText().toString() + "的数据", Toast.LENGTH_SHORT).show();
return;
}
text.setText(item[0].toString());
}
}
});
//显示全部数据
display.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Item []item = ofo.getAllData();
if(item == null){
Toast.makeText(getApplication(), "数据库中没有数据", Toast.LENGTH_SHORT).show();
return;
}
String msg = "当前数据库中共有" + String.valueOf(item.length) + "条数据" + "\n";
for(int i = 0; i < item.length; i++){
msg += item[i].toString() + "\n";
}
text.setText(msg);
}
});
//全部删除
delete.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(ofo.getAllData() == null){
Toast.makeText(getApplication(), "数据库中没有数据,无法删除!", Toast.LENGTH_SHORT).show();
return;
}
ofo.deleteAllData();
Toast.makeText(getApplication(), "数据库数据全部被删除", Toast.LENGTH_SHORT).show();
text.setText("");
}
});
}