day038-039 商品增删改查、批量删除和多条件查询综合案例

1 查询所有商品流程分析

01引导页与商品列表查询页的流程分析.png

2 删除所选商品流程分析

02根据pid删除商品信息的流程分析.png

3 修改所选商品流程分析

03根据pid修改商品信息的流程分析.png

4 添加商品流程分析

04商品添加功能流程分析.png

(插播:反射与工具类抽取)

反射

反射方法的简单回顾.png

工具类抽取

工具类抽取的流程分析.png

工具类抽取举例:

MyBaseSerlvet.java

import java.io.IOException;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
 * 这个类就是我们要抽取的工具类,专门用于反射子类中的方法,并执行子类中的方法;
 */
public class MyBaseSerlvet extends HttpServlet{
    //tocmat会调用子类的service方法,如果子类中没有service,自动会找到这个类中的service方法,并执行
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1:获取浏览器传递过来的方法名
        String methodName = req.getParameter("m");
        //2:获取子类的字节码文件对象
        //System.out.println(this);
        Class c = this.getClass();
        //3:从c中获取methodName方法
        try {
            Method m=c.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
            //4:让m执行起来
            String s=(String) m.invoke(this,req,resp);
            //5:判断子类是否返回了一个要转发的路径,如果有路径,帮子类转发,否则什么也不做
            if(s!=null){
                req.getRequestDispatcher(s).forward(req, resp);
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("工具类运行错误,请检查是否传递了方法名!!!或其他异常!");
        } 
    }

}

AServlet.java

import java.io.IOException;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AServlet
 */
public class AServlet extends MyBaseSerlvet {
    public void a(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("子类的a方法执行了...");
    }
    public void b(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("子类的b方法执行了...");
    }
    public void c(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("子类的c方法执行了...");
    }
}

BServlet.java

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
 */
public class BServlet extends MyBaseSerlvet {
    public String abc(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("bservlet的abc方法执行了...");
        //转发的index.jsp
        return "/index.jsp";
    }

}

6 批量删除流程分析

01.批量删除的流程分析.png

7 多条件查询流程分析

02.多条件查询的流程分析.png

多条件查询dao层的固定套路:

//7:多条件查询商品的方法
    public List<Product> findProductByTiaoJian(String pn, String pdesc) throws SQLException {
        //1:创建sql执行者
        QueryRunner q = new QueryRunner(MyC3P0Utils.getDataSource());
        //2:编写sql语句
        String sql = "select * from product where 1=1 ";
        //3:准备参数与结果集;
        List<String> params = new ArrayList<>();
        if(pn!=null&&pn.trim().length()>0){
            sql+=" and pname like ?";
            params.add("%"+pn+"%");
        }
        if(pdesc!=null&&pdesc.trim().length()>0){
            sql+=" and pdesc like ?";
            params.add("%"+pdesc+"%");
        }
        BeanListHandler rsh = new BeanListHandler(Product.class);
        //4:执行sql处理结果
        return q.query(sql, rsh, params.toArray());
    }

8 分页查询

8.1 分页PageBean工具类:类的抽取与分页关键字介绍

MySQL方言:limit关键字

#举例:每页显示5条,显示第3页;
SELECT * FROM product LIMIT 10,5;
#说明:5表示每页显示5条,10表示第3页的第一条数据的索引为10(第一页索引从0开始)

自己写一个分页工具类MyPageBean.java

import java.util.List;

/*
 * 分页工具类,可以进行任意数据的分页查询时,使用
 */
public class MyPageBean<T>{
    private int pageNumber;// 当前页码值,需要用户在浏览器传递;默认1;
    private int pageSize;// 每页显示条数,可以让用户在浏览器传递;也可以程序员直接写死,开发中常用的是浏览器传递;
    
    private int totalCount;//数据库中数据的总数量;从数据库查询;
    private int totalPage;//总页数,直接使用总数量和每页显示数量,计算即可得到;
    private int startIndex;//数据库中数据的起始索引,根据当前页和每页显示数量,计算得到;
    //当前页中的数据
    private List<T> list;
    public List<T> getList() {
        return list;
    }
    public void setList(List<T> list) {
        this.list = list;
    }
    public int getPageNumber() {
        return pageNumber;
    }
    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getTotalCount() {
        return this.totalCount;
    }
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }
    //计算总页数
    public int getTotalPage() {
        return totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;
    }
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
    public int getStartIndex() {
        return (pageNumber-1)*pageSize;
    }
    public void setStartIndex(int startIndex) {
        this.startIndex = startIndex;
    }
    public MyPageBean(int pageNumber, int pageSize) {
        super();
        this.pageNumber = pageNumber;
        this.pageSize = pageSize;
    }
    public MyPageBean() {
        super();
        // TODO Auto-generated constructor stub
    }
    @Override
    public String toString() {
        return "MyPageBean [pageNumber=" + pageNumber + ", pageSize=" + pageSize + ", totalCount=" + totalCount
                + ", totalPage=" + totalPage + ", startIndex=" + startIndex + ", list=" + list + "]";
    }
}

8.2 分页查询流程分析

03.分页查询流程分析.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,你可以按照以下步骤来实现: 1. 首先,创建一个 Android Studio 项目。 2. 在项目中创建一个数据库表,用于存储课程信息。例如,可以创建一个名为 "course" 的表,包含以下列: - id:用于唯一标识每个课程。 - name:课程名称。 - day:上课日期。 - time:上课时间。 - location:上课地点。 3. 在项目中创建一个 DBHelper 类,用于连接数据库和执行 SQL 语句。可以参考以下代码: ``` public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "Course.db"; private static final int DATABASE_VERSION = 1; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE course (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, day TEXT, time TEXT, location TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS course"); onCreate(db); } } ``` 4. 在 Activity 中创建增删的方法,可以参考以下代码: ``` public class MainActivity extends AppCompatActivity { private EditText mNameEditText; private EditText mDayEditText; private EditText mTimeEditText; private EditText mLocationEditText; private TextView mDisplayTextView; private DBHelper mDBHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mNameEditText = findViewById(R.id.name_edit_text); mDayEditText = findViewById(R.id.day_edit_text); mTimeEditText = findViewById(R.id.time_edit_text); mLocationEditText = findViewById(R.id.location_edit_text); mDisplayTextView = findViewById(R.id.display_text_view); mDBHelper = new DBHelper(this); } public void addCourse(View view) { SQLiteDatabase db = mDBHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", mNameEditText.getText().toString()); values.put("day", mDayEditText.getText().toString()); values.put("time", mTimeEditText.getText().toString()); values.put("location", mLocationEditText.getText().toString()); long id = db.insert("course", null, values); mDisplayTextView.setText("Added course with ID " + id); } public void updateCourse(View view) { SQLiteDatabase db = mDBHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", mNameEditText.getText().toString()); values.put("day", mDayEditText.getText().toString()); values.put("time", mTimeEditText.getText().toString()); values.put("location", mLocationEditText.getText().toString()); int count = db.update("course", values, "id=?", new String[] {String.valueOf(id)}); mDisplayTextView.setText("Updated " + count + " courses"); } public void deleteCourse(View view) { SQLiteDatabase db = mDBHelper.getWritableDatabase(); int count = db.delete("course", "id=?", new String[] {String.valueOf(id)}); mDisplayTextView.setText("Deleted " + count + " courses"); } public void viewCourses(View view) { SQLiteDatabase db = mDBHelper.getReadableDatabase(); Cursor cursor = db.query("course", null, null, null, null, null, null); StringBuilder builder = new StringBuilder(); while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("id")); String name = cursor.getString(cursor.getColumnIndex("name")); String day = cursor.getString(cursor.getColumnIndex("day")); String time = cursor.getString(cursor.getColumnIndex("time")); String location = cursor.getString(cursor.getColumnIndex("location")); builder.append("ID: ").append(id).append("\n") .append("Name: ").append(name).append("\n") .append("Day: ").append(day).append("\n") .append("Time: ").append(time).append("\n") .append("Location: ").append(location).append("\n\n"); } mDisplayTextView.setText(builder.toString()); } } ``` 5. 最后,创建一个布局文件,包含增删所需的 EditText 和 Button,以及显示查询结果的 TextView。 以上就是一个简单的课程表应用程序的实现步骤。需要注意的是,这只是一个简单的示例,可以根据需求进行修和扩展。同时,需要在 AndroidManifest.xml 文件中声明数据库访问权限: ``` <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值