在数据访问层对数据库进行操作的设计上,主要有这么几种:拼接字符串,带构造参数的基本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返回也不错。具体问题还要具体分析,把握平衡。

转载于:https://www.cnblogs.com/javaspring/archive/2011/11/08/2656589.html

解析数据访问层操作数据库的方式相关推荐

  1. [wayfarer]PetShop数据访问层之数据库访问设计

    原文地址: http://www.cnblogs.com/wayfarer/archive/2006/04/21/381315.html <解剖PetShop>系列之二 二.PetShop ...

  2. 数据访问层之数据库访问设计(转)

    在PetShop中,系统需要处理的数据库对象分为两类:一是数据实体,对应数据库中相应的数据表.它们没有行为,仅用于表现对象的数据.这些实体类都被放到Model程序集中,例如数据表Order对应的实体类 ...

  3. petshop4.0 详解之二(数据访问层之数据库访问设计)

    在系列一中,我从整体上分析了PetShop的架构设计,并提及了分层的概念.从本部分开始,我将依次对各层进行代码级的分析,以求获得更加细致而深入的理解.在PetShop 4.0中,由于引入了ASP.Ne ...

  4. PP团队圣经巨著《Application Architecture Guide2.0》14章-数据访问层

    第十四章 数据访问层指导 概览 这一章主要描述设计数据访问层时要注意的主要原则.它们覆盖了设计数据访问层遇到的通常问题及错误.下面的图表展示了数据层怎样嵌入一个通用的应用架构. (cnblog我的图片 ...

  5. 企业级应用架构(三)三层架构之数据访问层的改进以及测试DOM的发布

    在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层能够支持一切数据访问技术,如Ado.n ...

  6. java三层架构(表示层,业务逻辑层,数据访问层,与两层的区别,三层架构的优缺点)

    目录 1 什么是三层 2 为什么使用三层 3 与两层的区别 1 什么是三层 UI(表现层): 主要是指与用户交互的界面.用于接收用户输入的数据和显示处理后用户需要的数据. BLL:(业务逻辑层): U ...

  7. ASP.NET数据库访问系列教程01-概述篇 创建数据访问层(下)

    ASP.NET数据库访问系列教程 本教程深入探讨了基于ASP.NET 2.0技术的数据库访问方法和模式.这些介绍非常简明,并且提供了一步步的指导和大量的截屏. 该系列教程包括: 概述篇 基础报表 主/ ...

  8. ASP.NET数据库访问系列教程01-概述篇 创建数据访问层(中)

    ASP.NET数据库访问系列教程 本教程深入探讨了基于ASP.NET 2.0技术的数据库访问方法和模式.这些介绍非常简明,并且提供了一步步的指导和大量的截屏. 该系列教程包括: 概述篇 基础报表 主/ ...

  9. 架构设计-数据访问层简述

    在前面简单描述了下服务层,SOA面向服务架构,架构设计-业务逻辑层,以及一些面面向设计原则理解和软件架构设计箴言.这篇博客我们将继续进入我们的下一层:数据访问层.无论你用的是什么开发模式或者是业务模式 ...

最新文章

  1. ant design后台模板-1.前端环境搭建
  2. 机器学习实战-第二章代码+注释-KNN
  3. 对于数据库视图的一些理解
  4. 基于51最小系统的超声波测距
  5. JMeter接口性能测试
  6. 【蓝牙串口无线烧写程序】适用于STM32F103和STM32F107的Bootloader
  7. 数据平滑处理——log1p()和exmp1()
  8. 期货大佬给交易者的交易箴言,值得珍藏品读!
  9. 基于JAVA自行车在线租赁管理系统2021计算机毕业设计源码+系统+lw文档+部署
  10. 关于PEND SV的引入思考
  11. 毕业了,异地恋只能分手吗?
  12. 广告过滤算法实现及优化
  13. 分辨率与观赏距离和屏幕尺寸的关系
  14. 【教程】笔记本装Win10+Deepin双系统|详细
  15. LAMP - 学习/实践
  16. 基于Java的物资租赁管理系统 MYSQL
  17. 小米红米1S 电信/联通版 专用TWRP2.8.1.1中文版 (全屏触摸/支持MTP挂载内外置存储)...
  18. zuk如将手机更新到Android10,ZUI新升级:ZUK宣布支持全机型升级Android N系统
  19. 51单片机入门指南系列:一、前期准备
  20. 四旋翼数学模型——动力模型

热门文章

  1. 自然语言处理 —— 2.7负采样
  2. sparseTM的公式理解
  3. c语言模拟试题快速排序,快速排序(东软喜欢考类似的算法填空题,又如堆排序的算法等)...
  4. java连接sql数据库代码_Java如何连接Sql的数据库
  5. python采用的编码是什么意思_深入浅出地,彻彻底底地理解Python中的编码
  6. wordpress插件翻译不生效_谷歌浏览器自带翻译功能如何设置?不喜欢用插件的快来看...
  7. html5双波浪线怎么添加,在WPS中如何给段落添加双波浪线边框
  8. java flex xml文件_Flex xml套接字到Java xml套接字
  9. 不会和容器一起启动_一起学习docker05-docker容器
  10. yamlip 安装_prometheus.(1).yaml安装