SQLite的使用

来源:互联网 发布:同数据库 编辑:程序博客网 时间:2024/06/04 17:55

SQLite的使用–商品展示

主页面activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_margin="8dp"    android:orientation="vertical"    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:layout_weight="1"            android:hint="商品名称"            android:inputType="textPersonName" />        <EditText            android:id="@+id/balanceET"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:hint="金额"            android:inputType="number" />        <ImageView            android:id="@+id/addIV"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:onClick="add"            android:src="@android:drawable/ic_input_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 item布局item.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:id="@+id/idTV"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_weight="1"        android:text="13"        android:textColor="#000000"        android:textSize="20sp" />    <TextView        android:id="@+id/nameTV"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_weight="2"        android:singleLine="true"        android:text="PQ"        android:textColor="#000000"        android:textSize="20sp" />    <TextView        android:id="@+id/balanceTV"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_weight="2"        android:singleLine="true"        android:text="12345"        android:textColor="#000000"        android:textSize="20sp" />    <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: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>

创建数据库MyHelper.java继承SQLiteOpenHelper:

package cn.itcast.product.dao;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class MyHelper extends SQLiteOpenHelper {    // 由于父类没有无参构造函数, 所以子类必须指定调用父类哪个有参的构造函数    public MyHelper(Context context) {        super(context, "itcast.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");    }}

JavaBean类:Account.java:

package cn.itcast.product.bean;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 + "]";    }}

数据库管理操作类:AccountDao.java:

package cn.itcast.product.dao;import java.util.ArrayList;import java.util.List;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import cn.itcast.product.bean.Account;public class AccountDao {    private MyHelper helper;    public AccountDao(Context context) {        helper = new MyHelper(context); // 创建Dao时, 创建Helper    }    public void insert(Account account) {        SQLiteDatabase db = helper.getWritableDatabase(); // 获取数据库对象            // 用来装载要插入的数据的 Map<列名, 列的值>        ContentValues values = new ContentValues();              values.put("name", account.getName());        values.put("balance", account.getBalance());        long id = db.insert("account", null, values); // 向account表插入数据values,        account.setId(id);  // 得到id        db.close();         // 关闭数据库    }     //根据id 删除数据    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<Account> queryAll() {        SQLiteDatabase db = helper.getReadableDatabase();        Cursor c = db.query("account", null, null, null, null, null,                "_id DESC");        List<Account> list = new ArrayList<Account>();        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;    }}

界面交互类(主类):MainActivity.java:

package cn.itcast.product;import java.util.List;import android.app.Activity;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;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 cn.itcast.product.bean.Account;import cn.itcast.product.dao.AccountDao;public class MainActivity extends Activity {    // 需要适配的数据集合    private List<Account> list;    // 数据库增删改查操作类    private AccountDao dao;    // 输入姓名的EditText    private EditText nameET;    // 输入金额的EditText    private EditText balanceET;    // 适配器    private MyAdapter adapter;    // ListView    private ListView accountLV;    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);        balanceET = (EditText) findViewById(R.id.balanceET);        // 添加监听器, 监听条目点击事件        accountLV.setOnItemClickListener(new MyOnItemClickListener());    }     //activity_mian.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("");    }       // 自定义一个适配器(把数据装到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.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对象中的数据放到TextView中         idTV.setText(a.getId() + "");          nameTV.setText(a.getName());         balanceTV.setText(a.getBalance() + "");         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 OnClickListener() {                public void onClick(View v) {                    a.setBalance(a.getBalance() + 1); // 修改值                    notifyDataSetChanged(); // 刷新界面                    dao.update(a); // 更新数据库                }         });          //向下箭头的点击事件触发的方法        downIV.setOnClickListener(new OnClickListener() {                public void onClick(View v) {                    a.setBalance(a.getBalance() - 1);                    notifyDataSetChanged();                    dao.update(a);                }        });          //删除图片的点击事件触发的方法         deleteIV.setOnClickListener(new OnClickListener() {                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();// 刷新界面                        }                    };                    Builder builder = new Builder(MainActivity.this); // 创建对话框                    builder.setTitle("确定要删除吗?");                    // 设置标题                        // 设置确定按钮的文本以及监听器                    builder.setPositiveButton("确定", listener);                       builder.setNegativeButton("取消", null);         // 设置取消按钮                    builder.show(); // 显示对话框                }            });            return item;        }    }         //ListView的Item点击事件    private class MyOnItemClickListener implements 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();        }    }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一洗头就掉很多头发怎么办 生完孩子掉头发怎么办 甲减引起的肥胖怎么办 18岁掉头发严重怎么办 5岁儿童掉头发严重怎么办 18头发掉的严重怎么办 甲癌碘131后腮腺肿大怎么办 头发出油发丝细怎么办 25岁总掉头发怎么办 25岁掉头发厉害怎么办 我25岁经常掉头发怎么办 25岁掉头发很厉害怎么办 我今年25岁掉头发怎么办 头顶头发稀少怎么办有方法吗 头发又干又黄怎么办 2岁宝宝头发细软怎么办 头发突然变得稀疏了怎么办 孕期掉头发很厉害怎么办 冬天头发掉的厉害怎么办 怀孕期间掉头发比较严重怎么办 头发油腻容易掉发怎么办 最近头发掉的厉害怎么办 头发新长的绒毛怎么办 久躺床上头发黏在一起怎么办 头发长油怎么办小妙招 头发出油多脱发怎么办 头发出油掉头发怎么办 在英国狂掉头发怎么办 我头发油头皮痒脱发怎么办 油性头发容易掉发怎么办 洗了头发很蓬松怎么办 小孩头皮黄掉头发怎么办 头发又油又掉发怎么办 英国的水掉头发怎么办 洗发为什么会掉头发怎么办 头发老掉怎么办吃什么 19岁掉头发严重怎么办 头发总是从根掉怎么办 18岁掉头发很厉害怎么办 20岁脱发严重该怎么办 22岁m型脱发严重怎么办