数据库案例18、19、20

学生管理系统:

GUI 控制 数据库

dao:->表=实体

视图:XML sqlite

controller serverice

package com.imau.conste;

const:

public class Const {

public final static String  TABLE="student";
public final static String  DB="studentInfo.db";
public final static int  VERSION=1;
//主键
public final static String ID="_id";
//姓名
public final  static String SNAME="sname";
//学号
public final static String SNO="sno";
//性别
public final static String SEX="sex";
//图片
public final static String IMG="img";

}

student:

package com.imau.entity;

/**

  • 与数据表对应:sql` 对象
    */
    public class Student {

    //主键
    private long _id;
    //姓名
    private String sname;
    //学号
    private String sno;
    //性别
    private String sex;

    private int img;

    public Student( String sname, String sno, String sex,int img) {

     this.sname = sname;
     this.sno = sno;
     this.sex = sex;
     this.img=img;
    

    }

    public Student( long _id,String sname, String sno, String sex,int img) {

     this._id=_id;
     this.sname = sname;
     this.sno = sno;
     this.sex = sex;
     this.img=img;
    

    }

    public Student() {

    }

    public void setImg(int img) {
    this.img = img;
    }

    public int getImg() {
    return img;
    }

    public void set_id(long _id) {
    this._id = _id;
    }

    public void setSname(String sname) {
    this.sname = sname;
    }

    public void setSno(String sno) {
    this.sno = sno;
    }

    public void setSex(String sex) {
    this.sex = sex;
    }

    public long get_id() {
    return _id;
    }

    public String getSname() {
    return sname;
    }

    public String getSno() {
    return sno;
    }

    public String getSex() {
    return sex;
    }

    @Override
    public String toString() {
    return “Student{” +
    “_id=” + _id +
    “, sname=’” + sname + ‘’’ +
    “, sno=’” + sno + ‘’’ +
    “, sex=’” + sex + ‘’’ +
    “, img=” + img +
    ‘}’;
    }
    }

DB:

package com.imau.dao;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.imau.conste.Const;

public class DBHelper extends SQLiteOpenHelper {

public DBHelper(Context context) {

    this(context, Const.DB, null, Const.VERSION);
}

/**
 *
 * @param context:用于创建数据库上下文
 * @param name:数据库名称
 * @param factory:用户创建Cursor工厂
 * @param version:数据库版本
 */
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, name, factory, version);
}

//初始化数据库:只调用1次;创建表:sql命令
@Override
public void onCreate(SQLiteDatabase db) {

    //id

    String sql="create table if not exists "+Const.TABLE+"(_id integer primary key autoincrement, sname text,sno text,sex text,img integer) ";
    db.execSQL(sql);

    // insert into user(name,age)values('AAA',20);
    db.execSQL("insert into "+Const.TABLE+"(sname,sno,sex,img)values('AAA','2018001','男',0)");
    db.execSQL("insert into "+Const.TABLE+"(sname,sno,sex,img)values('BBB','2018002','女',0)");

    System.out.println("数据库初始化完毕...");    }

//数据库版本更新
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    //1.删除
    //2.重新初始化


}

//降级
@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    super.onDowngrade(db, oldVersion, newVersion);
}

}

studentDao:

package com.imau.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.imau.conste.Const;
import com.imau.entity.Student;

import java.util.ArrayList;
import java.util.List;

/**

  • 学生对象数据操作
    */

public class StudentDao {

private DBHelper helper;

private Context context;

private SQLiteDatabase db;

//参数是什么?
public StudentDao(Context context){
    helper=new DBHelper(context);
    this.context=context;
}

//增
public boolean add(Student student){
    //1.获取数据库
    db=helper.getWritableDatabase();
    //2.执行操作
    ContentValues values=new ContentValues();
    values.put(Const.SNAME,student.getSname());
    values.put(Const.SNO,student.getSno());
    values.put(Const.SEX,student.getSex());
    values.put(Const.IMG,student.getImg());
    long a=db.insert(Const.TABLE,null,values);

    db.close();

    return a > 0 ? true:false;
}

//删
public boolean del(long id){
//1.获取数据库
db=helper.getWritableDatabase();

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

    db.close();
    return a > 0 ? true:false;
}

//按照主键查询一个学生
public Student findById(long id){
    //1.获取数据库
    db=helper.getReadableDatabase();

    Cursor cr= db.query(Const.TABLE,null,"_id = ? ",new String[]{""+id},null,null,null,null);

    //定位到数据第一条数据
    cr.moveToFirst();

    if(cr!=null){

       long _id=cr.getInt(0);
       String sname=cr.getString(1);
       String sno=cr.getString(2);
       String sex=cr.getString(3);
       int img=cr.getInt(4);
       Student student=new Student(_id,sname,sno,sex,img);

       return student;

    }

    cr.close();
    db.close();
    return  null;
}

//按照字段
public List<Student> queryAll(Object field){

    //利用反射

    return null;
}


//查询学生按照页码 1,12 1-12;(pageNo-1)*pageSize-pageNo*pageSize
public List<Student> queryAll(int pageNo,int pageSize){

    List<Student> list=new ArrayList<>();

    //1.获取数据库
    db=helper.getWritableDatabase();

    String limit= (pageNo-1)*pageSize+","+pageNo*pageSize;
    Cursor cr= db.query(Const.TABLE,null,null,null,null,null,null,limit);
    cr.moveToFirst();
    if(cr!=null){


        while(cr.moveToNext()){
            long _id=cr.getInt(0);
            String sname=cr.getString(1);
            String sno=cr.getString(2);
            String sex=cr.getString(3);
            int img=cr.getInt(4);

            Student student=new Student(_id,sname,sno,sex,img);
            list.add(student);
        }
        return list;

    }
    cr.close();
    db.close();
    return null;
}



//查询所有学生
public List<Student> queryAll(){


    List<Student> list=new ArrayList<>();

    //1.获取数据库
    db=helper.getWritableDatabase();

    Cursor cr= db.query(Const.TABLE,null,null,null,null,null,null,null);
    cr.moveToFirst();
    if(cr!=null){


        while(cr.moveToNext()){
            long _id=cr.getInt(0);
            String sname=cr.getString(1);
            String sno=cr.getString(2);
            String sex=cr.getString(3);
            int img=cr.getInt(4);

            Student student=new Student(_id,sname,sno,sex,img);
            list.add(student);
        }
        return list;

    }
    cr.close();
    db.close();
    return  null;
}

//改
public boolean update(Student student){

    //1.获取数据库
    db=helper.getWritableDatabase();
    //2.执行操作
    ContentValues values=new ContentValues();
    values.put(Const.SNAME,student.getSname());
    values.put(Const.SNO,student.getSno());
    values.put(Const.SEX,student.getSex());
    values.put(Const.IMG,student.getImg());
    long a=db.update(Const.TABLE,values,"_id = ? ",new String[]{""+student.get_id()});

    db.close();

    return a > 0 ? true:false;

}

}

Mainactivity:
package com.imau.sqlitdemo;

import android.app.Dialog;
import android.os.Bundle;

import com.imau.Adapter.StudentAdapter;
import com.imau.Dialog.MyDialog;
import com.imau.controller.StudentController;
import com.imau.entity.Student;

import androidx.appcompat.app.AppCompatActivity;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.List;

public class MainActivity extends AppCompatActivity {

private StudentController controller;

private ListView listView;

private StudentAdapter adapter;

private List<Student> stus;

private ImageView add;

private int pageNo=1;

private void init(){
    add=findViewById(R.id.add);
    add.setOnClickListener(new MyListener());
    controller=new StudentController(MainActivity.this);
    listView=findViewById(R.id.lv);
    stus=controller.queryStudetAll(pageNo,20);
    adapter=new StudentAdapter(MainActivity.this,R.layout.stu_layout,stus);
    listView.setAdapter(adapter);
    //分页动态加载事件
    listView.setOnScrollListener(new MyListener());

}

class MyListener implements View.OnClickListener,AbsListView.OnScrollListener{

    @Override
    public void onClick(View v) {

        if(v.getId()==R.id.add){
            MyDialog dialog=null;
            //1.创建对话框
            MyDialog.Builder builder=new MyDialog.Builder(MainActivity.this,null);

            builder.setPositiveButton("确定", new MyDialog.OnClickListener() {
                @Override
                public void onClick(Dialog dialog, Student student) {

                    //学生修改事件;对话框里面值 传给适配器
                    if(controller.addStudent(student)){
                        System.out.println(student);
                        Toast.makeText(MainActivity.this,"添加成功!",Toast.LENGTH_LONG).show();

                    }else{
                        Toast.makeText(MainActivity.this,"添加失败!",Toast.LENGTH_LONG).show();
                    }


                  dialog.cancel();
                   //数据更新
                    adapter.add(student);
                    adapter.notifyDataSetChanged();
                }
            });
            dialog=builder.create();
            dialog.show();

        }
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {

        if(scrollState==0){
            pageNo++;
            //加载数据
            adapter.addAll( controller.queryStudetAll(1,20));
            adapter.notifyDataSetChanged();
        }


    }

    @Override
    //第一条能看见数据,看见数据条数,总条数
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

    }
}



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

}

StudentAdapter:

package com.imau.Adapter;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.imau.Dialog.MyDialog;
import com.imau.controller.StudentController;
import com.imau.entity.Student;
import com.imau.sqlitdemo.R;

import java.util.ArrayList;
import java.util.List;

/**

  • 自定义适配器:装载数据,业务事件处理
    */
    public class StudentAdapter extends ArrayAdapter {

    //成员:布局文件ID
    private final int resource;

    private Context context;

    public StudentAdapter(Context context, int resource, List objects) {
    super(context,resource,objects);
    this.context=context;
    this.resource = resource;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

     //代表自定义布局文件
     final View view;
     final ImageView img;
     final TextView sname;
     final  TextView sno;
     final  TextView sex;
     final  TextView pid;
     final ImageView update;
     final ImageView detele;
    
     if (convertView == null) {
         view = LayoutInflater.from(getContext()).inflate(resource, parent, false);
     } else {
         view = convertView;
     }
     //自定布局文件组件初始化
     img=view.findViewById(R.id.img);
     sname=view.findViewById(R.id.sname);
     sno=view.findViewById(R.id.sno);
     sex=view.findViewById(R.id.sex);
     pid=view.findViewById(R.id.pid);
     update=view.findViewById(R.id.update);
     detele=view.findViewById(R.id.delete);
     //填充值
     final Student stu=getItem(position);
    
     sname.setText(stu.getSname());
     sno.setText(stu.getSno());
     sex.setText(stu.getSex());
     pid.setText(""+stu.get_id());
    
     img.setImageResource(stu.getImg());
    
     update.setOnClickListener(new MyListener(stu));
    
     detele.setOnClickListener(new MyListener(stu));
    
     return view;
    

    }

    class MyListener implements View.OnClickListener{

     private Student student;
    
     private StudentController controller;
    
     public MyListener(Student student){
         this.student=student;
         controller=new StudentController(context);
     }
    
    
     private void closeDialog(Dialog dialog){
    
         dialog.cancel();
         //数据改变List 更新对象;数据全部清空,重新查询; 先删除后添加
         clear();
         addAll(controller.queryStudetAll());
         notifyDataSetChanged();
     }
    
     @Override
     public void onClick(View v) {
    
         if(v.getId()==R.id.delete){
             //1.创建对话框
             AlertDialog.Builder builder=new AlertDialog.Builder(context);
             builder.setTitle("删除学生");
             builder.setMessage("确定删除学生信息吗?");
             builder.setPositiveButton("确定",new DialogInterface.OnClickListener(){
    
                 @Override
                 public void onClick(DialogInterface dialog, int which) {
    
                     if(controller.delStudent(student.get_id())){
                         Toast.makeText(context,"删除成功!",Toast.LENGTH_LONG).show();
                     }else{
                         Toast.makeText(context,"删除失败!",Toast.LENGTH_LONG).show();
                     }
    
                     //删除适配器中的数据
                     remove(student);
                     //数据改变
                     notifyDataSetChanged();
                 }
             });
             builder.setNegativeButton("取消",null);
             AlertDialog dialog=builder.create();
             dialog.show();
    
         }
    
         if(v.getId()==R.id.update){
    
             MyDialog dialog=null;
             //1.创建对话框
             MyDialog.Builder builder=new MyDialog.Builder(context,student);
    
             builder.setPositiveButton("确定", new MyDialog.OnClickListener() {
                 @Override
                 public void onClick(Dialog dialog,Student student) {
    
                     //学生修改事件;对话框里面值 传给适配器
                     if(controller.updateStudent(student)){
    
                         System.out.println(student);
    
                         Toast.makeText(context,"修改成功!",Toast.LENGTH_LONG).show();
    
                     }else{
                         Toast.makeText(context,"修改失败!",Toast.LENGTH_LONG).show();
                     }
    
                     closeDialog(dialog);
                 }
             });
    
             dialog=builder.create();
    
             dialog.show();
         }
    
    
     }
    

    }
    }

MyDialog:

package com.imau.Dialog;

import android.app.Dialog;
import android.content.Context;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.imau.entity.Student;
import com.imau.sqlitdemo.R;

public class MyDialog extends Dialog {

public MyDialog(@NonNull Context context) {
    super(context);
}



//当创建对话框自动调用;初始化自定义属性;设置
@Override
public void create() {
    super.create();

}

//定义内部类Builder;
public static class Builder {

    //自定义布局文件的组件
    private Button yesButton;
    private Button noButton;
    //学生信息属性
    private ImageView img;
    private TextView sname;
    private  TextView sno;
    private  TextView sex;
    private  TextView pid;
    //基本属性
    private Context context;
    private Student student;
    //定义事件监听器
    private MyDialog.OnClickListener yesListener;
    private MyDialog.OnClickListener noListener;

   //按钮标题
    private String yesText;
    private String noText;


    public Builder(@NonNull Context context,Student student) {

        this.context=context;
        this.student=student;
    }



    public Builder setPositiveButton(String text, final MyDialog.OnClickListener listener) {
        this.yesText =text;
        this.yesListener = listener;
        return this;
    }

    public Builder setNegativeButton(String text, final MyDialog.OnClickListener listener) {
        this.noText = text;
        this.noListener = listener;
        return this;
    }



    private void initView(View view, final Dialog dialog){
        //设置组件
        this.sname=view.findViewById(R.id.sname1);
        this.sno=view.findViewById(R.id.sno1);
        this.sex=view.findViewById(R.id.sex1);
        this. pid=view.findViewById(R.id.pid1);

        this.yesButton=view.findViewById(R.id.yes);
        this.noButton=view.findViewById(R.id.no);

         //初始化控件属性值
        if(student!=null){
            sname.setText(student.getSname());
            sno.setText(student.getSno());
            sex.setText(student.getSex());
            pid.setText(""+student.get_id());
        }

        //设置按钮事件处理
        if(yesListener!=null){

            yesButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    yesListener.onClick(dialog,initStudent());
                }
            });
        }

        if(noListener!=null){
            noButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    noListener.onClick(dialog,initStudent());
                }
            });
        }

        //设置取消按钮文本
        if(noText!=null){
            noButton.setText(this.noText);
        }
        //设置确定按钮文本
        if(yesText!=null){
            yesButton.setText(this.yesText);
        }

        //没有设置取消按钮,不显示
        if(noText==null){

            noButton.setVisibility(View.GONE);
        }
        //
        if(yesText==null){

            yesButton.setVisibility(View.GONE);
        }

    }


    private Student initStudent(){

        Student student2=new Student();

        if(!pid.getText().toString().equals("")) {

             student2.set_id(Long.parseLong(pid.getText().toString()));

        }
        student2.setSname(sname.getText().toString());
        student2.setSno(sno.getText().toString());
        student2.setSex(sex.getText().toString());
        return student2;

    }

    public MyDialog create() {

        final MyDialog dialog = new MyDialog(this.context);

        //自定义布局文件:布局文件加载器
        LayoutInflater inflater =
                (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        //布局文件
        View view=inflater.inflate(R.layout.student_layout,null);

        //将自定义的对话框布局页面加载到内容视图上。
        dialog.addContentView(view, new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));


        /*
         * 将对话框的大小按屏幕大小的百分比设置
         */
        WindowManager m = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

        Window dialogWindow = dialog.getWindow();

        Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用

        WindowManager.LayoutParams p = dialog.getWindow().getAttributes(); // 获取对话框当前的参数值

        p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.6
        p.width = (int) (d.getWidth() * 0.9); // 宽度设置为屏幕的0.95

        dialogWindow.setAttributes(p);

        initView(view,dialog);

        return dialog;
    }
}

//定义内部接口:按钮事件的处理用的
public interface OnClickListener{

    void onClick(Dialog dialog,Student student);

}

}
service:
package com.imau.service;

public class StudentService {
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码下载:完整代码,可直接运行 ;运行版本:2022a或2019b或2014a;若运行有问题,可私信博主; **仿真咨询 1 各类智能优化算法改进及应用** 生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化 **2 机器学习和深度学习方面** 卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断 **3 图像处理方面** 图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知 **4 路径规划方面** 旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化 **5 无人机应用方面** 无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配 **6 无线传感器定位及布局方面** 传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化 **7 信号处理方面** 信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化 **8 电力系统方面** 微电网优化、无功优化、配电网重构、储能配置 **9 元胞自动机方面** 交通流 人群疏散 病毒扩散 晶体生长 **10 雷达方面** 卡尔曼滤波跟踪、航迹关联、航迹融合

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值