在中小型的开发团队或开发项目中,很多人选择了jsp+javabean的开发模式,但这种模式下,sql语句应该写在什么位置,很多人,包括我自己都会走很多的弯路。
很多书上要么推荐sql语句写在bean中,让jsp调用即可(理由是这样子比较规范),要么推荐sql语句写在jsp文件中(理由是方便开发,开发速度很快),但我在实际开发中,发现采用上述两种方式都不是很好,下面我将我的方法说一下,希望得到大家的指正。
我认为在做列表查询时,即按照某种条件查询某个表,一行一行的显示时,sql语句应该写在jsp中,因为表中肯定会有些字段需要将代码转换成实际的含义,需要两个或更多的表关联查询,如果写在bean中,则要将返回结果再用bean进行转换,这种运行方法是非常不好的,而且也会严重影响数据库的运行速度。这时,若将sql语句写在jsp中,执行放在bean中执行,这就加快了数据库的查询速度。相反如果写在bean中,开发及维护都会很不方便(因为bean基本上都是单表操作的)。
原则:
在绝大多数的应用中,返回大量的符合条件的记录是司空见惯的,最典型的莫过于搜索了。在搜索的应用中,用户给出搜索条件,服务器查出符合条件的记录。但往往搜索会返回大量的数据记录,如果在网页中,往往是通过分页的方式来实现,页面提供诸如上一页,下一页等等按钮来实现分页。
现在主要有以下几中方式来实现分页:
1.ejb的find方法
2.在显示第一页前将所有的记录放在collection对象中,后续的各页都在内存中取。
3.每一页都到数据库作一次重复的查询,然后将符合条件的记录显示出来。
4.保存前几页的搜索结果在内存中(经常使用到的),后续的记录(这些数据是多数用户都没有耐心看的)再通过连数据库取得。
5.其他各种cache机制。
我们可以根据实际情况来选择适合自己的方法,我给大家介绍一个通过标准的sql语句来得到符合条件的数据。如从第10到20条的符合条件(where语句中的)的记录。通过这种方法取得记录有一个必要条件,必须有一个能够标识记录顺序的字段,如id,time等等。下面我为大家演示一个例子:
查询t_table表中所有记录第10到20条,按id排序。
sql语句为:
select * from t_table t1 where (select count(*) from t_table t2 where t2.id < t1.id ) >= 10 and (select count(*) from t_table t2 where t2.id < t1.id ) < 20
又如查询t_table表中key=123第10到20条的记录,按id排序。
select * from t_table t1 where (select count(*) from t_table t2 where t2.id < t1.id and t2.key = 123) >= 10 and (select count(*) from t_table t2 where t2.id < t1.id and t2.key = 123) < 20 and t1.key = 123
当然条件中的id可以换为任何能表识记录顺序的字段。
在中小型的开发团队或开发项目中,很多人选择了jsp+javabean的开发模式,但这种模式下,sql语句应该写在什么位置,很多人,包括我自己都会走很多的弯路。
很多书上要么推荐sql语句写在bean中,让jsp调用即可(理由是这样子比较规范),要么推荐sql语句写在jsp文件中(理由是方便开发,开发速度很快),但我在实际开发中,发现采用上述两种方式都不是很好,下面我将我的方法说一下,希望得到大家的指正。
我认为在做列表查询时,即按照某种条件查询某个表,一行一行的显示时,sql语句应该写在jsp中,因为表中肯定会有些字段需要将代码转换成实际的含义,需要两个或更多的表关联查询,如果写在bean中,则要将返回结果再用bean进行转换,这种运行方法是非常不好的,而且也会严重影响数据库的运行速度。这时,若将sql语句写在jsp中,执行放在bean中执行,这就加快了数据库的查询速度。相反如果写在bean中,开发及维护都会很不方便(因为bean基本上都是单表操作的)。
原则:
/*
* created by intellij idea.
* user: administrator
* date: mar 26, 2002
* time: 3:24:12 pm
* to change template for new class use
* code style | class templates options (tools | ide options).
*/
package com.chinacountry.databases;
import java.sql.*;
import java.util.stringtokenizer;
public class conndb
{
string sdbdriver = "org.gjt.mm.mysql.driver";
string sconnstr = "jdbc:mysql://10.100.27.13:3306/db1";
- 更多文章:
- · Give the New PIVOT and UNPIVOT Commands in SQL Server 2005 a Whirl
- · Give the New PIVOT and UNPIVOT Commands in SQL Server 2005 a Whirl
- · SQL恢复XP_CMDSHLL,以及XPLOG70.DLL被删,直接用SQL连接器开启3389
- · SQL入侵教程
- · 一个方便的数据更新器-SqlDataUpdater
- · 十大绝招保护SQL Server数据库安全
- · SQL 注入技术详解
- · SQL Server 2000 Reporting Services: 怎样根据用户的语言偏好显示本地化的信息
- · 导入Excel电子表格数据到SQL Sever数据库的另一种方法
- · 在ASP中使用SQL语句之3:LIKE、NOTLIKE和BETWEEN
- · PL/SQLDEVELOPER基本用法详解
- · Mysql 4.x
- · BCB 6 sp4 + SQL Server 2k 存取JPEG图像,绝对好用!
- · ORACLE 常用的SQL语法和数据对象
- · SQLINSERT语法的具体使用技巧一例
- · VB/ASP 调用 SQL Server 的存储过程
- · 在SQL中使用convert函数进行日期的查询
- · FC4: Snort+mysql+Apache(with mod_ssl)+php+ACID安装日志
- · 根据表名自动生成INSERT,UPDATE,DELETE,SELECT的SQL语句
- · 简单查询和联合查询两方面介绍SQL查询语句

