Android 案例---SQLite数据库的学习
来源:互联网 发布:安泰管理学院知乎 编辑:程序博客网 时间:2024/05/22 12:22
本次博文通过创建一个购物车像购物车中添加商品 并对商品进行删除来实现对SQLite 数据库的学习
用户界面
布局文件
ativity_main.xml 代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_margin="8dp" tools:context=".MainActivity"> <LinearLayout android:id="@+id/addLL" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <EditText android:id="@+id/nameET" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="@string/et_name" android:layout_weight="1" android:inputType="textPersonName" /> <EditText android:id="@+id/moneyET" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="@string/et_money" android:layout_weight="1" android:inputType="number"/> <ImageView android:id="@+id/addIV" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/ic_input_add" android:onClick="add"/> </LinearLayout> <ListView android:id="@+id/accountLV" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/addLL" ></ListView></LinearLayout>
listview.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="10dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="13" android:textColor="#000000" android:textSize="20sp" android:id="@+id/idTV"/> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:text="PQ" android:textColor="#000000" android:textSize="20sp" android:id="@+id/nameTV"/> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:text="12345" android:textColor="#000000" android:textSize="20sp" android:id="@+id/moneyTV"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <ImageView android:id="@+id/upIV" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:src="@android:drawable/arrow_up_float"/> <ImageView android:id="@+id/downIV" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:src="@android:drawable/arrow_down_float"/> </LinearLayout> <ImageView android:id="@+id/deleteIV" android:layout_width="25dp" android:layout_height="25dp" android:src="@android:drawable/ic_menu_delete"/></LinearLayout
Account(在操作数据库时将数据存放至一个javaBean对象中操作起来会比较方便,所以在bean包里边存放Javabean类。)
package com.example.administrator.displaygoods.bean;/** * Created by Administrator on 2017/4/17. */public class Account { private Long id; private String name; private Integer money; 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 getMoney() { return money; } public void setMoney(Integer money) { this.money = money; } public Account(Long id,String name,Integer money){ super(); this.id=id; this.name=name; this.money=money; } public Account(String name,Integer money){ super(); this.name=name; this.money=money; } public Account(){ super(); } public String toString(){ return "[序号:"+id+",商品名称:"+name+",余额:"+money+"]"; }}
MainActivity(数据库的操作完成后需要界面与数据库进行交互,用于实现数据库中的数据已ListView的形式展现在界面上)
package com.example.administrator.displaygoods;import android.content.DialogInterface;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import com.example.administrator.displaygoods.bean.Account;import com.example.administrator.displaygoods.dao.AccountDao;import java.util.List;public class MainActivity extends AppCompatActivity { //需要适配的数据集合 private List<Account> list; //数据库增删改查操作类 private AccountDao dao; //输入姓名的EditText private EditText nameET; //输入金额的EditText private EditText moneyET; //适配器 private MyAdapter adapter; //List View 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); //给ListView添加适配器(自动把数据生成条目) } //初始化控件 private void initView() { accountLV = (ListView) findViewById(R.id.accountLV); nameET = (EditText) findViewById(R.id.nameET); moneyET = (EditText) findViewById(R.id.moneyET); //添加监听器,监听条目点击事件 accountLV.setOnItemClickListener(new MyOnItemClickListener()); } //activity_main.xml对应ImageView的点击事件出发的方法 public void add(View v) { String name = nameET.getText().toString().trim(); String money = moneyET.getText().toString().trim(); //三目运算money.equals("")则等于0 //如果money不是空字符串,则进行类型转换 Account a = new Account(name, money.equals("") ? 0 : Integer.parseInt(money)); dao.insert(a);//插入数据库 list.add(a); //插入集合 adapter.notifyDataSetChanged(); //刷新界面 //选中最后一个 accountLV.setSelection(accountLV.getCount() - 1); nameET.setText(""); moneyET.setText(""); } //自定义一个适配器(把数据装到ListView的工具) 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) { //根据位置获取id return position; } //获取一个条目视图 public View getView(int position, View convertView, ViewGroup parent) { //重用convertView View item = convertView != null ? convertView : View.inflate(getApplicationContext(), R.layout.listview, null); //获取该试图中的TextView TextView idTV = (TextView) item.findViewById(R.id.idTV); TextView nameTV = (TextView) item.findViewById(R.id.nameTV); TextView moneyTV = (TextView) item.findViewById(R.id.moneyTV); //根据当前位置获取Account对象 final Account a = list.get(position); //把Account对象中的数据放到TextView中 idTV.setText(a.getId() + ""); nameTV.setText(a.getName()); moneyTV.setText(a.getMoney() + ""); ImageView upIV = (ImageView) item.findViewById(R.id.upIV); ImageView downIV = (ImageView) item.findViewById(R.id.downIV); ImageView deleteIV = (ImageView) item.findViewById(R.id.deleteIV); //向上箭头的点击事件触发的方法 upIV.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { a.setMoney(a.getMoney() + 1); notifyDataSetChanged(); dao.update(a); } }); //向下箭头的点击事件触发的方法 downIV.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { a.setMoney(a.getMoney() - 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(); } }}
MyHelper
package com.example.administrator.displaygoods.dao;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by Administrator on 2017/4/17. */public class MyHelper extends SQLiteOpenHelper{ public MyHelper(Context context) { super(context, "product.db", null, 2); } @Override public void onCreate(SQLiteDatabase db) { System.out.println("onCreate"); db.execSQL("create table account(id integer primary key autoincrement,name VARCHAR(20),money INTEGER)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { System.out.println("onUpgrade"); }}
AccountDao (创建数据操作逻辑类)
package com.example.administrator.displaygoods.dao;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.example.administrator.displaygoods.bean.Account;import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 2017/4/17. */public class AccountDao { private MyHelper helper; public AccountDao(Context context){ //创建Dao时,创建Helper helper=new MyHelper(context); } //插入 public void insert(Account account){ //获取数据库对象 SQLiteDatabase db=helper.getWritableDatabase(); //用来装载要插入的数据的Map<列名,列的值> ContentValues values=new ContentValues(); values.put("name",account.getName()); values.put("money",account.getMoney()); //向account表插入数据values long id=db.insert("account",null,values); account.setId(id); //得到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("money",account.getMoney()); int count =db.update("account",values,"id=?", new String []{account.getId()+""}); //更新并得到行数 db.close(); return count; } public List<Account> queryAll(){ SQLiteDatabase db=helper.getReadableDatabase(); Cursor c=db.query("account",null,null,null,null,null,"money DESC"); List<Account> list=new ArrayList<Account>(); while(c.moveToNext()){ //可以根据列名获取索引 long id=c.getLong(c.getColumnIndex("id")); String name=c.getString(1); int money=c.getInt(2); list.add(new Account(id,name,money)); } c.close(); db.close(); return list; }}
0 0
- Android 案例---SQLite数据库的学习
- Android案例:SQLite数据库学习
- android的sqlite数据库案例
- Android学习笔记——SQLite数据库案例【商品展示】
- Android SQLite数据库学习
- Android sqlite数据库学习
- Android学习历程--Sqlite的使用(商品展示案例)
- android学习笔记---SQLite数据库的使用
- Android的数据库(SQLite)学习
- #Android学习#Sqlite数据库的创建
- Android SQLite数据库学习笔记
- Android学习18--SQlite数据库
- android之sqlite数据库学习
- android学习之sqlite数据库
- android新手学习:SQLite数据库
- android学习之sqlite数据库
- Android学习之数据库SQLite
- android学习笔记--sqlite数据库
- 基于深度相机的三维重建技术
- Linux下安装MySQL-5.7
- 整理的最完整的OFPT_STATS_REQUEST && REPLY消息-部分转载(含有1.0与1.3的对比)
- flume使用
- C语言交换两个变量的值
- Android 案例---SQLite数据库的学习
- Linux——ubuntu硬盘分区
- caffe训练加BN层的网络时loss为87.3365的问题解决办法
- myeclipse struts2环境配置(入门教程)
- 将查询信息整合成一个实体类
- java部分基础类型及时间格式的数据格式相互转换方法整理
- 55.JVM调优之原理概述以及降低cache操作的内存占比
- 安装anaconda及pycharm 启动Jupyter
- 文奇的无聊实习日记之数据结构篇-ch1(番外)算法概要(考生福利)