CategoryService.java
上传用户:lsj999sz
上传日期:2022-06-15
资源大小:4717k
文件大小:6k
源码类别:

ICQ/即时通讯

开发平台:

Java

  1. package com.bjsxt.shopping.category;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import com.bjsxt.shopping.util.DB;
  10. public class CategoryService {
  11. private static CategoryService service;
  12. private CategoryService() {}
  13. public static CategoryService getInstance() {
  14. if(service == null) {
  15. service = new CategoryService();
  16. }
  17. return service;
  18. }
  19. /**
  20.  * 拿到所有的根类别
  21.  * @return
  22.  */
  23. public List<Category> getTopCategories() {
  24. List<Category> categories = new ArrayList<Category>();
  25. Connection conn = DB.getConn();
  26. Statement stmt = DB.getStatement(conn);
  27. ResultSet rs = DB.getResultSet(stmt, "select * from category where grade = 1");
  28. try {
  29. while (rs.next()) {
  30. Category c = this.getCategoryFromRs(rs);
  31. categories.add(c);
  32. }
  33. } catch (SQLException e) {
  34. e.printStackTrace();
  35. } finally {
  36. DB.close(conn);
  37. }
  38. return categories;
  39. }
  40. public List<Category> getChilds(int id) {
  41. List<Category> categories = new ArrayList<Category>();
  42. Connection conn = DB.getConn();
  43. Statement stmt = DB.getStatement(conn);
  44. ResultSet rs = DB.getResultSet(stmt, "select * from category where pid = " + id);
  45. try {
  46. while (rs.next()) {
  47. Category c = this.getCategoryFromRs(rs);
  48. categories.add(c);
  49. }
  50. } catch (SQLException e) {
  51. e.printStackTrace();
  52. } finally {
  53. DB.close(conn);
  54. }
  55. return categories;
  56. }
  57. //List<Category> categories = null;
  58. /*
  59. public synchronized List<Category> getCategories() {
  60. if(categories != null) return categories;
  61. categories = new ArrayList<Category>();
  62. Connection conn = DB.getConn();
  63. String sql = "select * from category order by cno";
  64. Statement stmt = DB.getStatement(conn);
  65. ResultSet rs = DB.getResultSet(stmt, sql);
  66. try {
  67. while (rs.next()) {
  68. Category c = this.getCategoryFromRs(rs);
  69. categories.add(c);
  70. }
  71. } catch (SQLException e) {
  72. e.printStackTrace();
  73. } finally {
  74. DB.close(rs);
  75. DB.close(stmt);
  76. DB.close(conn);
  77. }
  78. return categories;
  79. }
  80. */
  81. public List<Category> getCategories() {
  82. List<Category> categories = new ArrayList<Category>();
  83. Connection conn = DB.getConn();
  84. String sql = "select * from category order by cno";
  85. Statement stmt = DB.getStatement(conn);
  86. ResultSet rs = DB.getResultSet(stmt, sql);
  87. try {
  88. while (rs.next()) {
  89. Category c = this.getCategoryFromRs(rs);
  90. categories.add(c);
  91. }
  92. } catch (SQLException e) {
  93. e.printStackTrace();
  94. } finally {
  95. DB.close(rs);
  96. DB.close(stmt);
  97. DB.close(conn);
  98. }
  99. return categories;
  100. }
  101. private Category getCategoryFromRs(ResultSet rs) {
  102. Category c = new Category();
  103. try {
  104. c.setId(rs.getInt("id"));
  105. c.setPid(rs.getInt("pid"));
  106. c.setName(rs.getString("name"));
  107. c.setDescr(rs.getString("descr"));
  108. c.setCno(rs.getInt("cno"));
  109. c.setGrade(rs.getInt("grade"));
  110. } catch (SQLException e) {
  111. e.printStackTrace();
  112. }
  113. return c;
  114. }
  115. public void delete(int id) {
  116. }
  117. public void delete(Category c) {
  118. delete(c.getId());
  119. }
  120. public void add(Category c) {
  121. Connection conn = DB.getConn();
  122. try {
  123. conn.setAutoCommit(false);
  124. } catch (SQLException e1) {
  125. e1.printStackTrace();
  126. }
  127. String sql = "insert into category values (null, ?, ?, ?, ?, ?)";
  128. PreparedStatement pstmt = DB.prepare(conn, sql);
  129. try {
  130. int cno = getNextCno(conn, c);
  131. pstmt.setInt(1, c.getPid());
  132. pstmt.setString(2, c.getName());
  133. pstmt.setString(3, c.getDescr());
  134. pstmt.setInt(4, cno);
  135. pstmt.setInt(5, c.getGrade());
  136. pstmt.executeUpdate();
  137. conn.commit();
  138. } catch (SQLException e) {
  139. try {
  140. conn.rollback();
  141. } catch (SQLException e1) {
  142. e1.printStackTrace();
  143. }
  144. e.printStackTrace();
  145. } finally {
  146. try {
  147. conn.setAutoCommit(true);
  148. } catch (SQLException e) {
  149. e.printStackTrace();
  150. }
  151. DB.close(pstmt);
  152. DB.close(conn);
  153. }
  154. }
  155. private int getNextCno(Connection conn, Category c) {
  156. int cno = -1;
  157. String sqlMax = "select max(cno) from category where pid = " + c.getPid();
  158. Statement stmtMax = DB.getStatement(conn);
  159. ResultSet rsMax = DB.getResultSet(stmtMax, sqlMax);
  160. try {
  161. rsMax.next();
  162. int cnoMax = rsMax.getInt(1);
  163. System.out.println(cnoMax);
  164. //计算节点的基数,如用两位表示就是100,三位表示就是1000等
  165. int baseNumber = (int)Math.pow(10, Category.LEVEL_LENGTH);
  166. //构建cstr要加上的数字
  167. int numberToAdd = (int)Math.pow(baseNumber, Category.MAX_GRADE - c.getGrade());
  168. if(cnoMax == 0) { //要加入的节点是该父亲下面的第一个子节点
  169. if(c.getPid() == 0) { //最顶层节点
  170. cno = numberToAdd;
  171. } else { //其他层节点
  172. int parentCno = getParentCno(conn, c); //拿到父亲代表串
  173. cno = parentCno + numberToAdd;
  174. }
  175. } else { //加入的节点不是该父亲下面的第一个
  176. cno = cnoMax + numberToAdd;
  177. }
  178. } catch (SQLException e) {
  179. e.printStackTrace();
  180. } finally {
  181. DB.close(rsMax);
  182. DB.close(stmtMax);
  183. }
  184. return cno;
  185. }
  186. private int getParentCno(Connection conn, Category child) {
  187. String sql = "select cno from category where id = " + child.getPid();
  188. Statement stmt = DB.getStatement(conn);
  189. ResultSet rs = DB.getResultSet(stmt, sql);
  190. int cno = -1;
  191. try {
  192. rs.next();
  193. cno = rs.getInt(1);
  194. } catch (SQLException e) {
  195. e.printStackTrace();
  196. } finally {
  197. DB.close(rs);
  198. DB.close(stmt);
  199. }
  200. return cno;
  201. }
  202. public void update(Category c) {
  203. c.update();
  204. }
  205. public void updateCategory(int id, String name, String descr) {
  206. }
  207. public Category loadById(int id) {
  208. Category c = null;
  209. Connection conn = DB.getConn();
  210. String sql = "select * from category where id = " + id;
  211. Statement stmt = DB.getStatement(conn);
  212. ResultSet rs = DB.getResultSet(stmt, sql);
  213. try {
  214. if (rs.next()) {
  215. c = this.getCategoryFromRs(rs);
  216. }
  217. } catch (SQLException e) {
  218. e.printStackTrace();
  219. } finally {
  220. DB.close(rs);
  221. DB.close(stmt);
  222. DB.close(conn);
  223. }
  224. return c;
  225. }
  226. }