JDBC操作实例 前台与数据分包实例1

本文介绍了一个基于JDBC的分包实例,包括DAO、Service、Servlet和Utils层的详细分工,强调了分包在维护性和代码组织上的优势。在DAO层定义接口并实现,Service层处理业务逻辑,Servlet负责数据展现和页面跳转,Utils包包含公共方法。通过具体的分包代码示例,阐述了如何利用ResultSet和executeUpdate()方法进行数据操作。
摘要由CSDN通过智能技术生成
  1. ![这个是一个简单的分包步骤 因为easyui自带了jquery的jar包 所以不用再导入 不过还是要导入class12和g-son文件到web-inf下的lib包中 ]
    这里写图片描述
  2. 附上具体的src目录下具体的分包的规则

1.用户定义servlet类必须继承sun公司定义的HttpServlet类,该类作用
* 就是用来处理用户的请求和响应的,而类sun公司在定义时遵从了Http协议
*2.重写该类中的doget或者doPost方法,取决于页面表单中的method属性中的参数
*3.在web工程中描述用户定义的servlet类(web.xml)文件中描述,描述的目的
*是让tomcat实例化servlet或者说让容器实例化servlet类,
*该类在实际开发中称为通讯类,同时控制器(MVC)模式
*开发分层
*
*(1)数据访问层(DAO):该层的主要作用就是用来访问数据库,学习技术JDBC
*com.cissst.dao:放置的是数据访问层所有的接口
*com.cissst.daoImpI放置的是接口的实现类
*(2)业务逻辑层:(BO/Service):处理业务对象,同时拼写SQL(DAO)调用数据库访问层的方法
*com.cissst.service:放置的业务逻辑层的接口
*com.cissst.serviceImpI:放置的是业务逻辑层接口的实现类
*(3)数据展现层:(Controller):该层作用展现数据到swing组件或者html页面,同时进行相应的页面跳转,调用业务逻辑处理用户请求和相应,
* 最终返回数据到客户端,servlet技术就在此层中使用
* com.cissst.servlet:放置的是用户定义的所有的servlet类
*(4)底层数据库(oracle,mysql db2)
*
*com.cissst.utils:放置的是公共的连接数据库的类或者日期处理类,或者是文件上传下载的公共类等
*com.cissst.entity:放置的是实体类,业务对象类
*/


3.附上具体包的代码
1>.dao包下分了两个java文件 一个是自定义的接口 另一个是实现接口的方法
在此定义此包的好处是将数据操作直接和数据sql语句的操作的分隔开 尽最大的可维护性操作
在实际操作中感觉在此定义了更新数据和修改数据的接口 可以在后期的操作中添加其他的数据操作而不用在设置其他的方法 只要实现此接口重写方法就好了

package com.cissst.dao;
import java.sql.ResultSet;
public interface BasedDao {
   

    ResultSet getResult(String sql);

    int dataCUD(String sql);
}

下面的是将上述的接口实现 其实也只是返回调用的公共包的方法 不过这么做可以讲数据分开 查找错误也方便

package com.cissst.dao;
import java.sql.ResultSet;
import com.cissst.utils.DbUtils;
public class BaseDaoImpI implements BasedDao {
   

    public ResultSet getResult(String sql) {
        return DbUtils.getResultData(sql);
    }//这个方法是取得公共包下面的数据查询等方法
    @Override
    public int dataCUD(String sql) {
        return DbUtils.cudData(sql);
        //返回删除 查询的条数等方法
    }
}

2>. 下面是两个表的实体类 一般的原则是一个表对应一个实体类 但是有一点需要注意的是在后台实现各种数据操作的时候 如果需要传递某些参数 那么可以在此实体类中重新带不同参数的构造函数 同时还要注意某一个实体类A中的某项属性在另外的实体类中属于另外一个对象 那么对于这种情况就需要新建一个该实体类的对象来封装该属性 并将其再封装进A中

package com.cissst.entity;
public class Users {


    private String username;
    private String email;
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }

}
package com.cissst.entity;
public class Grade {
    private Integer id;
    private String gradeNumber;
    private String gradeName;
    private String creatTime;
    private String gradeDesc;
    private String remark;

    public Grade(String gradeNumber, String gradeName,
            String creatTime, String gradeDesc, String remark) {
        this.gradeNumber = gradeNumber;
        this.gradeName = gradeName;
        this.creatTime = creatTime;
        this.gradeDesc = gradeDesc;
        this.remark = remark;
    }

    public Grade() {

    }
    public Integer getId() {
        return id;
    }

    public String getGradeNumber() {
        return gradeNumber;
    }
    public void setGradeNumber(String gradeNumber) {
        this.gradeNumber = gradeNumber;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getGradeName() {
        return gradeName;
    }
    public void setGradeName(String gradeName) {
        this.gradeName = gradeName;
    }
    public String getCreatTime() {
        return creatTime;
    }
    public void setCreatTime(String creatTime) {
        this.creatTime = creatTime;
    }
    public String getGradeDesc() {
        return gradeDesc;
    }
    public void setGradeDesc(String gradeDesc) {
        this.gradeDesc = gradeDesc;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
}

3>.service 也就做逻辑层 该层主要自定义了后台取得各种数据所需要的各种接口 该接口实际就是通过调用dao包下的方法从公共类中调用已经写好的SQL的查询 插入 删除等操作的方法 dao包就是起到了相当于隔离层的效果 或许现在还会觉得很是累赘 但是当所需要实现的方法复杂之后 就会越发的觉得这种方法的便利性 所以做好从学习jdbc的最初开始建立起良好的习惯

package com.cissst.service;
import java.util.List;
import com.cissst.entity.Grade;
public interface BaseService {
   


    boolean login(String username,String email);


    List<Grade>findGradeAllInfo();

    int saveGradeInfo(Grade grade);

    int deleteGradeInfo(int id);

    int updateGradeInfo(Grade grade);

    Grade getGradeInfo(int id);


}

下面实现的接口的方法 注意 在这里适用了ResultSet方法 在sql中的ResultSet方法 中有一个next()方法
该方法类似于iterator遍历方法中的hasNext() 当有下一个值时返回true 还有一个要注意的地方就是删除
查询时需要返回的条数哪里 运用的是executeUpdate()方法 该方法会返回sql语句最终所操作的具体条数
这样就可以写出当sql正确时返回操作的条数 如果不正确 那么返回0 同时前台通过返回的0进行if的条件判断

package com.cissst.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.cissst.dao.BaseDaoImpI;
import com.cissst.dao.BasedDao;
import com.cissst.entity.Grade;
public class BaseServiceImpI implements BaseService {
   
    @Override
    public Grade getGradeInfo(int id) {
        ResultSet rs=basedDao.getResult("select * from tbGrade where id="+id);
        Grade grade=new Grade();
        try {
            if(rs.next()){
                grade.setId(rs.getInt("id"));
                grade.setCreatTime(rs.getString("G_CREATTIME"));
                grade.setGradeDesc(rs.getString("G_DESC"));
                grade.setGradeName(rs.getString("G_NAME"));
                grade.setRemark(rs.getString("G_REMARK"));
                grade.setGradeNumber(rs.getString("G_NUMBER"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return grade;
    }
    private BasedDao basedDao=new BaseDaoImpI();
    public boolean login(String username, String email) {
        ResultSet rs=basedDao.getResult("select * from tbUsers where username='"+username+"' and email='"+email+"'");
        try {
            while(rs.next()){
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
        return false;
    }
    public List<Grade> findGradeAllInfo() {
        List<Grade> list=new ArrayList<Grade>();
        ResultSet rs=basedDao.getResult("select * from tbGrade order by  id desc");
        try {
            while(rs.next()){
                Grade grade=new Grade();
                grade.setId(rs.getInt("id"));
                grade.setCreatTime(rs.getString("G_CREATTIME"));
                grade.setGradeDesc(rs.getString("G_DESC"));
                grade.setGradeName(rs.getString("G_NAME"));
                grade.setRemark(rs.getString("G_REMARK"));
                grade.setGradeNumber(rs.getString("G_NUMBER"));
                list.add(grade);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }
    @Override
    public int saveGradeInfo(Grade grade) {
        try {
            String SQL="insert into tbgrade(id,g_name,g_desc,g_creattime,g_remark,g_number)" +
                    "values(GRADE_SEQ.NEXTVAL,'"+grade.getGradeName()+
                    "','"+grade.getGradeDesc()+"','"+grade.getCreatTime()+
                    "','"+grade.getRemark()+"','"+grade.getGradeNumber()+"')";
            return basedDao.dataCUD(SQL);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }
    @Override
    public int deleteGradeInfo(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值