实现父类别,子类别
来源:互联网 发布:数据质量图 编辑:程序博客网 时间:2024/05/08 18:15
添加根类别
//添加顶级节点
if(action != null && action.trim().equals("add")) {
String name = request.getParameter("name");
String descr = request.getParameter("descr");
Category c = new Category();
c.setPid(0);
c.setName(name);
c.setDescr(descr);
c.setGrade(1);
CategoryService service = CategoryService.getInstance();
//调用方法
service.add(c);
out.println("类别添加成功!恭喜!");
return;
}
//添加子类别
int pid = Integer.parseInt(request.getParameter("pid"));
int grade = Integer.parseInt(request.getParameter("grade"));
if(action != null && action.trim().equals("add")) {
String name = request.getParameter("name");
String descr = request.getParameter("descr");
Category c = new Category();
c.setPid(pid);
c.setName(name);
c.setDescr(descr);
c.setGrade(grade + 1);
CategoryService service = CategoryService.getInstance();
service.add(c);
out.println("类别添加成功!恭喜!");
return;
public void add(Category c) {
Connection conn = DB.getConn();
try {
//不自动提交
conn.setAutoCommit(false);
} catch (SQLException e1) {
e1.printStackTrace();
}
String sql = "insert into category values (null, ?, ?, ?, ?, ?)";
PreparedStatement pstmt = DB.prepare(conn, sql);
try {
//获取要添加的cno号,
//调用方法
int cno = getNextCno(conn, c);
pstmt.setInt(1, c.getPid());
pstmt.setString(2, c.getName());
pstmt.setString(3, c.getDescr());
pstmt.setInt(4, cno);
pstmt.setInt(5, c.getGrade());
pstmt.executeUpdate();
conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
try {
conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
DB.close(pstmt);
DB.close(conn);
}
}
private int getNextCno(Connection conn, Category c) {
int cno = -1;
//拿到上层节点最大的cno
String sqlMax = "select max(cno) from category where pid = " + c.getPid();
Statement stmtMax = DB.getStatement(conn);
ResultSet rsMax = DB.getResultSet(stmtMax, sqlMax);
try {
rsMax.next();
//因为上面select max(cn0) 返回只有一列所以getInt(1)
int cnoMax = rsMax.getInt(1);
System.out.println(cnoMax);
//计算节点的基数,如用两位表示就是100,三位表示就是1000等
//Math.pow返回第一个参数的第二个参数次幂的值a - 底数,b - 指数
int baseNumber = (int)Math.pow(10, Category.LEVEL_LENGTH);
//构建cstr要加上的数字
int numberToAdd = (int)Math.pow(baseNumber, Category.MAX_GRADE - c.getGrade());
if(cnoMax == 0) { //要加入的节点是该父亲下面的第一个子节点
if(c.getPid() == 0) { //最顶层节点
cno = numberToAdd;
} else { //其他层节点
int parentCno = getParentCno(conn, c); //拿到父亲代表串
cno = parentCno + numberToAdd;
}
} else { //加入的节点不是该父亲下面的第一个
cno = cnoMax + numberToAdd;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DB.close(rsMax);
DB.close(stmtMax);
}
return cno;
}
- 实现父类别,子类别
- mybatis+mysql查询类别下的所有子类别(递归)
- 获取 当前类别所有子类别及 类别相应的深度
- sql server获取某一类别及该类别下的所有子类别
- 书籍父类别和子类别的显示
- service层递归方法查询指定类别下的所有子类别
- SQL2008 递归查询子类别
- 子类、父类之间实现函数重载
- Objective-C 类别(Category) 与 子类(继承基类)
- jquery实现点击父类中的子类下的子类a,控制父类下的子类b的变换
- RFC类别的实现方式
- RFC类别的实现方式
- 钩子实现子类化
- 实现子类主动注册
- 类别
- 类别
- 类别
- 类别
- 放弃不是简单的两个字
- 触摸屏驱动分析: (本机驱动)
- Java的未来之路
- 沙地上的脚印
- 人事管理系统的目录
- 实现父类别,子类别
- 工具条研究手记(2) - 认识CToolBar工具条类
- Afx全局函数及MFC常见数据类型
- Head First C# 中文版 第13章 控件和图形 page591
- 看了几天的英文文档,有点感触。。。
- 使用Google Search API的简单步骤(主要参考自API文档)
- 常用的shell脚本tips
- 选股法
- 喜欢一个人好简单