Android增刪改查的使用(小組項目)


先看下運行結果

長按會出現一個對話框

第一步:把兩個布局畫好


第二步:來看下代碼部分(創建表、數據庫)

//創建數據庫,創建表
public class DBHelper extends SQLiteOpenHelper{
    private static final String DB="course.db";//數據庫名
    private static final int V=1;//數據庫版本
    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
    public DBHelper(Context context){
        super(context,DB,null,V);
        /**
         * 第一個參數:上下文
         * 第二個參數:數據庫名
         * 第三個參數:創建數據庫的工廠方法
         * 第四個參數:數據庫版本
         * */
    }
    @Override
    //創建表
    public void onCreate(SQLiteDatabase sqLiteDatabase) {//表名:course                       字段:EditName String,teacher String,Xs String,Xf String
       sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS course(_id INTEGER PRIMARY KEY AUTOINCREMENT, EditName String,teacher String,Xs String,Xf String)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    }
}

第二步:實體類用於承載數據

public class CourseDataBean implements Serializable {
    private String editName;
    private String teacher, xs, xf;
    public String getEditName() {return editName;}
    public void setEditName(String editName) {
        this.editName = editName;
    }
    public String getTeacher() {
        return teacher;
    }
    public void setTeacher(String teacher) {this.teacher = teacher;}
    public String getXs() {
        return xs;
    }
    public void setXs(String xs) {
        this.xs = xs;
    }
    public String getXf() {
        return xf;
    }
    public void setXf(String xf) {
        this.xf = xf;
    }
}

第三步:主要是對數據進行數據的增刪改查操作,是基於DBelper類來操作。

public class DBManager {
    private SQLiteDatabase db;
    private DBHelper mDBHelper;
    private CourseDataBean course;

    public DBManager(Context context) {
        mDBHelper = new DBHelper(context);//實例化類
        db = mDBHelper.getWritableDatabase();//對數據進行操作
    }

    /**
     * 添加數據向CourseDataBean類中插入數據
     */
    public void addData(CourseDataBean course){
        db.beginTransaction();//開啟事務
        try {
            db.execSQL("INSERT INTO course(editName, teacher, xs, xf) VALUES(?,?,?,?)",new Object[]{course.getEditName(),course.getTeacher(),course.getXs(),course.getXf()});
            db.beginTransaction();//事務成功
        }finally {
            db.endTransaction();//結束事務
        }
    }
    /**
     * 修改數據
     * ContentValues:是一個類
     */
    public void changeData(String oldCoureName ,String editName,String teacher,String xs,String xf){
        ContentValues cv=new ContentValues();//實例化類
        cv.put("editName",editName);//添加要更改的字段及內容
        cv.put("teacher",teacher);
        cv.put("xs",xs);
        cv.put("xf",xf);
        //執行修改
        db.update("course",cv,"editName=?",new String[]{oldCoureName});
    }
    /**
     * 通過name來刪除數據
     */
    public void delData(String editName){
            String[] arg={editName};
        db.delete("course","editName=?",arg);
    }
    /**
     * 執行SQL命令返回list,
     *  ArrayList<CourseDataBean>集合
     */
    public  ArrayList<CourseDataBean> info() {
        //集合        泛型類
        ArrayList<CourseDataBean> list = new ArrayList<CourseDataBean>();
        //游標                   查詢 全部字段在這張表中 第二個參數:查詢的條件
        Cursor c = db.rawQuery("select * from course", null);
        while (c.moveToNext()) {
            //new一個對象
            course = new CourseDataBean();
            /**
             * 從CourseDataBean讀取數據,並且把數據放到course對象中
             * c.getColumnIndex("courseName"):獲取到CourseDataBean的值的下標
             * c.getString(c.getColumnIndex("courseName")):獲取到它的值
             * */
            course.setEditName(c.getString(c.getColumnIndex("EditName")));
            course.setTeacher(c.getString(c.getColumnIndex("teacher")));
            course.setXs(c.getString(c.getColumnIndex("Xs")));
            course.setXf(c.getString(c.getColumnIndex("Xf")));
            list.add(course);
    }
        c.close();
        return list;
    }
    public void closeDB(){db.close();}
}

第四步:也是最后一步,就是對主布局進行寫

    private Button btn_add;
    private EditText et_EditName;
    private ListView listView;
    private DBManager manager;
    private CourseDataBean bean;
    private DBHelper helper;
    private EditText dialogEditName, dialogEditTeacher, dialogEditXs, dialogEditXf;
    private Context context;
    private List<CourseDataBean> datas;//集合
    private int position;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = MainActivity.this;
        manager = new DBManager(context);
        bean = new CourseDataBean();//實例化
        init();
    }

    private void init() {
        //主布局控件的實例化
        btn_add = (Button) findViewById(R.id.add);
        btn_add.setOnClickListener(this);
        et_EditName = (EditText) findViewById(R.id.EditName);
        listView = (ListView) findViewById(R.id.listView);
        //ListView的點擊事件
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                //創建對話框,添加一個布局
                View view1 = View.inflate(context, R.layout.layout, null);
                //承載對話框
                builder.setView(view1);
                position = i;
                //對話框中的控件的實例化
                dialogEditName = (EditText) view1.findViewById(R.id.dialog_EditName);
                dialogEditTeacher = (EditText) view1.findViewById(R.id.dialog_EditTeacher);
                dialogEditXf = (EditText) view1.findViewById(R.id.dialog_EditXf);
                dialogEditXs = (EditText) view1.findViewById(R.id.dialog_EditXs);

                //datas.get(i).getCourseName():從這個位置找到這個值賦給控件
                dialogEditName.setText(datas.get(i).getEditName());
                dialogEditTeacher.setText(datas.get(i).getTeacher());
                dialogEditXs.setText(datas.get(i).getXs());
                dialogEditXf.setText(datas.get(i).getXf());
                //取消
                builder.setNeutralButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();
                    }
                });
                //刪除
                builder.setNegativeButton("刪除", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //數據庫調用這個方法,
                        manager.delData(dialogEditName.getText().toString());
                        Toast.makeText(MainActivity.this, "刪除成功", Toast.LENGTH_SHORT).show();
                        //方法的作用:是為了顯示到ListView列表上
                        adapter1();
                        //對話框退出
                        dialogInterface.dismiss();
                    }
                });
                //保存(修改)
                builder.setPositiveButton("保存", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //在這個集合中找到要修改的名字賦給name
                        String name = datas.get(position).getEditName();
                        //調用這個方法
                        manager.changeData(name, dialogEditName.getText().toString(), dialogEditTeacher.getText().toString(), dialogEditXs.getText().toString(), dialogEditXf.getText().toString());
                        adapter1();
                        dialogInterface.dismiss();
                    }
                });
                //創建數據庫並show出來
                builder.create().show();
            }
        });
    }
    //添加
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.add:
                CourseDataBean c = new CourseDataBean();//實例化對象
                //給對話框中的EditText控件賦值
                c.setEditName(et_EditName.getText().toString());
                c.setXf("默認");
                c.setXs("默認");
                c.setTeacher("默認");
                manager.addData(c);//添加到方法中
                Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();
                adapter1();
                break;
        }
    }

    private void adapter1() {
        datas = manager.info();//取出數據庫里面胡數據
        //數據源//創建一個集合
        List<String> data = new ArrayList<>();
        for (int i = 0; i < datas.size(); i++) {
            data.add(datas.get(i).getEditName());
        }
        //創建一個數據庫
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_expandable_list_item_1, data);
        //與ListView列表綁定並將數據加載到列表上
        listView.setAdapter(adapter);
    }
}

結束啦!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM