Scala 数据库访问库:Scala Slick
“tony-hu”通过精心收集,向本站投稿了8篇Scala 数据库访问库:Scala Slick,下面是小编为大家带来的Scala 数据库访问库:Scala Slick,希望大家能够喜欢!
篇1:Scala 数据库访问库:Scala Slick
Slick 是 TypeSafe 推出的 Scala 数据库访问库,开发者可以使用 Scala 语言风格来编写数据查询,而不是用 SQL,
示例代码:
object Coffees extends Table[(String, Int, Double)](“COFFEES”) { def name = column[String](“COF_NAME”, O.PrimaryKey) def supID = column[Int](“SUP_ID”) def price = column[Double](“PRICE”) def * = name ~ supID ~ price}Coffees.insertAll( (“Colombian”, 101, 7.99), (“Colombian_Decaf”, 101, 8.99), (“French_Roast_Decaf”, 49, 9.99)) val q = for { c <- Coffees if c.supID === 101 // ^ comparing Rep[Int] to Rep[Int]!} yield (c.name, c.price)println(q.selectStatement)q.foreach { case (n, p) =>println(n + “: ” + p) }
项目主页:www.open-open.com/lib/view/home/136076354
篇2:ADO.NET数据库访问技术
作者:Web_凳子君 字体:[增加 减小] 类型:
本篇文章主要介绍了ADO.NET数据库访问技术以及在线或离线访问数据库的实现步骤,有需要的朋友可以参考下
一. ADO.NET的定义
ADO.NET来源于COM组件库ADO(即ActiveX Data Objects),是微软公司新一代.NET数据库的访问模型,是目前数据库程序设计人员用来开发基于.NET的数据库应用程序的主要接口,它利用.NET Data Provider(数据提供程序)进行数据库的连接和访问,通过ADO.NET数据库程序能够使用各种对象来访问符合条件的数据库内容,让提供数据库管理系统的各个厂商可以根据此标准开放对应的.NET Data Provider,这样设计数据库应用程序人员不必了解各类数据库底层运作的细节,只要掌握ADO.NET所提供对象的模型,便可访问所有支持.NET Data Provider的数据库。
ADO.NET结构模型如下所示:
图1. ADO.NET结构模型
ADO.NET是一个类库,这些类提供了很多的对象,可用于完成数据库连接和增删查改等操作。其中包括如下五个对象: 1)Connection:用来连接数据库(SQL Server使用的是SqlConnection对象); 2)Command:用来对数据库执行SQL命令,如增删查改等操作; 3)DataReader:用来从数据库中返回只读数据,用数据源填充DataSet对象; 4)DataAdapter:与DataSet对象相结合使用,实现对数据库的控制; 5)DataSet:可看作离线时内存中的数据库; 这五个对象提供了两种读取数据库的方式; 第一种方式:使用Connection、Command、DataReader,其权限只能读取或查询数据库; 第二种方式:使用Connection、Command、DataAdapter、DataSet,其权限能进行各种数据库的操作。 ADO.NET读取数据库操作示意图:
图1. ADO.NET结构模型
二. 使用ADO.NET在线访问数据库的步骤(这里用的是SQL Server 数据库)
1. 连接数据库
直接上一段代码:
using System.Data.SqlClient;string source = “server=(local); integrated security=SSPI; database=myDateabase;User ID=sa;pwd=sa”; SqlConnection conn = new SqlConnection(source); conn.Open; // 对数据库数据进行操作 conn.Close();
(1). 首先添加命名空间System.Data.SqlClient;
(2). 定义数据库连接字符串:
第一种方法:直接把数据库连接字符串存放在字符串对象中,如上代码所示;
第二种方法Web:将数据库连接信息存放在web.config配置文件中,然后通过使用ConfigurationStringSettings类进行调用。来个例子说明一下:
(a). 首先,在web.config配置文件的部分定义数据库连接信息:
(b). 在项目文件中,添加对Configuration的引用,在头部添加using System.Configuration。然后定义数据库连接字符串为:
代码如下:
string connstring = ConfigurationManager.ConnectionStrings[“myDatabase”].ConnectionString;
备注:必须添加对System.Configuration程序集的引用,才能解析上述代码中使用的ConfigurationManager类。
2. 创建数据库连接
1)创建Connection对象:
string conn = new SqlConnection(connString);
2)打开数据库: conn.Open(); 一般情况下,当在.NET中使用“稀缺”的资源时,如数据库连接、窗口或图形对象,最好确保每个资源在使用完毕后立即关闭。尽管.NET的设计人员实现了自动垃圾收集机制,垃圾最终会被回收,但仍需要尽可能早地释放资源,以避免出现资源匮乏的情况。 当编写访问数据库的代码时,因为使连接打开的时间略长于需要的时间,就可能影响其他会话。在极端的情况下,不关闭连接可能会使其他用户无法进入一整组数据表,极大地降低应用程序的性能。主要有两种方式可以确保数据库连接等类似的“稀缺”资源在使用完后立即释放。这两种方式如下: (1)第一种方式:采用try...catch...finally语句块 确保在finally中关闭任何已打开的连接。
try { // open the connection conn.Open(); // 对数据库数据进行操作 } catch (SqlException ex) { // log the exception } finally { conn.Close(); }
在给定的方法中可能会打开许多资源,这样try...catch...finally块的层次有时候不容易看清,
还有一种方式可以确保资源的关闭――using语句。 (2)使用using语句块
using(SqlConnection conn = new SqlConnection(connstring)){ // Open the connection conn.Open(); // 对数据库数据进行操作 }
无论块是如何退出的,using子句都会确保关闭数据库连接。
3. 创建数据库操作命令:
Connection对象与数据源建立连接后,使用Command对象对数据源执行查询、插入、修改和删除等操作。
(1) 创建SQL数据库操作命令: sqlQuery查询语句具体规则请详见我的系列文章:【读书笔记】SQL Server查询语句_邓智容 (2) 创建Command对象:
(a). 方法一:
代码如下:
SqlCommand command = new SqlCommand(); command.Connection = conn; command.CommandText = “SQL语句”;
(b). 方法二:
SqlCommand command = new SqlCommand(“SQL语句”, conn);
备注: 1). SQL查询语句若含有C#程序的变量并以字符串形式连接,则应注意数据为非数字的变量应用单引号括起来; 2). 在SQL查询语句中使用参数化查询语句的话,譬如:
command.CommandText = “SELECT * FROM myTable WHERE siteName=@siteName”;
当需要给该参数赋值时,可以使用Command对象建立参数对象,然后再赋值:
代码如下:
command.Parameters.Add(new SqlParameter(@siteName, siteName)); command.Parameters[“@siteName”].Value = “#”;
备注: 在.Net Framework 2.0中SqlClient增加了AddWithValue(string parameterName, object value)方法。该方法简化了调用储存过程的输入参数过程,在运行时对所输入的数据类型进行判断,获取对应的数据库类型。 因此该方法在运行效率上比用 Add(string parameterName, SqlDbType sqlDbType, int size, string sourceColumn)方法要低。 在效率要求较高的地方仍然建议使用Add()方法,其它场合可以使用AddWithValue()简化代码编写量。
4. 执行sqlQuery命令:
定义好命令后,就需要执行它。执行的语句有多种方式,这取决于要从命令中返回什么数据。Command类提供了下述可执行的命令: (1) ExecuteNonQuery() ―― 执行命令,但不返回任何结果。一般用于UPDATE、INSERT或DELETE语句中,其中唯一的返回值是受影响的记录个数。但如果调用带有输出参数的存储过程,该方法就有返回值。 (2) ExecuteReader() ―― 执行命令,返回一个类型化的IDataReader。是从数据源中选择某些数据的最简单快捷的方法。 (3) ExecuteScalar() ―― 执行命令,返回结果集中的第一行第一列的值。
5. 对数据库操作完毕后关闭数据库连接:
conn.Close();
三. 离线数据库访问
DataAdapter对象主要在Connection对象和DataSet对象之间执行数据的传输工作,将数据填充到DataSet对象中,也可把DataSet对象更新后的数据返回到数据源中,也可架构在Command对象上,通过CommandBuilding对象生成DataAdapter的Insert、Update和Delete等SQL操作命令。使用DataSet和DataTable对象访问数据源后,ADO.NET会自动离线,在内存中处理数据,如有修改数据的操作,将自动重新连接数据源,更新数据库。DataSet对象、DataAdapter对象与数据源之间的关系如下:
DataSet <--->DataAdapter <--->数据源
下面是使用DataAdapter进行离线数据库访问的操作步骤:
1. 创建DataAdapter、DataTable对象(使用的是SQL Server数据库)
代码如下:
SqlAdapter da = new SqlAdapter(“sqlQuery查询语句”, conn); DataSet = ds = new DataSet(); DataTable dt = new DataTable();
2. 将数据填充到DataTable对象
da.Fill(ds, “TableName”); dt = ds.Tables[“TableName”];
3. 对DataTable中的数据进行处理 TataTable对象的属性和方法有:
名称 属性/方法 说明
Rows.Add() 方法 插入新数据行
Rows[n].Delete() 方法 删除第n行的记录
Rows.Count 属性 获取行数
Rows[i][“ColumnName”] 属性 获取第i行、列名为ColumnName的值
Rows[i][j] 属性 获取第i行、第j列的值
还有一种数据查询技术:LINQ。下回再讨论。
篇3:数据库访问笔试经验
数据库访问笔试经验
在茫茫的大海上有许多的岛,其中一个岛的名字叫做“应用程序岛”。这座岛上商业非常发达,高楼大厦、店铺林立。但是岛的面积不够大,没有地方建立仓库。所以市长决定,把临近的一座小岛开发出来,专门作为数据仓库来使用,这座岛的名字就叫“数据库岛”。
市长在数据库岛上面建立了一个MSSQL数据库,这样各个商场、超市就可以把自己的货物放进去了。两个岛相邻很近,为了便于运输,所以直接在两个岛之间建立了五座大桥。并且成了一个“数据访问池”的部门来专门管理这五座桥。
有一个叫command的家伙很聪明,觉得商机来了,于是他就成立了一家Command物流公司,专门负责两座岛之间的货物运输。物流公司成立了几个下属部门:Connection、DataReader。Connection负责与连接池的联系,申请大桥的临时使用权,并且还要提供车辆。 DataReader负责装卸货物。
好了,万事具备只欠东风。物流公司成了好了之后就坐等客户上门了。不久来了一位客户,是岛上的一个书店,他们购进了一批图书,需要送到数据库岛的仓库里。
【添加记录的情况】
Command接到了这个任务很高兴,终于开张了。领导当然不能自己亲自去干活了,于是派出了明星员工cm007来负责这个任务。
SqlCommand cm007 = new SqlCommand();
Cm007从书店那里得到了指令(就是SQL语句)和货物,来到Connection部门。
cm007.CommandText = “”;
Connection部门派出了得力员工cn007
SqlConnection cn007 = new SqlConnection();
cm007.Connection = cn007;
cn007开着车,带着cm007来到了大桥,由cn007和连接池联系,想要申请一座大桥的临时使用权。
cn007.Open();
连接池得到了这个申请之后,查看了一下大桥的使用情况,现在五座大桥都没有人使用,于是把001号大桥的使用权交给了cn007。这个时候,这座001号大桥就由cm007他们独占了,其他任何人都不可以使用。而且是按照独占时间来收取费用的。
一行人通过001号大桥来到了数据库,cm007把指令交给了数据库管理员开始交货。数据库管理员按照指令,把货物放到了指定的.位置。办好之后cm007带着数据库的确认证明,从大桥返回到了应用程序岛。离开大桥后,cn007又给连接池发了一个申请。
cn007.Close();
连接池得到了这个申请后,收回了001号大桥的使用权,这样其他人就又可以使用这个大桥了。
cm007一行人来到了书店,把数据库管理员的证明交给了书店,客户很满意,这个任务也就完成了。回到物流公司交差。
cn007.Dispose();
cm007.Dispose();
command很高兴,首战告捷,以后的生意一定会很红火呀。
【提取(查询)记录,向上层直接返回DataReader的情况】
第二天,那家书店又来找command,要从数据库岛提五本书过来。又来生意了,太好了,于是又派出了cm007和cn007。不过这次和昨天不太一样,昨天是送货到仓库,今天是从仓库提货,
这次还需要DataReader派装卸工来配合。
轻车熟路,cn007开着车带着大家来到了大桥,cn007申请了一座大桥的使用权,来到了数据库岛,cm007把指令交给了数据库管理员开始提货。不过这次却遇到了一点小问题,运输车的运载量的太小了,一次只能运一本书(一条记录)。可是这次却需要提五本书(五条记录),没办法,只好多跑几趟了。
带上一本书(一条记录),来到了书店,书店老板很高兴,这么快就到了呀,赶快卸货上架吧。咦等等,怎么只有一本书呀。Cm007只好解释,我们的车运载量太小了,一次只能运一条记录,不过速度还是很快的呀。
书店老板想了想,也凑合了,那你们赶快运下一条记录吧。
如是这般,折腾了五趟,总算把货物全都运完了。
“等等”,cn007说,“大桥的使用权还没有交回去呢。”于是大家又来到了桥头,把使用权交了回去。
最后回到物流公司交差。
【改进,向上层返回DataTable】
这回command可高兴不起来了。大桥是按照占用时间来收费的,这么来回折腾,大桥的占用时间明显变长了,这就增加了成本呀。另外现在汽油这么贵,来回折腾烧的可都是钱呀,就不能跑一趟多运点吗?
于是command把大家召集过来一起商量这个事情。cn007说,大桥这一段没有什么办法可想了,一次只能运出来一条记录,这个也不知道是谁规定的,我们也改不了。不过从桥头到客户那里我们倒是可以想想办法,我有一个朋友,DataAdapter,他们也许会有办法。Command听了也没有什么其他的方法,那就把DataAdapter请过来,一起商量一下吧。
第二天,DataAdapter过来了,也带来了他的解决方案。其实也很简单,他们公司可以提供集装箱(就是DataTable),在桥头等待,货物运到的时候由DataReader装到集装箱里,然后立刻返回运第二批货物。等需要的货物全都装完了之后,在开着集装箱运到客户那里。
SqlDataAdapter da007 = new SqlDataAdapter();
DataTable dt007 = new DataTable();
da007.Fill(dt007);
这样就节省了大桥的占用时间,节省了成本。到客户的这段路程,集装箱跑一趟就可以了,省油。
这个方案不错,command欣然接受。
过了几天,书店又要提一批图书,这次采用了集装箱的方案,果然大大节省了成本,客户也很满意,虽然一开始要等待比较长的时间,但是好在一次性就可以得到全部的货物。
【多种返回类型:DataRow、object[]、object】
有一天又发现了一个新问题,书店只要一本书。就一本书,也弄一个集装箱?太浪费了吧。怎么办?干脆直接用DataRow吧。实在不行用object[]。对于一条记录也足够用了。
【实体类开始登场】
于是物流公司的生意是越来越红火了。有一家大型超市也找到了command,希望能够为超市运输货物。这可是一比大买卖呀,command当然是很高兴。大家一拍即合。
一开始合作的也很愉快,但是过了几天出现了一点小问题。
【DataTable的缺点】
超市的老板找到了command,“你们的集装箱确实挺好,但是有一个小问题呀。他们的样子都是一模一样的,只能通过外面的标签来区分里面的货物,这个太不方便了,而且还容易出错,昨天本来想运一批‘微波炉’,结果标签写错了,写成了‘光波炉’。幸好发现的及时,否则就赔大发了。你们能不能想个好点的办法呢?”。
command心想:“你们把标签写错了,和我有什么关系呢?”不过客户就是上帝呀,得罪不起,还得想个办法解决一下。
于是又把大家都召集过来一起商议。只是这次并没有上次那么顺利,想了不少办法,但是都不理想。正在一筹莫展的时候,面向对象公司的推销员来了。
篇4:ASP技术访问WEB数据库
ASP技术访问WEB数据库
一. 访问WEB数据库的多种方案
目前在WINDOWS环境下有多种访问WEB数据库的技术,主要有:
1.公共网关接口CGI(Common Gateway Interface)
CGI是较早实现的技术。适用于多种服务器平台,如UNIX、WINDOWS等,但CGI的开发成本高、维护困难、功能有限、不具备事务处理功能、占用服务器资源较多。
2. INTERNET数据库连接器IDC(Internet Database Connector)
IDC集成在ISAPI(Internet Server API)中,充分利用了DLL技术,易扩充,但编程较CGI更为复杂,只适用于小型数据库系统。
3. 先进数据库连接器ADC(Advance Database Connector)
ADC提供了ActiveX Control来访问数据库,它的主要特点是数据查询由用户端浏览器执行,因而需将服务器端数据库中的部分记录下载到用户端,系统开销较大、响应慢,只适用于特别频繁的数据库查询操作。
4. JAVA/JDBC语言编程
JAVA语言是一种面向对象、易移植、多线程控制的语言,可通过JDBC去连接数据库。用JAVA/JDBC编写的软件可移植性强,适用于多种操作系统,但其执行效率和执行速度还不理想,目前无法建立高效、高速的应用。
5. 动态服务器页面ASP(Active Server Page)
ASP是微软公司最新推出的WEB应用开发技术,着重于处理动态网页和WEB数据库的开发,编程灵活、简洁,具有较高的性能,是目前访问WEB数据库的最佳选择。
二. ASP简介
1.ASP访问数据库的原理
ASP是服务器端的脚本执行环境,可用来产生和执行动态的高性能的WEB服务器程序。
当用户使用浏览器请求ASP主页时,WEB服务器响应,调用ASP引擎来执行ASP文件,并解释其中的脚本语言(JScript 或VBScript),通过ODBC连接数据库,由数据库访问组件ADO(ActiveX Data Objects)完成数据库操作,最后ASP生成包含有数据查询结果的HTML主页返回用户端显示。
由于ASP在服务器端运行,运行结果以HTML主页形式返回用户浏览器,因而ASP源程序不会泄密,增加了系统的安全保密性。此外,ASP是面向对象的脚本环境,用户可自行增加ActiveX组件来扩充其功能,拓展应用范围。
2.ASP页面的结构:
ASP的程序代码简单、通用,文件名由.asp结尾,ASP文件通常由四部分构成:
1) 标准的HTML标记:所有的HTML标记均可使用。
2) ASP语法命令:位于<% %> 标签内的ASP代码。
3) 服务器端的include语句:可用#include语句调入其它ASP代码,增强了编程的灵活性。
4) 脚本语言:ASP自带JScript和VBScript两种脚本语言,增加了ASP的编程功能,用户也可安装其它脚本语言,如Perl、Rexx等。
3.ASP的运行环境
目前ASP可运行在三种环境下。
1) WINDOWS NT server 4.0运行IIS 3.0(Internet Information Server)以上。
2) WINDOWS NT workstation 4.0运行Peer Web Server 3.0以上。
3) WINDOWS 95/98运行PWS(Personal Web Server)。
其中以NT server上的IIS功能最强,提供了对ASP的全面支持,是创建高速、稳定的ASP主页的最佳选择。
4.ASP的内建对象
ASP提供了六个内建对象,供用户直接调用:
1) Application对象:负责管理所有会话信息,可用来在指定的应用程序的所有用户之间共享信息。
2) Session对象:存贮特定用户的会话信息,只被该用户访问,当用户在不同WEB页面跳转时,Session中的变量在用户整个会话过程中一直保存。Session对象需cookie支持。
3) Request对象:从用户端取得信息传递给服务器,是ASP读取用户输入的主要方法。
4) Response对象:服务器将输出内容发送到用户端。
5) Server对象:提供对服务器有关方法和属性的访问。
6) Object Context对象:IIS 4.0新增的对象,用来进行事务处理。此项功能需得到MTS(Microsoft Transcation Server)管理的支持。
5. ASP的主要内置组件:
1) Ad Rotator组件:用来按指定计划在同一页上自动轮换显示广告,用于WWW上日益重要的'广告服务。
2) Browser Capabilities组件:确定访问WEB站点的用户浏览器的功能数据,包括类型、性能、版本等。
3) Database Access组件:提供ADO (ActiveX Data Objects)来访问支持ODBC的数据库。
4) File Access组件:提供对服务器端文件的读写功能。
5) Content Linking组件:生成WEB页内容列表,并将各页顺
序连接,用于制作导航条。
此外,还可安装Myinfo、Counters、Content Rotator、Page Count等组件,用户也可自行编制Actiive组件,以提高系统的实用性。
6. Database Access组件ADO
WWW上很重要的应用是访问WEB数据库,用ASP访问WEB数据库时,必须使用ADO组件,ADO是ASP内置的ActiveX服务器组件(ActiveX Server Component),通过在WEB服务器上设置ODBC和OLEDB可连接多种数据库:如SYBASE、ORACLE、INFORMIX、SQL SERVER、ACCESS、VFP等,是对目前微软所支持的数据库进行操作的最有效和最简单直接的方法。
ADO组件主要提供了以下七个对象和四个集合来访问数据库。
1) Connection对象:建立与后台数据库的连接。
2) Command对象:执行SQL指令,访问数据库。
3) Parameters对象和Parameters集合:为Command对象提供数据和参数。
4) RecordSet对象:存放访问数据库后的数据信息,是最经常使用的对象。
5) Field对象和Field集合:提供对RecordSet中当前记录的各个字段进行访问的功能。
6) Property对象和Properties集合:提供有关信息,供Connection、Command、RecordSet、Field对象使用。
7) Error对象和Errors集合:提供访问数据库时的错误信息。
三. ASP访问数据库步骤
在ASP中,使用ADO组件访问后台数据库,可通过以下步骤进行:
1. 定义数据源
在WEB服务器上打开“控制面板”,选中“ODBC”,在“系统DSN”下选“添加”,选定你希望的数据库种类、名称、位置等。本文定义“SQL SERVER”,数据源为“HT”,数据库名称为“HTDATA”,脚本语言采用Jscript。
2,使用ADO组件查询WEB数据库
1) 调用Server.CreateObject方法取得“ADODB.Connection”的实例,再使用Open方法打开数据库:
conn = Server.CreateObject(“ADODB.Connection”)
conn.Open(“HT”)
2) 指定要执行的SQL命令
连接数据库后,可对数据库操作,如查询,修改,删除等,这些都是通过SQL指令来完成的,如要在数据表signaltab中查询代码中含有“X”的记录
sqlStr = “select * from signaltab where code like ‘%X%’”
rs = conn.Execute(sqlStr)
3) 使用RecordSet属性和方法,并显示结果
为了更精确地跟踪数据,要用RecordSet组件创建包含数据的游标,游标就是储存在内存中的数据。
rs = Server.CreateObject(“ADODB.RecordSet”)
rs.Open(sqlStr,conn,1,A)
注:A=1读取
A=3 新增、修改、删除
在RecordSet组件中,常用的属性和方法有:
rs.Fields.Count: RecordSet对象的字段数。
rs(i).Name: 第i个字段的名称,i为0至rs.Fields.Count-1
rs(i): 第i个字段的数据,i为0至rs.Fields.Count-1
rs(“字段名”): 指定字段的数据。
rs.Record.Count:游标中的数据记录总数。
rs.EOF: 是否最后一条记录。
rs.MoveFirst: 指向第一条记录。
rs.MoveLast: 指向最后一条记录。
rs.MovePrev: 指向上一条记录。
rs.MoveNext: 指向下一条记录。
rs.GetRows: 将数据放入数组中。
rs.Properties.Count:ADO的ResultSet或Connection的属性个数。
rs.Properties(item).Name:ADO的ResultSet或Connection的名称。
rs.Properties: ADO的ResultSet或Connection的值。
rs.close: 关闭连接。
4) 关闭数据库
conn.close()
四.查询WEB数据库举例
下面这段示例程序是访问SQL SERVER数据库的 signaltab表,表中有三个字段:code(代码字段,字符型,3位),class(分类字段,字符型,10位),memo(备注字段,字符型,20位)。程序中数据源DSN:HT、用户名:client、口令:passwd。
屏幕输入页面input.asp
<% @ language=javascript %>