在数据访问层对数据库进行操作的设计上,主要有这么几种:拼接字符串,带构造参数的基本Sql语句,存储过程,视图等。因为这次做系统主要是为了促进我们学习,所以在本次机房收费系统中,我分别尝试了这几种方式。
举几个例子:
A、根据条件查询上下机记录时,采用带参数的Sql语句,以上下机记录表,学生信息表,上机卡信息表为基表进行联合查询。
B、在添加结账信息,查询充值记录和卡内余额等时采用的是带输入参数或输出参数的存储过程。在创建存储过程时,还尝试采用了控制语句和内置函数,尤其是添加结账信息时。
C、查询学生基本信息的时候,牵扯到了视图的方式,采用了拼接字符创的形式去查询由上机卡和学生信息表为基表建立的视图。
下面,根据我在采用这几种方式时的体会,比较他们各自的优缺点:
1、采用拼接字符串是肯定不可取的,虽然可以可以根据需要随时在客户端自定义Sql语句,但这样很危险,例如Sql语句注入漏洞问题。
2、采用构造函数基本Sql语句应对简单的查询还可以,也比较安全,如果是比较复杂的查询,会把人逼疯的(例如联合查询7,8张表)
举个例子:
这是我在查询上下机记录时用到的一段带参数的Sql语句,这里牵扯到三张表,采用内连接。
selectoor_CardID,stu_StuName,stu_Department,stu_Grade,oor_OnDate,oor_OnTime,oor_Computer
fromtb_OnOffRecord inner join tb_CardInfo
on oor_CardID=cif_CardID and oor_CardID=@CardID and cif_State=@CardState and oor_OffDate is null and oor_State=@CardState
inner jointb_StudentInfo on cif_StuID=stu_pk_StuID
因为数据库考虑到联合查询,所以字段前加了前缀,如果没有前缀,那么一些字段,例如CardID前还要加上表名,那就更复杂了。(这也体现了字段前缀的好处)
3、视图和基本sql语句的直接区别在于:sql语句多一道网络传输,而视图是直接执行数据库的视图。存储过程也是这样,存储过程为什么快也有这个原因,也就是说视图和存储过程只需要传输一个名称即可,而sql语句可能要传输大量的字符串,视图和存储过程显然会增加服务器数据库负担。
4、存储过程和视图的区别,主要体现在视图是可视化的联合查询,而存储过程不是,只不过视图更直观,而且你可以像查询表一样去查询视图,而不用考虑那些什么左连接右连接之类的语句。对于非常复杂的链接表来说(如果七八个表连在一起,还不是简单的单链),你写SQL语句会把大脑逼疯的,用视图就可以大大减轻工作难度。
用另一种方式来表达,视图和存储过程降低了应用程序和物理表的耦合。存储过程是字符串叙述的,而视图更加直观,要达到的效果有一定相似度。
采用哪种方法要看具体的程序应用场景了,显然直接拼接字符串是不可取的,如果考虑执行效率而不考虑服务器数据库压力,用视图和存储过程的办法返回DataTable很简单,如果项目比较小,客户端的资源随便用.可以直接使用构造参数的基本sql语句,牵扯到几张表时,在客户端获取数据后,从多个返回的DataTable中取出数据,用代码生成一个新DataTablee返回也不错。具体问题还要具体分析,把握平衡。
分享到:
相关推荐
如果是使用ORM框架如Hibernate或MyBatis,可以编写DAO(数据访问对象)层的方法,通过配置好的SQL映射文件将对象持久化到数据库。 在实际应用中,为了保证数据的完整性和一致性,可能需要考虑事务管理。例如,如果...
2018年上半年的数据库系统工程师下午真题及答案解析提供了深入理解这一专业领域的机会。下面将详细探讨相关知识点。 一、数据库系统基础 1. 数据模型:包括关系型、层次型、网状型和NoSQL等,其中关系型数据库是最...
5. 数据访问层(DAL):在开发大型系统时,通常会创建一个独立的数据访问层,封装所有与数据库相关的操作。这样可以提高代码的可重用性和可维护性。 6.事务处理:在涉及多表操作或数据一致性要求较高的场景下,事务...
"三层数据库"这个标签进一步强调了代码结构的组织方式,三层架构是软件开发中的一个重要概念,它将应用分为三个主要部分:表示层(用户界面)、业务逻辑层(处理业务规则和逻辑)和数据访问层(与数据库进行交互)。...
2. ADO(ActiveX Data Objects):这是微软提供的一个更高层次的数据访问接口,简化了数据库编程。书中可能讲解了如何使用ADO连接数据库,执行查询,处理结果集,以及事务管理。 3. MFC数据库类:MFC提供了...
首先,"通用数据库访问库"是一个专门设计用于简化数据库操作的库,其主要目标是提供一种抽象层,使得开发者无需关心底层具体的数据库管理系统(DBMS),如SQL SERVER、ORACLE、DB2或ACCESS等,只要这些数据库提供了...
"三层架构的数据访问层"则意味着内容可能涉及软件开发中的常见架构模式,尤其是数据处理层的实现,这对于大型系统的设计和维护至关重要。 **ADO.NET介绍** ADO.NET是微软.NET Framework的一部分,它提供了一组用于...
11. **Entity Framework**:微软提供的另一款ORM框架,它抽象了数据库访问层,允许开发者以面向对象的方式操作数据库。理解实体模型、上下文、仓储模式等概念,提高开发效率。 12. **错误处理和性能优化**:了解...
数据层,也称为数据访问层,是软件架构中的一个关键组件,负责处理所有与数据库相关的任务。它提供了一种抽象,使业务逻辑层和用户界面层可以与数据库进行交互,而无需直接操作数据库。在C#中,数据层通常包含一系列...
"vc/mfc数据库解析类"是专为MFC设计的一个自定义组件,用于解析数据库并获取数据表、字段名及其类型,简化数据库操作流程。这个类通常包含对数据库的连接、查询、获取元数据等关键功能。 `MyMdb.cpp`和`MyMdb.h`这...
事务是数据库操作的基本单位,确保数据的一致性和完整性。例如,银行转账操作必须在单个事务中完成,以防止出现半途失败导致数据不一致的情况。习题可能涉及如何编写事务控制语句,以及理解ACID(原子性、一致性、...
其次,数据访问层(DAL)的设计是数据库开发的重要部分。一个良好的DAL能够封装数据库操作,使业务逻辑层(BLL)与数据存储分离,提高代码的可维护性和重用性。在这些源码中,可能会包含接口和实现这些接口的类,...
7. 数据验证:介绍在数据库操作中如何进行数据验证,防止无效数据的输入。 8. 数据缓存和数据更新:可能包括如何使用缓存策略提高性能,以及如何处理数据库的异步更新问题。 9. 报表生成:可能包含利用FastReport...
它与业务逻辑层通过网络通信,而业务逻辑层则负责处理复杂的业务规则和数据验证,数据访问层则主要处理数据库的读写操作。 RTC的优势在于其“薄”特性,它不承担大量的计算任务,而是将大部分复杂运算交给服务器...
在提供的"DAO(JBuilder)"文件中,DAO代表数据访问对象(Data Access Object),这是一种设计模式,它封装了对数据库的所有访问,使得业务逻辑层与数据存储层解耦。JBuilder是一种早期的Java集成开发环境,可能用于...
PDO是PHP 5引入的一种数据库访问层,支持多种数据库,提供了一种统一的API来操作数据库,具有良好的安全性和性能。mysqli则是专为MySQL设计的扩展,直接与MySQL服务器通信,提供了面向对象和面向过程两种编程风格,...
Hibernate通过映射Java类到数据库表,使得开发者可以用面向对象的方式处理数据库操作,避免了直接编写SQL语句的繁琐。这使得代码更加简洁,易于维护。在Hibernate中,实体类代表数据库表,实体类的属性对应表的列,...
- **数据库管理系统**(Database Management System, DBMS): 位于用户与操作系统之间的一层数据管理软件,为用户或应用程序提供访问数据库的方法。 **2. 数据独立性** - **概念**: 指应用程序与数据的逻辑结构、...
在数据访问层,Spring MVC可以与各种持久化技术集成,包括JPA。 JPA通过Hibernate、EclipseLink等ORM工具实现,它允许我们定义Java实体类,这些类可以直接映射到数据库表。JpaRepository接口扩展了JPA的...