购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 公共类设计

在开发程序时,经常会遇到在不同的方法中进行相同处理的情况,例如数据库连接和字符串处理等,为了避免重复编码,可将这些处理封装到单独的类中,通常称这些类为公共类或工具类。在开发本网站时,用到数据库连接及操作类、分页类和字符串处理类3个公共类,下面分别介绍。

1.5.1 数据库连接及操作类

DB类主要是对数据库的操作,如连接、关闭数据库及执行SQL语句操作数据库。每一种操作对应一个方法,如getCon()方法用来获取数据库连接,closed()方法用来关闭数据库连接,而对数据库的增、删、改、查等操作都在doPstm()方法中实现,该方法是通过PreparedStatement对象来执行SQL语句的。下面介绍DB类的创建过程。

(1)导入所需的类包。代码如下:

代码位置:光盘 \MR\01\src\com\yxq\dao\DB.java

(2)声明类的属性并赋值。代码如下:

代码位置:光盘 \MR\01\src\com\yxq\dao\DB.java

(3)覆盖默认构造方法,在该方法中实现数据库驱动的加载。这样,当通过new操作符实例化一个DB类的同时,就会加载数据库驱动。代码如下:

代码位置:光盘 \MR\01\src\com\yxq\dao\DB.java

(4)创建获取数据库连接的方法getCon(),方法中使用DriverManager类的getConnection()静态方法获取一个Connection类实例。代码如下:

代码位置:光盘 \MR\01\src\com\yxq\dao\DB.java

(5)创建对数据库进行增、删、改、查等操作的doPstm()方法,方法中使用了PreparedStatement类对象来执行SQL语句。之所以可以将这些操作在一个方法中实现,是因为doPstm方法中设置的两个参数——sql和params。sql为String型变量,存储了要执行的SQL语句;params为Object类型数组,存储了为sql表示的SQL语句中“?”占位符赋值的数据。为SQL语句中的“?”占位符赋值,可通过PreparedStatement类对象的setXXX()方法实现,然后调用execute()方法执行SQL语句。

例如,为select * from table where name=?语句中的“?”赋值,若name字段类型为char或varchar,则应使用如下代码。

pstm.setString(1,"yxq")

其中pstm为PreparedStatement类对象,整数1表示SQL语句中第1个“?”占位符,yxq为赋予该占位符的值。若name字段类型为整型,则应使用setInt()方法来赋值。

还可以使用setObject()方法,在无法判断字段类型的情况下进行赋值。doPstm()方法就应用了该setObject()方法进行赋值,代码如下。

代码位置:光盘 \MR\01\src\com\yxq\dao\DB.java

关键代码解析

❶调用Connection对象的prepareStatement()方法获取PreparedStatement类对象pstm。参数sql为要执行的SQL语句;通过设置ResultSet.TYPE_SCROLL_INSENSITIVE与ResultSet.CONCUR_READ _ONLY两个参数,在查询数据库后,可获得可滚动的结果集。

❷调用PreparedStatement类对象的execute()方法执行SQL语句。该方法可执行任何类型的SQL语句,如查询、添加等。execute()方法返回的是boolean型值,若为true,则表示执行SQL语句后的结果中第一个结果为ResultSet对象;若为false,则表示第一个结果为更新数据库所影响的记录数或表示不存在任何结果。若第一个结果为ResultSet对象,可通过PreparedStatement类对象的getResultSet()方法返回;若第一个结果为更新数据库后所影响的记录数,可通过PreparedStatement类对象的getUpdateCount()方法返回。通过PreparedStatement类对象的getMoreResults()方法可指向下一个结果,若该结果为ResultSet对象,则返回true;否则,若该结果为更新数据库后所影响的记录数或不再有结果存在,则返回false。执行getMoreResults()方法后,会自动关闭之前通过getResultSet()方法获得的ResultSet对象。

(6)执行查询的SQL语句后,返回的结果是ResultSet结果集对象;执行更新的SQL语句,则返回影响的记录数。DB类中的doPstm()方法用来操作数据库,但其并没有返回值,那么在执行了上述两种SQL语句后,如何返回结果,可通过创建以下方法来实现。

创建返回ResultSet结果集对象的方法的代码如下:

代码位置:光盘 \MR\01\src\com\yxq\dao\DB.java

创建返回执行更新的SQL语句后所影响的记录数的方法的代码如下:

代码位置:光盘 \MR\01\src\com\yxq\dao\DB.java

这样,在执行doPstm()方法操作数据库后,就可调用其中一个方法返回需要的值。例如:

其中mydb为DB类的实例,sql为查询SQL语句。

1.5.2 业务处理类

OpDB类实现了处理本系统中用户请求的所有业务的操作,如信息显示、信息发布、管理员登录、信息审核、信息删除等。几乎每一个用户请求的业务,在OpDB类中都对应着一个方法,具有相同性质的业务可在一个方法中实现。在这些方法中,通过调用DB类中的doPstm()方法来对数据库进行操作。

OpDB类中的方法与方法所处理的业务如表1.6所示。

表1.6 OpDB类中的方法

1.OpGetListBox()方法

该方法用来获取所有的信息类别,以便实现前台页面中的导航菜单项与后台的“信息类别”下拉列表框中的选项。方法中首先调用DB类的doPstm()方法查询tb_type数据表中的所有记录,然后依次取出每条记录中的type_sign与type_intro字段内容,并分别作为TreeMap对象的key值与value值进行保存,最后返回该Map对象。OpGetListBox()方法的代码如下:

代码位置:光盘 \MR\01\src\com\yxq\dao\OpDB.java

该方法在处理用户访问前台首页请求的Action类中被调用,在该Action类中将返回的TreeMap对象保存在session范围内,在请求返回JSP页面后,可通过Struts 2.0标签获取该TreeMap对象,实现导航菜单或下拉列表。

2.OpListShow()方法

OpListShow()方法用来实现具有列表显示信息功能的业务,例如搜索信息、查看某类别下的所有信息等。在方法中首先调用DB类的doPstm()方法查询数据库,接着调用getRs()方法获取查询后的结果集,然后依次将结果集中的记录封装到InfoSingle类对象中,并将该对象保存到List集合中,最后返回该List集合对象。OpListShow()方法的关键代码如下:

代码位置:光盘 \MR\01\src\com\yxq\dao\OpDB.java

3.OpSingleShow()方法

该方法实现了查看信息详细内容的业务,如在前台查看某信息的详细内容、在后台进行信息审核与付费设置时用来显示被操作信息的详细内容。方法中首先查询数据库,获取指定条件的记录,然后将记录封装到InfoSingle类对象中,最后返回该对象。OpSingleShow()方法的关键代码如下:

代码位置:光盘 \MR\01\src\com\yxq\dao\OpDB.java

4.OpUpdate()方法

本系统的信息发布、信息审核、信息删除和付费设置业务具有相同的性质,即都是根据指定的SQL语句来更新数据库。OpUpdate()方法用来实现具有该性质的业务,方法中首先调用DB类的doPstm()方法更新数据库,接着调用getCount()方法获取更新操作所影响的记录数,最后返回该记录数。OpUpdate()方法的关键代码如下:

代码位置:光盘 \MR\01\src\com\yxq\dao\OpDB.java

5.LogOn()方法

LogOn()方法用来实现管理员登录操作的身份验证业务,该方法通过查询数据库来判断请求登录的用户是否存在,若存在则返回true,否则返回false。LogOn()方法的关键代码如下:

代码位置:光盘 \MR\01\src\com\yxq\dao\OpDB.java

6.OpCreatePage()方法

OpCreatePage()方法用来设置分页信息,这些信息包括总记录数、总页数、当前页、分页状态和分页导航链接等。该方法存在多个参数,这些参数及说明如表1.7所示。

表1.7 OpCreatePage()方法中的参数

OpCreatePage()方法主要就是将分页信息封装到CreatePage类对象中,然后返回该CreatePage对象。在CreatePage类中定义了存储分页信息的属性,并且创建了对应的setXXX()与getXXX()方法来存取这些属性。OpCreatePage()方法的关键代码如下:

代码位置:光盘 \MR\01\src\com\yxq\dao\OpDB.java

1.5.3 分页类

CreatePage类用来封装分页信息,这些信息都保存在CreatePage类的相应属性中。CreatePage类的属性如下:

代码位置:光盘 \MR\01\src\com\yxq\model\CreatePage.java

在类的构造方法中为这些属性赋初始值。CreatePage类的构造方法如下:

代码位置:光盘 \MR\01\src\com\yxq\model\CreatePage.java

分页信息中的总记录数,需要通过查询数据库来获得,其实现可查看1.5.2节对OpDB类中的OpCreatePage()方法的介绍。CreatePage类中用来设置总记录数的方法如下:

代码位置:光盘 \MR\01\src\com\yxq\model\CreatePage.java

总页数需要获得总记录数后与每页显示的记录数计算得到,其算法为:“总页数=(总记录数%每页显示记录==0)?(总记录数/每页显示记录):(总记录数/每页显示记录+1)”,所以要先设置总记录数,然后再来设置总页数。CreatePage类中用来设置总页数的方法如下:

代码位置:光盘 \MR\01\src\com\yxq\model\CreatePage.java

在设置当前页码时,要判断由参数传递的当前页码是否有效,例如传递的值是否为数字形式、是否小于1、是否大于总页数等,对这些情况要进行相应的处理。CreatePage类中用来设置当前页码的方法如下:

代码位置:光盘 \MR\01\src\com\yxq\model\CreatePage.java

在调用以上方法后,就可调用设置分页状态显示信息的方法来设置分页状态显示信息。该方法的代码如下:

代码位置:光盘 \MR\01\src\com\yxq\model\CreatePage.java

另外,还需要设置分页导航栏信息。在设置该信息时,需要判断总页数,若总页数大于1,则显示分页导航链接,否则不显示。CreatePage类中用来设置分页导航栏信息的方法如下:

代码位置:光盘 \MR\01\src\com\yxq\model\CreatePage.java

1.5.4 字符串处理类

字符串处理类用来解决程序中经常出现的有关字符串处理的问题,在本系统的字符串处理类中实现了转换字符串中的HTML字符和将日期型数据转换为字符串的两种操作。下面介绍字符串处理类DoString的实现过程。

(1)创建转换字符串中HTML字符的方法HTMLChange()。代码如下:

代码位置:光盘 \MR\01\src\com\yxq\tools\DoString.java

(2)创建转换日期格式为String型的方法dateTimeChange()。代码如下:

代码位置:光盘 \MR\01\src\com\yxq\tools\DoString.java

该方法主要是调用java.text.SimpleDateFormat类来转换日期型数据为String型。使用该类进行转换,首先创建一个SimpleDateFormat类对象,在创建的同时指定了格式化日期为String后的格式为yyyy-MM-dd HH:mm:ss,即“年-月-日时:分:秒”,然后调用该类的format(java.util.Date date)方法将Date型转换成String型。 OjSVKs6d+HHpOoiUFnj0mIyxkZl4hGbqZJ+Bf5LE4E+KJ8mS4KzA6vLqc26XWdvv

点击中间区域
呼出菜单
上一章
目录
下一章
×