SQLite结合ListView的增删改查
布局管理器里面加入几个Button和一个ListView:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/selector" > <ListView android:id="@+id/main_lv" android:layout_width="wrap_content" android:layout_height="250dp" android:layout_alignParentRight="true" android:layout_below="@+id/textView2" android:divider="@null" android:dividerHeight="6dp" android:padding="0dp" android:scrollbars="none" > </ListView> <com.example.jizhangben1.TextViewMy android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/main_top_layout" android:text=" --分类 -----金额-----日期--" android:textSize="25dp" /> <Button android:id="@+id/btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_toLeftOf="@+id/btn_help" android:background="@drawable/button_selector" android:text="+" android:textColor="#000000" android:textSize="25dp" /> <RelativeLayout android:id="@+id/main_top_layout" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" > <ImageView android:id="@+id/main_iv_search" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentRight="true" android:padding="10dp" /> <com.example.jizhangben1.TextViewMy android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="妈妈专用记账本" android:textSize="25dp" android:background="@drawable/addbutton" /> </RelativeLayout> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignTop="@+id/btn_add" android:src="@drawable/dibian" /> <Button android:id="@+id/btn_help" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:background="@drawable/button_selector" android:text="···" android:textColor="#000000" android:textSize="25dp" /> <TextView android:id="@+id/sum" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/imageView1" android:layout_marginBottom="26dp" android:layout_marginLeft="18dp" android:layout_toRightOf="@+id/tableRow1" android:text="0" /> </RelativeLayout>
SQLiteOpenHelper是一个辅助类来管理数据库的创建和版本。
可以通过继承这个类,实现它的一些方法来对数据库进行一些操作。
所有继承了这个类的类都必须实现下面这样的一个构造方法:
public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
1、Context类型,上下文对象。
2、String类型,数据库的名称
3、CursorFactory类型
4、int类型,数据库版本
所以,第一步,需要新建一个类继承SQLiteOpenHelper
package com.example.jizhangben1; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MyAdapter extends BaseAdapter { //使用list<Nate>,list会存储数据库中note表所有记录。 private List<Zhangdan> list; //用于将某个布局转换为view的对象。 private LayoutInflater layoutInflater; //当创建MyAdapter对象的时候,需要list的数据 public MyAdapter(List<Zhangdan> list, Context context){ this.list=list; layoutInflater=LayoutInflater.from(context); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView==null){ convertView=layoutInflater.inflate(R.layout.zd_item,null,false); viewHolder=new ViewHolder(convertView); convertView.setTag(viewHolder); }else { viewHolder=(ViewHolder)convertView.getTag(); } //将数据库中的内容加载到对应的控件上 Zhangdan zd =(Zhangdan) getItem(position); viewHolder.kongge1.setText(zd.getKongge1()); viewHolder.tv_fenlei.setText(zd.getFenlei()); viewHolder.kongge2.setText(zd.getKongge2()); viewHolder.tv_num.setText(zd.getNum()); viewHolder.kongge3.setText(zd.getKongge3()); viewHolder.tv_data.setText(zd.getData()); return convertView; } //用于给item的视图加载数据内容。 class ViewHolder{ private TextView kongge1,kongge2,kongge3; private TextView tv_num; private TextView tv_fenlei; private TextView tv_data; public ViewHolder(View view){ kongge1=(TextView) view.findViewById(R.id.kongge1); tv_fenlei=(TextView) view.findViewById(R.id.zd_fenlei); kongge2=(TextView) view.findViewById(R.id.kongge2); tv_num=(TextView) view.findViewById(R.id.zd_num); kongge3=(TextView) view.findViewById(R.id.kongge3); tv_data=(TextView) view.findViewById(R.id.zd_data); } } }
package com.example.jizhangben1; 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 android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.view.View; public class DBHelper extends SQLiteOpenHelper { private SQLiteDatabase db; ContentValues contentValues = new ContentValues(); public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); db=this.getWritableDatabase(); // String dirPath="/data/data/"+"com.example.jizhangben1"+"/databases/";; // db=SQLiteDatabase.openOrCreateDatabase(dirPath+"data.db",null); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table zhangdan(_id integer primary key autoincrement,kongge1 text,fenlei text,kongge2 text,num text,kongge3 text,data text)"); } //添加数据 public boolean insert(String fenlei,String num,String data) { contentValues.put("kongge1", " "); contentValues.put("fenlei", fenlei); contentValues.put("kongge2", " "); contentValues.put("num", num); int mon=Integer.parseInt(num); if((mon>-10)){ contentValues.put("kongge3","¥ "); } else if(mon<=-10&&mon>=-99){ contentValues.put("kongge3","¥ "); } else if(mon<-99&&mon>=-999){ contentValues.put("kongge3","¥ "); } else if(mon<-999&&mon>-9999){ contentValues.put("kongge3","¥ "); } else if(mon<10&&mon>0){ contentValues.put("kongge3","¥ "); } else if(mon>=10&&mon<=99){ contentValues.put("kongge3","¥ "); } else if(mon>99&&mon<=999){ contentValues.put("kongge3","¥ "); } else if(mon>999&&mon<9999){ contentValues.put("kongge3","¥ "); } contentValues.put("data", data); long result = db.insert("zhangdan", null, contentValues); return result > 0 ? true : false; } public boolean delete(String id){ int result=db.delete("zhangdan","_id=?",new String[]{id}); return result>0?true:false; } //修改数据,根据id进行修改 public boolean update(String id,String fenlei,String num,String data){ contentValues.put("_id",id); contentValues.put("kongge1", " "); contentValues.put("kongge2", " "); contentValues.put("fenlei",fenlei); contentValues.put("num",num); int mon=Integer.parseInt(num); if((mon>-10)){ contentValues.put("kongge3","¥ "); } else if(mon<=-10&&mon>=-99){ contentValues.put("kongge3","¥ "); } else if(mon<-99&&mon>=-999){ contentValues.put("kongge3","¥ "); } else if(mon<-999&&mon>-9999){ contentValues.put("kongge3","¥ "); } else if(mon<10&&mon>0){ contentValues.put("kongge3","¥ "); } else if(mon>=10&&mon<=99){ contentValues.put("kongge3","¥ "); } else if(mon>99&&mon<=999){ contentValues.put("kongge3","¥ "); } else if(mon>999&&mon<9999){ contentValues.put("kongge3","¥ "); } contentValues.put("data",data); int result=db.update("zhangdan",contentValues,"_id=?",new String[]{id}); return result>0?true:false; } //查询数据,查询表中的所有内容,将查询的内容用note的对象属性进行存储,并将该对象存入集合中。 //查询数据,查询表中的所有内容,将查询的内容用note的对象属性进行存储,并将该对象存入集合中。 public List<Zhangdan> query(){//查询所有的信息 List<Zhangdan> list = new ArrayList<Zhangdan>(); list.clear();//清空数据 //查询全部数据 Cursor cursor = db.rawQuery("select * from zhangdan" ,null); while(cursor.moveToNext()){ int sum=0; int _id = cursor.getInt(cursor.getColumnIndex("_id")); String kongge1=cursor.getString(cursor.getColumnIndex("kongge1")); String fenlei = cursor.getString(cursor.getColumnIndex("fenlei"));//获取分类 String kongge2=cursor.getString(cursor.getColumnIndex("kongge2")); String data = cursor.getString(cursor.getColumnIndex("data"));//获取日期 String kongge3=cursor.getString(cursor.getColumnIndex("kongge3")); String num = cursor.getString(cursor.getColumnIndex("num"));//获取金额 int mon=Integer.parseInt(num); sum+=mon; String a=String.valueOf(_id)+kongge1+fenlei+kongge2+num+kongge3+data; System.out.print(sum); System.out.print(a); Zhangdan zd = new Zhangdan(String.valueOf(_id),kongge1,fenlei,kongge2,num,kongge3,data); list.add(zd);//将新对象添加到list集合 } //System.out.println("数目:"+list.size()); // 最后会释放 资源 cursor.close(); return list;//将所有信息返回 } public int sum(){//查询所有的信息 List<Zhangdan> list = new ArrayList<Zhangdan>(); list.clear();//清空数据 //查询全部数据 Cursor cursor = db.rawQuery("select * from zhangdan" ,null); int sum=0; while(cursor.moveToNext()){ String num = cursor.getString(cursor.getColumnIndex("num"));//获取金额 int mon=Integer.parseInt(num); sum+=mon; } cursor.close(); return sum;//将所有信息返回 } public int out(){//查询所有的信息 List<Zhangdan> list = new ArrayList<Zhangdan>(); list.clear();//清空数据 //查询全部数据 Cursor cursor = db.rawQuery("select * from zhangdan" ,null); int out=0; while(cursor.moveToNext()){ String num = cursor.getString(cursor.getColumnIndex("num"));//获取金额 int mon=Integer.parseInt(num); while(mon<0){ out+=mon; } } cursor.close(); return out;//将所有信息返回 } public int in(){//查询所有的信息 List<Zhangdan> list = new ArrayList<Zhangdan>(); list.clear();//清空数据 //查询全部数据 Cursor cursor = db.rawQuery("select * from zhangdan" ,null); int in=0; while(cursor.moveToNext()){ String num = cursor.getString(cursor.getColumnIndex("num"));//获取金额 int mon=Integer.parseInt(num); while(mon>0){ in+=mon; } } cursor.close(); return in;//将所有信息返回 } public Zhangdan get(String data) { Zhangdan zd=new Zhangdan(); Cursor result=db.query("zhangdan",null,"data=?",new String[]{data}, null,null,null,null); if (result.getCount()==1){ result.moveToFirst(); zd.setKongge1(result.getString(1)); zd.setFenlei(result.getString(2)); zd.setKongge2(result.getString(3)); zd.setNum(result.getString(4)); zd.setKongge3(result.getString(5)); zd.setData(result.getString(6)); return zd; }else { zd.setKongge1(null); zd.setKongge2(null); zd.setKongge3(null); zd.setNum(null); zd.setFenlei(null); zd.setData(null); return zd; } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }