首页 > 程序开发 > 移动开发 > Android >

Android案例:SQLite数据库学习

2017-04-24

Android案例:SQLite数据库学习,本次案例通过创建一个往购物车添加商品,并对商品进行删除更改金额操作来实现对SQLite数据库的学习。

Android案例:SQLite数据库学习,本次案例通过创建一个往购物车添加商品,并对商品进行删除更改金额操作来实现对SQLite数据库的学习。

1、创建程序

创建一个名为“商品展示”的应用程序,设计用户交互界面为

这里写图片描述

布局文件为:

上述代码中用Imageview显示图片。其中使用到了ImageView的属性Android:src来指定ImageView要显示的图片,但是只显示图片原图大小。如果使用Android:background属兴,图片大小会根据ImageView的大小进行拉伸。

2、创建item布局

由于本案例用到了ListView布局,所以需要编写一个item布局。

界面展示如下:

这里写图片描述

具体代码:

上述代码添加了三个TextView,分别用于显示数据库中的某条数据的ID、商品名称、金额,三个IMageView用于增加金额,删除数据。

3、创建数据库

直接上代码:

public class MyHelper extends SQLiteOpenHelper {

public MyHelper(Context context){

super(context,"itcase.db",null,2);

}

public void onCreate(SQLiteDatabase db){

System.out.println("onCreate");

db.execSQL("CREATE TABLE account(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),balance INTEGER)");

}

public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){

System.out.println("onUpgrade");

}

}

4、创建Account类

在操作数据库时将数据存放至一个javaBean对象中操作起来会比较方便,所以在bean包里边存放Javabean类。

public class Account {

private Long id;

private String name;

private Integer balance;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getBalance() {

return balance;

}

public void setBalance(Integer balance) {

this.balance = balance;

}

public Account(Long id,String name,Integer balance){

super();

this.id=id;

this.name=name;

this.balance=balance;

}

public Account(String name, Integer balance) {

super();

this.name = name;

this.balance = balance;

}

public Account() {

super();

}

public String toString() {

return "[序号:" + id + ",商品名称:" + name + ",余额:" + balance + "]";

}

}

5、创建数据操作逻辑类

public class AccountDao {

private MyHelper helper;

public AccountDao(Context context){

helper=new MyHelper(context);

}

public void insert(Account account){

SQLiteDatabase db=helper.getWritableDatabase();

ContentValues values=new ContentValues();

values.put("name",account.getName());

values.put("balance",account.getBalance());

long id=db.insert("account",null,values);

account.setId(id);

db.close();

}

public int delete(long id){

SQLiteDatabase db=helper.getWritableDatabase();

int count=db.delete("account","_id=?",new String[] {id+""});

db.close();

return count;

}

public int update(Account account){

SQLiteDatabase db=helper.getWritableDatabase();

ContentValues values=new ContentValues();

values.put("name",account.getName());

values.put("balance",account.getBalance());

int count=db.update("account",values,"_id=?",new String[] {account.getId()+""});

db.close();

return count;

}

public List queryAll(){

SQLiteDatabase db=helper.getReadableDatabase();

Cursor c=db.query("account",null,null,null,null,null,"balance DESC");

List list=new ArrayList();

while(c.moveToNext()){

long id=c.getLong(c.getColumnIndex("_id"));

String name=c.getString(1);

int balance=c.getInt(2);

list.add(new Account(id,name,balance));

}

c.close();

db.close();

return list;

}

}

这个类创建了对数据库进行曾、删、改、查操作的方法。需要注意的是在insert()方法中调用了db.insert()方法,这个方法第二个参数如果传入的是NULL,是无法插入一条空的语句的。如果想插入一条空数据,第二个参数必须写一个列名,传入的这个列名是用来拼接SQL语句的。

6、编写界面交互代码

数据库的操作完成后需要界面与数据库进行交互,用于实现数据库中的数据已ListView的形式展现在界面上,具体代码如下:

public class MainActivity extends AppCompatActivity {

//需要适配的数据集合

private List list;

//数据库增删改查操作类

private AccountDao dao;

//输入姓名的EditText

private EditText nameET;

//输入金额的EditText

private EditText balanceET;

//适配器

private MyAdapter adapter;

private ListView accountLV;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//初始化控件

initView();

dao=new AccountDao(this);

//从数据库查询出所有数据

list=dao.queryAll();

adapter=new MyAdapter();

accountLV.setAdapter(adapter);

}

//初始化控件

private void initView(){

accountLV=(ListView)findViewById(R.id.accountLV);

nameET=(EditText) findViewById(R.id.nameET);

balanceET=(EditText) findViewById(R.id.balanceET);

//添加监听器,监听条目点击事件

accountLV.setOnItemClickListener(new MyOnItemClickListener());

}

//activity_main.xml对应ImageView的点击事件触发的方法

public void add(View v){

String name=nameET.getText().toString().trim();

String balance=balanceET.getText().toString().trim();

//三目运算balance.equals("")则等于0

//如果balance不是空字符串则进行类型转换

Account a=new Account(name,balance.equals("")?0:Integer.parseInt(balance));

dao.insert(a); //插入数据库

list.add(a); //插入集合

adapter.notifyDataSetChanged(); //刷新界面

//选中最后一个

accountLV.setSelection(accountLV.getCount()-1);

nameET.setText("");

balanceET.setText("");

}

private class MyAdapter extends BaseAdapter{

public int getCount(){

return list.size(); //获取条目总数

}

public Object getItem(int position){

return list.get(position); //根据位置获取对象

}

public long getItemId(int position){

return position; //根据位置获取id

}

//获取一个条目视图

public View getView(int position, View convertView, ViewGroup parent){

//重用convertView

View item=convertView!=null?convertView:View.inflate(getApplicationContext(),R.layout.item,null);

//获取视图中的TextView

TextView idTV=(TextView) item.findViewById(R.id.idTv);

TextView nameTV=(TextView) item.findViewById(R.id.nameTv);

TextView balanceTV=(TextView) item.findViewById(R.id.balanceTV);

//根据当前位置获取Account对象

final Account a=list.get(position);

//把Account对象中的Account数据放到TextView中

idTV.setText(a.getId()+"");

nameTV.setText(a.getName());

balanceTV.setText(a.getBalance()+"");

ImageView upIV=(ImageView) item.findViewById(R.id.upTv);

ImageView downIV=(ImageView) item.findViewById(R.id.downTv);

ImageView deleteIV=(ImageView) item.findViewById(R.id.deleteTV);

//向上箭头的点击事件触发的方法

upIV.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

a.setBalance(a.getBalance()+1); //修改值

notifyDataSetChanged(); //刷新界面

dao.update(a); //更新数据库

}

});

//向下箭头的点击事件触发的方法

downIV.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

a.setBalance(a.getBalance()-1);

notifyDataSetChanged();

dao.update(a);

}

});

//删除图片的点击事件触发的方法

deleteIV.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//删除数据之前首先弹出一个对话框

android.content.DialogInterface.OnClickListener listener=new android.content.DialogInterface.OnClickListener(){

public void onClick(DialogInterface dialog,int which){

list.remove(a); //从集合中删除

dao.delete(a.getId()); //从数据库中删除

notifyDataSetChanged(); //刷新界面

}

};

AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);

builder.setTitle("确定要删除吗?");

//设置确定按钮的文本以及监听器

builder.setPositiveButton("确定",listener);

builder.setNegativeButton("取消",null);

builder.show();

}

});

return item;

}

}

//ListView的Item点击事件

private class MyOnItemClickListener implements AdapterView.OnItemClickListener{

public void onItemClick(AdapterView parent,View view,int position,long id){

//获取点击位置上的数据

Account a=(Account) parent.getItemAtPosition(position);

Toast.makeText(getApplicationContext(),a.toString(),Toast.LENGTH_SHORT).show();

}

}

}

上述代码实现了界面管理数据库。

7、运行程序界面展示

打开应用程序会进入商品展示界面:

这里写图片描述

可见、有一个“添加”按钮和两个文本框分别用来输入姓名和金额。输入姓名和金额后点击添加会进入以下界面:

\

可以通过金额后面的更改金额和删除操作来处理数据如图:

\

本次案例的学习,使我收获了SQLite数据库和ListView控件的相关知识,纵观全局,这两个知识点非常重要,在实际开发中可以实现很多功能。

相关文章
最新文章
热点推荐