`
thecloud
  • 浏览: 871894 次
文章分类
社区版块
存档分类
最新评论

解析数据访问层操作数据库的方式

 
阅读更多

在数据访问层对数据库进行操作的设计上,主要有这么几种:拼接字符串,带构造参数的基本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框架ef-orm.zip

    为什么我们不能在数据访问层上花费更少的时间和精力?  JPA1.0和早期的H框架,其思想是将关系型数据库抽象为对象池,这极大的限制了本来非常灵活的SQL语句的发挥空间。而本质上,当我们调用某H框架的session.get、...

    数据库审计系统基本原理与部署方式.pdf

    双向审计: 通过对双向数据包的解析、识别及还原,不仅对数据库操作请求进⾏实时审计,⽽且还可对数据库系统返回结果进⾏完整的还原和审计,包 括数据库命令执⾏时长、执⾏的结果集等内容; 操作⾏为 操作⾏为 内容...

    SQL编写规范(数据库操作规范)

     EXPLAIN PLAN的分析结果是用缩进的格式排列的,最内部的操作将最先被解读,如果两个操作处于同一层中,带有最小操作号的将首先被执行    目前许多第三方的工具如PLSQL Developer和TOAD等都提供了极其方便的...

    计算机二级C考试试题及答案解析(套题)

    其中DB(DataBase)即数据库,是统一管理的相关数据的集合DBMS即数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,为用户或应用完程序提供访问DB的方法。由以上可知,选C为正确答案。

    【《数据库与信息系统》复习题及答案】第5章数据库管理与保护.pdf

    MySQL 提供了用户访问控制机制,对用户访问数 据库及其包含的对象进⾏限制,在服务器、数据库和数据对象三个层次上进⾏安全管理,但 与微软的 SQL Server 不同,MySQL 不在操作系统层次对用户进⾏安全管理。...

    SQL Server数据库查询速度慢原因及优化方法

    4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一...

    深入解析Windows操作系统中文.part2.rar

    深入解析WINDOWS操作系统(第4版) ISBN:9787121039690 本书是著名的操作系统内核专家Mark Russinovich和David Solomon撰写的Windows操作系统原理的最新版著作,全面和深入地阐述了Windows操作系统的整体结构以及...

    pet shop 4.0 有详细架构文档 代码 三层解析

    《解剖PetShop》系列之二 PetShop数据访问层之数据库访问设计 8 《解剖PetShop》系列之三 PetShop数据访问层之消息处理 14 《解剖PetShop》系列之四 PetShop之ASP.NET缓存 22 《解剖PetShop》系列之五 PetShop之业务...

    数据库审计系统技术方案(1).docx

    对符合策略的网络操作行为进行解析、分析、记录、汇报,以关心用户事前规划预防,事中实时监控、违规行为响应,事后合规报告、事故追踪回放,关心用户加强内外部网络行为监管、幸免核心资产〔数据库、网络服务器等〕...

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    除了实现数据的增删改查,数据访问层还要提供一些与业务无关功能,例如面向对象的持久化与访问机制、本地事务与分布式事务支持、多数据库支持,这些机制或功能形成相对独立的逻辑领域,其主要目的有: <br>1、 ...

    MYSQL 数据库水平切分的实现原理解析

    看过一篇文章,学到一些东西,和大家共享! 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。...通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。

    Python基于DB-API操作MySQL数据库过程解析

    与任何底层数据库的交互都可以使用DB-API,因为DB-API在代码与驱动程序之间提供了一个抽象层,可以根据需要替换底层数据库,而无需丢弃现有的代码。 DB-API与底层数据库交互示例: ①代码 ⇆ ②使用DB-API ⇆ ③...

    DataGear数据可视化分析平台

    调试时,系统仅会在第一次启动时升级内置数据库(Derby),如果遇到内置数据库访问异常,需要查看 datagear-management/src/main/resources/org/datagear/management/ddl/datagear.sql 文件,从中查找需要更新的SQL...

    数据探查与可视化平台Superset.zip

    快速创建数据可视化互动仪表盘丰富的可视化图表模板,灵活可扩展细粒度高可扩展性的安全访问模型,支持主要的认证供应商(数据库、OpenID、LDAP、OAuth 等)简洁的语义层,可以控制数据资源在 UI 的展现方式与 ...

    数据库审计系统技术方案.docx

    对符合策略的网络操作行为进行解析、分析、记录、汇报,以帮助用户事前规划预防,事中实时监控、违规行为响应,事后合规报告、事故追踪回放,帮助用户加强内外部网络行为监管、避免核心资产(数据库、网络服务器等)...

    Play-DynamoDB:用于 Scala Play 框架的 DynamoDB API 和数据访问层

    该库背后的动机是为 DynamoDB 提供一个简单的异步数据访问层,并利用 Play 框架的原生 json 解析。 尽管 AWS sdk 确实有异步方法,但它使用了 java 期货,这会影响性能并且与 Play 不兼容。 此外,在 Java 中创建...

    herddb:JVM可嵌入的分布式数据库

    HerdDB设计用于快速“写入”和主键读取/更新数据访问模式。 HerdDB支持事务和“提交读取”隔离级别HerdDB使用Apache Calcite作为SQL解析器和SQL Planner基本概念像任何SQL数据库一样,数据以表的形式组织,并且表在...

    基于java的企业级应用开发:Spring Jdbc.ppt

    Spring JdbcTemplate的解析 针对数据库的操作,Spring框架提供了JdbcTemplate类,该类是Spring框架数据抽象层的基础。可以说,JdbcTemplate类是Spring JDBC的核心类。 接口JdbcOperations 抽象类JdbcAccessor 核心...

Global site tag (gtag.js) - Google Analytics