Java基础-DButils工具类(QueryRunner)详解

                                    作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils。DBUtils就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.7.jar才能够正常使用DBUtils工具。安装方式可参考:“http://www.cnblogs.com/yinzhengjie/p/9017416.html

一.DBUtils工具类介绍

DBUtils是java编程中的数据库操作实用工具,小巧简单实用。DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。Dbutils三个核心功能介绍

  1>. QueryRunner中提供对sql语句(insert,update,delete)操作的API;

  2>.ResultSetHandler接口,用于定义select操作后,怎样封装结果集.;

  3>.DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法;

二.QueryRunner类使用方法

  update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作;

  query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作;

1>.准备实验环境

  1. /*
  2. @author :yinzhengjie
  3. Blog:http://www.cnblogs.com/yinzhengjie/tag/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/
  4. EMAIL:y1053419035@qq.com
  5. */
  6.  
  7. #创建表结构
  8. create table Classmate(
  9. ID int(11) NOT NULL primary key AUTO_INCREMENT,
  10. Name varchar(30) COLLATE gbk_bin DEFAULT NULL,
  11. Age int DEFAULT NULL,
  12. Job varchar(50),
  13. Chinese int,
  14. English int,
  15. Math int,
  16. Physics int,
  17. Chemistry int,
  18. Biology int
  19. );
  20.  
  21. #往表里添加数据
  22. insert into Classmate values(null,'王建军',30,'Java讲师',100,98,99,96,97,100);
  23. insert into Classmate values(null,'常庆林',28,'Linux讲师',100,100,98,93,99,96);
  24. insert into Classmate values(null,'徐培成',35,'BigData讲师',100,100,100,98,96,100);
  25. insert into Classmate values(null,'李永强',30,'javaEE开发工程师',100,93,91,74,89,100);
  26. insert into Classmate values(null,'赵子昂',24,'python开发工程师',98,93,91,74,89,100);
  27. insert into Classmate values(null,'桂阳',25,'C++开发工程师',100,98,93,91,99,82);
  28. insert into Classmate values(null,'肖云龙',24,'Golang开发工程师',93,97,85,100,93,69);
  29. insert into Classmate values(null,'李洋',23,'C#开发工程师',100,98,99,96,97,100);
  30. insert into Classmate values(null,'卜孟龙',30,'BigData开发',98,93,100,100,73,92);
  31. insert into Classmate values(null,'罗大鹏',22,'Java开发工程师',100,84,91,87,100,93);
  32. insert into Classmate values(null,'尹正杰',26,'高级运维工程师',100,100,100,100,100,100);

2>.QueryRunnerd的update方法实现增(insert),删(delete),改(update)

  1. DriverName=com.mysql.jdbc.Driver
  2. #zai "url" lu jing hou jia "?useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true" ke yi kai qi pi chu li mo shi !
  3. url=jdbc:mysql://192.168.0.254:5200/yinzhengjie?useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true
  4. username=root
  5. password=yinzhengjie

config.properties.java 文件内容

  1. /*
  2. @author :yinzhengjie
  3. Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
  4. EMAIL:y1053419035@qq.com
  5. */
  6. package cn.org.yinzhengjie.note2;
  7.  
  8. import java.io.InputStream;
  9. import java.sql.Connection;
  10. import java.sql.DriverManager;
  11. import java.util.Properties;
  12.  
  13. /*
  14. * 编写数据库连接的工具类,JDBC工具类
  15. * 获取连接对象采用读取配置文件方式
  16. * 读取文件获取连接,执行一次,static{}
  17. */
  18. public class Utils {
  19. private static Connection con ;
  20. private static String DriverName;
  21. private static String url;
  22. private static String username;
  23. private static String password;
  24.  
  25. static{
  26. try{
  27. readConfig();
  28. Class.forName(DriverName);
  29. con = DriverManager.getConnection(url, username, password);
  30. }catch(Exception ex){
  31. throw new RuntimeException("数据库连接失败");
  32. }
  33. }
  34.  
  35. private static void readConfig()throws Exception{
  36. //注意!想要使用"config.properties"这个配置文件,就必须将该文件放在src目录下,也就是说要跟你的包名在同一个目录下哟,或者说是在classpath路径下也可以!
  37. InputStream in = Utils.class.getClassLoader().getResourceAsStream("config.properties");
  38. Properties pro = new Properties();
  39. pro.load(in);
  40. DriverName=pro.getProperty("DriverName");
  41. url = pro.getProperty("url");
  42. username = pro.getProperty("username");
  43. password = pro.getProperty("password");
  44. }
  45.  
  46. public static Connection getConnection(){
  47. return con;
  48. }
  49.  
  50. }

Utils.java 文件内容

  1. /*
  2. @author :yinzhengjie
  3. Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
  4. EMAIL:y1053419035@qq.com
  5. */
  6.  
  7. package cn.org.yinzhengjie.note2;
  8.  
  9. import java.sql.Connection;
  10. import java.sql.SQLException;
  11.  
  12. import org.apache.commons.dbutils.DbUtils;
  13. import org.apache.commons.dbutils.QueryRunner;
  14.  
  15. /*
  16. * 使用QueryRunner类,实现对数据表的
  17. * insert delete update
  18. * 调用QueryRunner类的方法 update (Connection con,String sql,Object...param)
  19. * Object...param 可变参数,Object类型,SQL语句会出现?占位符
  20. * 数据库连接对象,自定义的工具类传递
  21. */
  22. public class QueryRunnerDemo {
  23. private static Connection conn = Utils.getConnection();
  24. public static void main(String[] args)throws SQLException {
  25. // insert();
  26. // update();
  27. delete();
  28. }
  29. /*
  30. * 定义方法,使用QueryRunner类的方法delete将数据表的数据删除
  31. */
  32. public static void delete()throws SQLException{
  33. //创建QueryRunner类对象
  34. QueryRunner qr = new QueryRunner();
  35. //写删除的SQL语句
  36. String sql = "DELETE FROM classmate WHERE id<=?";
  37. //调用QueryRunner方法update
  38. int row = qr.update(conn, sql, 10);
  39. System.out.printf("已经有[%d]发生了改变",row);
  40. /*
  41. * 判断insert,update,delete执行是否成功
  42. * 对返回值row判断
  43. * if(row>0) 执行成功
  44. */
  45. DbUtils.closeQuietly(conn);
  46. }
  47.  
  48. /*
  49. * 定义方法,使用QueryRunner类的方法update将数据表的数据修改
  50. */
  51. public static void update()throws SQLException{
  52. //创建QueryRunner类对象
  53. QueryRunner qr = new QueryRunner();
  54. //写修改数据的SQL语句
  55. String sql = "UPDATE classmate SET age=? WHERE name=?";
  56. //定义Object数组,存储?中的参数,注意传入的位置哟,不要把顺序写反了!
  57. Object[] params = {18,"尹正杰"};
  58. //调用QueryRunner方法update
  59. int row = qr.update(conn, sql, params);
  60. System.out.printf("已经有[%d]发生了改变",row);
  61. DbUtils.closeQuietly(conn);
  62. }
  63.  
  64. /*
  65. * 定义方法,使用QueryRunner类的方法update向数据表中,添加数据
  66. */
  67. public static void insert()throws SQLException{
  68. //创建QueryRunner类对象
  69. QueryRunner qr = new QueryRunner();
  70. String sql = "INSERT INTO classmate VALUES(?,?,?,?,?,?,?,?,?,?)";
  71. //将三个?占位符的实际参数,写在数组中
  72. Object[] params = {null,"方合意",24,"python开发工程师",100,60,89,94,92,87};
  73. //调用QueryRunner类的方法update执行SQL语句
  74. System.out.println(conn);
  75. int row = qr.update(conn, sql, params);
  76. System.out.printf("已经有[%d]发生了改变",row);
  77. DbUtils.closeQuietly(conn);
  78. }
  79. }

3>.QueryRunnerd的query方法实现查(select)

ResultSetHandler结果集处理类如下:

ArrayHandler

将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值

ArrayListHandler

将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。

BeanHandler

将结果集中第一条记录封装到一个指定的javaBean中。

BeanListHandler

将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中

ColumnListHandler

将结果集中指定的列的字段值,封装到一个List集合中

ScalarHandler

它是用于单数据。例如select count(*) from 表操作。

MapHandler

将结果集第一行封装到Map集合中,Key 列名, Value 该列数据

MapListHandler

将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合

   接下来我们一起对上面的八种方法进行一一举例,测试代码如下:

  1. DriverName=com.mysql.jdbc.Driver
  2. #zai "url" lu jing hou jia "?useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true" ke yi kai qi pi chu li mo shi !
  3. url=jdbc:mysql://192.168.0.254:5200/yinzhengjie?useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true
  4. username=root
  5. password=yinzhengjie

config.properties.java 文件内容

  1. /*
  2. @author :yinzhengjie
  3. Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
  4. EMAIL:y1053419035@qq.com
  5. */
  6. package cn.org.yinzhengjie.note2;
  7.  
  8. import java.io.InputStream;
  9. import java.sql.Connection;
  10. import java.sql.DriverManager;
  11. import java.util.Properties;
  12.  
  13. /*
  14. * 编写数据库连接的工具类,JDBC工具类
  15. * 获取连接对象采用读取配置文件方式
  16. * 读取文件获取连接,执行一次,static{}
  17. */
  18. public class Utils {
  19. private static Connection con ;
  20. private static String DriverName;
  21. private static String url;
  22. private static String username;
  23. private static String password;
  24.  
  25. static{
  26. try{
  27. readConfig();
  28. Class.forName(DriverName);
  29. con = DriverManager.getConnection(url, username, password);
  30. }catch(Exception ex){
  31. throw new RuntimeException("数据库连接失败");
  32. }
  33. }
  34.  
  35. private static void readConfig()throws Exception{
  36. //注意!想要使用"config.properties"这个配置文件,就必须将该文件放在src目录下,也就是说要跟你的包名在同一个目录下哟,或者说是在classpath路径下也可以!
  37. InputStream in = Utils.class.getClassLoader().getResourceAsStream("config.properties");
  38. Properties pro = new Properties();
  39. pro.load(in);
  40. DriverName=pro.getProperty("DriverName");
  41. url = pro.getProperty("url");
  42. username = pro.getProperty("username");
  43. password = pro.getProperty("password");
  44. }
  45.  
  46. public static Connection getConnection(){
  47. return con;
  48. }
  49.  
  50. }

Utils.java 文件内容

  1. /*
  2. @author :yinzhengjie
  3. Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
  4. EMAIL:y1053419035@qq.com
  5. */
  6.  
  7. package cn.org.yinzhengjie.note2;
  8.  
  9. public class Student {
  10. private int ID;
  11. private String Name;
  12. private int Age;
  13. private String Job;
  14. private int Chinese;
  15. private int English;
  16. private int Math;
  17. private int Physics;
  18. private int Chemistry;
  19. private int Biology;
  20. public Student(int iD, String name, int age, String job, int chinese, int english, int math, int physics,int chemistry, int biology) {
  21. super();
  22. ID = iD;
  23. Name = name;
  24. Age = age;
  25. Job = job;
  26. Chinese = chinese;
  27. English = english;
  28. Math = math;
  29. Physics = physics;
  30. Chemistry = chemistry;
  31. Biology = biology;
  32. }
  33. public Student() {
  34. super();
  35. }
  36. public int getID() {
  37. return ID;
  38. }
  39. public void setID(int iD) {
  40. ID = iD;
  41. }
  42. public String getName() {
  43. return Name;
  44. }
  45. public void setName(String name) {
  46. Name = name;
  47. }
  48. public int getAge() {
  49. return Age;
  50. }
  51. public void setAge(int age) {
  52. Age = age;
  53. }
  54. public String getJob() {
  55. return Job;
  56. }
  57. public void setJob(String job) {
  58. Job = job;
  59. }
  60. public int getChinese() {
  61. return Chinese;
  62. }
  63. public void setChinese(int chinese) {
  64. Chinese = chinese;
  65. }
  66. public int getEnglish() {
  67. return English;
  68. }
  69. public void setEnglish(int english) {
  70. English = english;
  71. }
  72. public int getMath() {
  73. return Math;
  74. }
  75. public void setMath(int math) {
  76. Math = math;
  77. }
  78. public int getPhysics() {
  79. return Physics;
  80. }
  81. public void setPhysics(int physics) {
  82. Physics = physics;
  83. }
  84. public int getChemistry() {
  85. return Chemistry;
  86. }
  87. public void setChemistry(int chemistry) {
  88. Chemistry = chemistry;
  89. }
  90. public int getBiology() {
  91. return Biology;
  92. }
  93. public void setBiology(int biology) {
  94. Biology = biology;
  95. }
  96. @Override
  97. public String toString() {
  98.  
  99. return "ID="+ID+", 姓名="+Name+", 年龄="+Age+", 工作="+Job+", 语文="+Chinese+", 英语="+English+", 数学="+Math+", 物理="+Physics+", 化学="+Chemistry+", 生物="+Biology;
  100. }
  101.  
  102. }

Student.java 文件内容

  1. /*
  2. @author :yinzhengjie
  3. Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
  4. EMAIL:y1053419035@qq.com
  5. */
  6.  
  7. package cn.org.yinzhengjie.note2;
  8.  
  9. import java.sql.Connection;
  10. import java.sql.SQLException;
  11. import java.util.List;
  12. import java.util.Map;
  13.  
  14. import org.apache.commons.dbutils.QueryRunner;
  15. import org.apache.commons.dbutils.handlers.ArrayHandler;
  16. import org.apache.commons.dbutils.handlers.ArrayListHandler;
  17. import org.apache.commons.dbutils.handlers.BeanHandler;
  18. import org.apache.commons.dbutils.handlers.BeanListHandler;
  19. import org.apache.commons.dbutils.handlers.ColumnListHandler;
  20. import org.apache.commons.dbutils.handlers.MapHandler;
  21. import org.apache.commons.dbutils.handlers.MapListHandler;
  22. import org.apache.commons.dbutils.handlers.ScalarHandler;
  23.  
  24. /*
  25. * QueryRunner数据查询操作:
  26. * 调用QueryRunner类方法query(Connection con,String sql,ResultSetHandler r, Object..params)
  27. * ResultSetHandler r 结果集的处理方式,传递ResultSetHandler接口实现类
  28. * Object..params SQL语句中的?占位符
  29. *
  30. * 注意: query方法返回值,返回的是T 泛型, 具体返回值类型,跟随结果集处理方式变化
  31. */
  32. public class QueryRunnerDemo1 {
  33. private static Connection con = Utils.getConnection();
  34. public static void main(String[] args) throws SQLException{
  35. // arrayHandler();
  36. // arrayListHandler();
  37. // beanHandler();
  38. // beanListHander();
  39. // columnListHandler();
  40. // scalarHandler();
  41. // mapHandler();
  42. mapListHandler();
  43. }
  44. /*
  45. * 结果集第一种处理方法, ArrayHandler,不推荐使用!
  46. * 将结果集的第一行存储到对象数组中 Object[]
  47. */
  48. public static void arrayHandler()throws SQLException{
  49. QueryRunner qr = new QueryRunner();
  50. String sql = "SELECT * FROM classmate";
  51. //调用方法query执行查询,传递连接对象,SQL语句,结果集处理方式的实现类
  52. //返回对象数组
  53. Object[] result = qr.query(con, sql, new ArrayHandler());
  54. for(Object obj : result){
  55. System.out.print(obj);
  56. }
  57. }
  58.  
  59. /*
  60. * 结果集第二种处理方法,ArrayListHandler
  61. * 将结果集的每一行,封装到对象数组中, 出现很多对象数组
  62. * 对象数组存储到List集合
  63. */
  64. public static void arrayListHandler()throws SQLException{
  65. QueryRunner qr = new QueryRunner();
  66. String sql = "SELECT * FROM classmate";
  67. //调用query方法,结果集处理的参数上,传递实现类ArrayListHandler
  68. //方法返回值 每行是一个对象数组,存储到List
  69. List<Object[]> result= qr.query(con, sql, new ArrayListHandler());
  70.  
  71. //集合的遍历
  72. for( Object[] objs : result){
  73. //遍历对象数组
  74. for(Object obj : objs){
  75. System.out.print(obj+",");
  76. }
  77. System.out.println();
  78. }
  79. }
  80.  
  81. /*
  82. * 结果集第三种处理方法,BeanHandler
  83. * 将结果集的第一行数据,封装成JavaBean对象
  84. * 注意: 被封装成数据到JavaBean对象, Sort类必须有空参数构造
  85. */
  86. public static void beanHandler()throws SQLException{
  87. QueryRunner qr = new QueryRunner();
  88. String sql = "SELECT * FROM classmate";
  89. //调用方法,传递结果集实现类BeanHandler
  90. //BeanHandler(Class<T> type)
  91. Student s = qr.query(con, sql, new BeanHandler<Student>(Student.class));
  92. System.out.println(s);
  93. }
  94.  
  95. /*
  96. * 结果集第四种处理方法, BeanListHandler
  97. * 结果集每一行数据,封装JavaBean对象
  98. * 多个JavaBean对象,存储到List集合
  99. */
  100. public static void beanListHander()throws SQLException{
  101. QueryRunner qr = new QueryRunner();
  102. String sql = "SELECT * FROM classmate ";
  103. //调用方法query,传递结果集处理实现类BeanListHandler
  104. List<Student> list = qr.query(con, sql, new BeanListHandler<Student>(Student.class));
  105. for(Student s : list){
  106. System.out.println(s);
  107. }
  108. }
  109.  
  110. /*
  111. * 结果集第五种处理方法,ColumnListHandler
  112. * 结果集,指定列的数据,存储到List集合
  113. * List<Object> 每个列数据类型不同
  114. */
  115. public static void columnListHandler()throws SQLException{
  116. QueryRunner qr = new QueryRunner();
  117. String sql = "SELECT * FROM classmate ";
  118. //调用方法 query,传递结果集实现类ColumnListHandler
  119. //实现类构造方法中,使用字符串的列名
  120. List<Object> list = qr.query(con, sql, new ColumnListHandler<Object>("name"));
  121. for(Object obj : list){
  122. System.out.println(obj);
  123. }
  124. }
  125.  
  126. /*
  127. * 结果集第六种处理方法,ScalarHandler
  128. * 对于查询后,只有1个结果
  129. */
  130. public static void scalarHandler()throws SQLException{
  131. QueryRunner qr = new QueryRunner();
  132. String sql = "SELECT COUNT(*) FROM classmate";
  133. //调用方法query,传递结果集处理实现类ScalarHandler
  134. long count = qr.query(con, sql, new ScalarHandler<Long>());
  135. System.out.println(count);
  136. }
  137.  
  138. /*
  139. * 结果集第七种处理方法,MapHandler
  140. * 将结果集第一行数据,封装到Map集合中
  141. * Map<键,值> 键:列名 值:这列的数据
  142. */
  143. public static void mapHandler()throws SQLException{
  144. QueryRunner qr = new QueryRunner();
  145. //注意,这里是可以用占位符哟,我下面就对他进行了传参,参数为11
  146. String sql = "SELECT * FROM classmate where id = ?";
  147. //调用方法query,传递结果集实现类MapHandler
  148. //返回值: Map集合,Map接口实现类, 泛型
  149. Map<String,Object> map = qr.query(con, sql, new MapHandler(),);
  150. //遍历Map集合
  151. for(String key : map.keySet()){
  152. System.out.println(key+".."+map.get(key));
  153. }
  154. }
  155.  
  156. /*
  157. * 结果集第八种处理方法,MapListHandler
  158. * 将结果集每一行存储到Map集合,键:列名,值:数据
  159. * Map集合过多,存储到List集合
  160. */
  161. public static void mapListHandler()throws SQLException{
  162. QueryRunner qr = new QueryRunner();
  163. String sql = "SELECT * FROM classmate";
  164. //调用方法query,传递结果集实现类MapListHandler
  165. //返回值List集合, 存储的是Map集合
  166. List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler());
  167. //遍历集合list
  168. for( Map<String,Object> map : list ){
  169. for(String key : map.keySet()){
  170. System.out.print(key+"..."+map.get(key)+", ");
  171. }
  172. System.out.println();
  173. }
  174.  
  175. }
  176. }

Java基础-DButils工具类(QueryRunner)详解的更多相关文章

  1. 《Java基础——break与continue用法详解》

    Java基础--break与continue用法详解       1. break语句: 规则: 1. 仅用于循环语句和switch语句当中,用于跳出循环. 2. 当只有一层循环时,则直接跳出循环,不 ...

  2. java使用dbutils工具类实现小程序 管家婆记账软件

    1.所需创建的包和 jar包 2.创建表结构  #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...

  3. Java基础篇(JVM)——字节码详解

    这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...

  4. java入门---对象和类&概念详解&实例

        Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载     这篇文章,我们主要来看下: 对象:对象是类的一个实例(对象不是找个女朋友),有状态 ...

  5. [java基础] 002 - 位运算符的详解和妙用

    一:位运算符详解 位运算符主要用来对操作数二进制的位进行运算.按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值. Java 语言中的位运算符分为位逻辑运算符和位移运算符两类, ...

  6. Java实体映射工具MapStruct使用详解

    1.序 通常在后端开发中经常不直接返回实体Entity类,经过处理转换返回前端,前端提交过来的对象也需要经过转换Entity实体才做存储:通常使用的BeanUtils.copyProperties方法 ...

  7. java.util.concurrent.atomic 类包详解

    java.util.concurrent包分成了三个部分,分别是java.util.concurrent.java.util.concurrent.atomic和java.util.concurren ...

  8. JAVA基础——Arrays工具类十大常用方法

    Arrays工具类十大常用方法 原文链接:http://blog.csdn.net/renfufei/article/details/16829457 0. 声明数组 String[] aArray ...

  9. java 基础 ----- Arrays 工具类

    -----  Arrays  工具类是一个比较方便的类 常用的方法 也可以通过jdk文档进行查看    右侧有偶 对一些比较常用的方法进行演示   直接放在main方法中进行测试 ----   equ ...

随机推荐

  1. Chapter 3 软件项目管理

    软件项目具有产品的不可见性.项目的高度不确定性.软件过程的多变化性.软件人员的高流动性的显著特征.有效的软件项目管理集中于人员.产品.过程和项目四个方面.软件项目的生命周期有项目启动.项目规划.项目实 ...

  2. 文件名命工具类(将指定目录下的文件的type类型的文件,进行重命名,命名后的文件将去掉type)

    import java.io.File; /** * <b>function:</b> 文件命名工具类 * @author hoojo * @createDate 2012-5 ...

  3. JAVA异常架构图及常见面试题

    红色为检查异常,就是eclipse要提示你是try catch 还是throws. 非检查异常,就是/0,nullpointexception,数据越界访问indexOfOutBounds 异常 错误 ...

  4. angularJS1笔记-(10)-自定义指令(templateUrl属性)

    index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  5. js如何判断一个值是不是Array类型

    本来判断一个对象类型用typeof是最好的,不过对于Array类型是不适用的可以使用 instanceof操作符var arrayStr=new Array("1","2 ...

  6. Word中怎样删除分节符而不影响前节页面设置

    在Word中,通过常规方法删除一个不需要的分节符时,会默认将分节符后面的页面设置带入前一节.比如,第一节是纵向排版,第二节是横向排版,当删除第二节的全部内容,包括二者之间的分节符之后,就会使得第一节的 ...

  7. UpdateBatch与事务处理的一点总结

    对于某些设置或者提交,如果希望是全部修改完毕后才确定生效,可以将DataSet的LockType:=ltBatchOptimistic,这样就可以了.然后每次做的修改和改动都暂时保存在缓存中,必须通过 ...

  8. javascript易混淆的split()、splice()、slice()方法详解

    很多时候,一门语言总有那么些相似的方法,容易让人傻傻分不清楚,尤其在不经常用的时候.而本文主要简单总结了JavaScript中的关于字符串和数组中三个容易混淆的方法.旨在方便查阅,在容易混淆的时候有据 ...

  9. 反射就是获取该类的.class文件里面的方法,属性

    反射就是获取该类的.class文件里面的方法,属性

  10. DPDK环境搭建

    一.环境要求  1.内核版本 >= 2.6.34:  2.glibc版本 >= 2.7 (ldd --version 查看glibc版本):  3.gcc版本 >= 4.9,一些gc ...