- coco
-
dbo
database owner
数据库的创建者,创建该对象的用户.
guest
顾客
能够访问数据库中对象的数据,
要求dbo分配权限给guest,
一般给他查看的权限select
dbo.是什么意思
DBO: Database Owner,意思是数据库的所有者.2023-06-16 14:29:203
sql的表名中的dbo是什么意思
dbo是用户名啊 你点击用户就可以看到有用户名为dbo的用户~~!2023-06-16 14:29:383
什么是DBO模式
DBO是设计建造运营的简化。DBO模式是一种国际通行的项目建设模式,具有单一责任“功能保证的特点,是支撑污水处理服务专业的典型模式,特别适合于污水厂这样的成套装置的建设。DBO的典型特点之一是单一责任主体比较明确。作为专业化的公司,既要负责设计,也负责后面的建设运营。专业化的公司由于设计和专业制造,可以缩短工期,提高运营效率,工程质量得到保证。此外,还负责运维管理及全生命周期节约成本。 *** 保持足够的掌控力,拥有项目的所有权,然后由我们来建设和运营,通过专业化的设计和综合性的服务可以降低整体的费用。2023-06-16 14:29:521
dbo有机碱是啥
有机碱的定义是很广泛的,一般情况下,有机碱都含有氮原子,例如胺类化合物和含氮杂环化合物。并不是所有的有机碱都可以被质子化,照广义的酸碱理论来说,有很多物质属于有机碱,醇的碱金属盐类,例如甲醇钠,乙醇钾,叔丁醇钾;有机金属化合物,如烷基锂试剂,格氏试剂;氢氧化季铵盐等。中文名有机碱外文名Organic base定义显碱性的有机化合物例如有机金属试剂,含氮杂环,生物碱有机碱介绍有机碱的定义是很广泛的,一般情况下,可以说有机碱就是就是分子中含有氨基的有机化合物,例如胺类化合物。按照广义的酸碱理论来说,又有很多物质属于有机碱,醇的碱金属盐类,例如甲醇钠,乙醇钾,叔丁醇钾;烷基金属锂化合物,例如丁基锂,苯基锂;胺基锂化合物,例如二异丙基胺基锂(LDA),六甲基二硅胺基锂(LiHMDS);这些有机碱不是普通意义上的碱,与通常我们接触到的碱性质上有显著的差异。凡是能给出电子对的都是碱凡是能接受电子对的都是酸吡啶就是比较常见的有机碱它能与盐酸成盐,叫吡啶盐酸盐生物碱(Alkaloid)为一类含氮的有机化合物,存在于自然界(一般指植物,但有的也存在于动物)。有似碱的性质,所以过去又称为赝碱。大多数生物碱均有复杂的环状结构,氮素多包括在环内,具有光学活性。但也有少数生物碱例外。如麻黄碱是有机胺衍生物,氮原子不在环内;咖啡因虽为含氮的杂环衍生物,但碱性非常弱,或基本上没有碱性;秋水仙碱几乎完全没有碱性,氮原子也不在环内……等。由于它们均来源于植物的含氮有机化合物,而又有明显的生物活性,故仍包括在生物碱的范围内。而有些来源于天然的含氮有机化合物,如某些维生素、氨基酸、肽类,习惯上又不属于“生物碱",所以"生物碱"一词还未有严格而确切的定义。已知生物碱种类很多,约在2,000种以上,有一些结构式还没有完全确定。它们结构比较复杂,可分为59种类型。随着新的生物碱的发现,分类也将随之而更新。分享你的世界我要分享见解,点击发布纠错欠一身债没钱还不想失信影响家人,在保定联系我们帮你停息挂账债务预期协商解决广告明天大胆满仓买入,这5只股票或将涨停,反正不收费,马上测测钱坤证券广告保定 季铵盐消毒液厂家季铵盐消毒液 量大从优关注消毒液的人也在看代工贴牌 产品代理 不含酒店 可随时携带,消字号认证 杀菌消毒 空气气溶胶消杀 100ml可定制河北福赛生物科技发展广告大家还在搜四甲基氢氧化铵四丁基硫酸氢铵十二烷基苯有机碱有哪些高中化学网课火碱价格九年级上册化学视频讲解视频硫氢化钠的用途广告高颜值主播在yy等你!赶快下载和女神互动!相关推荐有机碱_相关词语有机酸具有酸性的有机化合物查看词条强碱分为有机强碱无机强碱查看词条羟基常见的极性基团查看词条生物碱天然有机化合物查看词条无机物不含碳的那部分化合物查看词条官能团原子或原子团查看词条弱酸和强酸相对的酸查看词条酯化反应一类有机化学反应查看词条溶解性不能容纳更多的溶质查看词条非水溶液滴定法水以外溶剂滴定的方法查看词条词条贡献者该词条共有17人参与编辑,查看全部 词条有帮助,感谢贡献者意见反馈权威合作百科协议百度百科是免费编辑平台,无收费代编服务 | 详情Baidu 京ICP证030173号编辑传视频TA说在2023-06-16 14:30:001
SqlServer中的dbo是什么意思
dbo是一个用户,系统管理员。如何启用DAC功能 专用管理员连接功能以及注意事项1、只有系统管理员(sysadmin)角色相关成员可以使用DAC连接存取SQL Server(Local)本地连接2、一个执行个体只能存在一个DAC。 3、使用DAC通常是让DBA查询和排解SQL Server问题(当无法正常连接执行个体),4、好比执行sp_who2、Kill SPID、DBCC SQLPERF、DBCC DROPCLEANBUFFERS …等,使用DAC连接时,切勿执行需耗费大量资源的命令,如DBCC CHECKDB、DBCC SHRINKDATABASE..等5、使用DAC登录才能修改系统表或者查看系统表,以前SQL2000的时候你可以随便修改系统表,到了SQL2005就开始限制您了2023-06-16 14:30:101
SqlServer中的dbo是什么意思
SqlServer中的dbo:dbo是每个数据库的默认用户,具有所有者权限,即DbOwner 。2023-06-16 14:30:171
SqlServer中的dbo是什么意思
方法一1、打开sqlserver管理器,连接进入数据库,然后点击“新建查询”。2、如图,在编辑区输入“select @@version”,然后右键选择“执行”。3、在下方“结果”中可看到所用sqlserver数据库工具的相关信息。如图,可以看到是“Microsoft SQL Server 2005的开发版”,版本号是“9.00.1399.06”,系统是“windows NT 6.1”。方法二1、还有一种方法是在打开的资源管理器中的数据库根节点处右键,然后点击“属性”。2、然后在弹出的“属性”窗口点击“常规”选项,即可看到相关的信息了。方法三在打不开sqlserver时,还可以通过控制面板查看版本信息。(方法:依次点击“开始”→“控制面板”→“卸载程序”,然后找到sqlserver程序就可以查看了)2023-06-16 14:30:272
化学原料dbo是什么意思
指的是化学试剂对丁氧基苯甲烯。其具有特有的类似茴香的香气,味甜。主要采用醚化缩合法:以对甲苯酚和甲醇为原料,先进行醚化反应,然后与乙醛进行缩合反应而得。也可从茴香、八角茴香及小茴香等天然原料中,分馏提取。2023-06-16 14:30:361
dbo项目里都有那些设备
配电箱、隔离开关、断路器等。dbo项目的配电箱设备是在低压供电系统末端负责完成电能控制保护、转换和分配的设备,主要由电线、元器件(包括隔离开关、断路器等)及箱体等组成。dbo项目是电商全程性服务。主要包括三个阶段,Design设计策划、Build平台建设、Operate运营辅助。2023-06-16 14:30:451
在工程项目管理模式中,DBO是经常被人们提及的一种模式,其含义是( )。
【答案】:C知识点:工程项目承发包管理模式。DBO模式下承包商不仅承担工程的设计施工,在移交给业主之前的一段时间内还要负责其所建设工程的运营。2023-06-16 14:30:551
请问高手,建立数据库表之后,自动带一个[dbo].是什么意思
为什么,查询分析器中的 表名前加一个dbo 前缀答:是你的用户权限所致。如果你用SA登录,查询本服务器里的数据库是不用加DBO的。 另 如果你做跨服务器查询时就要用到DBO。 如 select * from sf11.rayben.dbo.table1 两个特殊数据库用户: dbo,数据库的拥有者,在安装sqlserver时,被设置到model数据库中,不能被删除,所以dbo在每个数据库中都存在。dbo是数据库的最高权力者,对应于创建该数据库的登陆用户,即所有的数据库的dbo都对应于sa帐户; guest,这个用户可以使任何已经登陆到sqlserver服务器的用户都可以访问数据库,即使它还没有成为本数据库的用户。所有的系统数据库除model以外都有guest用户。所有新建的数据库都没有这个用户,如果有必要添加guest用户,请用sp_grantdbaccess来明确建立这个用户。 至于你说的[]是为了区别表和字段与关键字重名。比如name 你就用[name] 便不会与sql的关键字重名了。 至于IDENTITY (1, 1)是自动增长列 数据加一条 该字段加1 Chinese_PRC_CS_AI_WS 前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。 排序规则的后半部份即后缀 含义: _BIN 二进制排序 _CI(CS) 是否区分大小写,CI不区分,CS区分 _AI(AS) 是否区分重音,AI不区分,AS区分 _KI(KS) 是否区分假名类型,KI不区分,KS区分 _WI(WS) 是否区分宽度 WI不区分,WS区分 区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。 区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项, 比较还将重音不同的字母视为不等。 区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。 区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项 ON[PRIMARY]表明是放在主文件组里面 主键的意思2023-06-16 14:31:141
在任何数据库中dbo用户可以删除吗?
在删除SQL Server用户时,有时会报错:Microsoft SQL Server错误: 15138删除对于用户失败,数据库主体在该数据库中拥有架构,无法删除。删除 对于 用户“*****”失败。 (Microsoft.SqlServer.Smo) 。下面将为您介绍两种的解决方法。其他信息:执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)解决方法一先删除此用户对应的架构,然后在删除对应的用户步骤1。SQL SERVER MANAGEMENT STUDIO -> 数据库 -> 安全性 -> 构架,先删除对应的构架2。SQL SERVER MANAGEMENT STUDIO -> 数据库 -> 安全性 -> 用户,删除对应的用户2023-06-16 14:31:211
关于DBO模式的说法,正确的有( )。
【答案】:A、B、D本题考查的是工程项目的承发包管理模式。DBO模式下,责任主体相对单一,比较明确,风险全部转移给DBO的主体,设计、施工、运营三个过程均由一个责任主体来完成。DBO模式也可以优化项目的全寿命周期成本。从时间角度看,DBO合同可以减少不必要的延误,使施工的周期更为合理;从质量角度看,DBO合同可以保证项目质量长期的可靠性;从财务角度看,DBO合同下仅需要承担简单的责任而同时拥有长期的承诺保障。但是,DBO模式责任范围的界定容易引起较多争议,招标的过程也较长,需要专业的咨询公司的介入。参见教材P27。2023-06-16 14:31:281
sql2005里有.dbo文件,mdf文件,请问他们有什么区别吗?
.dbo文件?sqlserver中,dbo 是具有在数据库中执行所有活动的暗示性权限的用户。是一个用户。.mdf文件。是指的数据库文件,所有的数据都存放在.mdf里面。另外和.mdf文件。对应的,是.ldf文件,数据库日志文件。存放处理数据的相应日志,这个文件可以没有,也能正常打开.mdf文件。希望楼主顺利。2023-06-16 14:31:371
SQL2005创建表,为什么前面有dbo.+表名?
是所有者默认架构;sa登陆名,对应的数据库用户和默认架构是dbo;系统管理员的默认架构是dbo所以为以上账号建的对象都是有dbo的,可以更改.在安全性里选择登陆名更改2023-06-16 14:31:463
sqlserver中的表所有者不是dbo怎么改成dbo的
sqlserver中的表所有者不是dbo怎么改成dbo的1:从下面的图片中就可以看出来,当前这个选中的表的所有者是"dxkj",并不是dbo,所以现在要把这个表的所有者改回dbo的,在该表上点击右键,选择“设计”,如下图:2:右键点击表名然后选择设计表,如下图3:在工具2023-06-16 14:31:541
请问DBO是项目融资的一重方式吗?
DBO是PPP的一种, PPP是英文“Public-Private Partnerships”的简写,中文直译为“公私合伙制”,简言之指公共部门通过与私人部门建立伙伴关系提供公共产品或服务的一种方式。由于PPP与传统的公用事业提供方式相比具有很多优越性,近二十年来,各国或国际组织都争相尝试将PPP的各种模式应用于本国或区域内的基础设施建设。从90年代初期开始,全球PPP项目迅猛增长,并于1997年达到顶峰。伴随1997年亚洲、俄罗斯和巴西经济危机的出现,全球PPP项目有所减少,之后在平稳中又开始逐渐回升。有资料表明,在未来15年内,全球发展中国家大约需要2万亿美元投资于基础设施建设。因此,未来若干年内,全球很可能会出现PPP项目建设的新高潮。常见的PPP分类如下:Operation and Maintenance Contract O&M 经营和维护Design Build DB 设计-建设Design Build Major Maintenance DBMM 设计-建设-主要维护Design Build Operate (Super Turnkey) DBO 设计-建设-经营(超级交钥匙)私人部门除承担DB和DBMM中的所有职能外,还负责经营该基础设施,但整个过程中资产的所有权仍由公共部门保留。Lease Develop Operate LDO 租赁-开发-经营Build Lease Operate Transfer BLOT 建设-租赁-经营-转让Build Transfer Operate BTO 建设-转让-经营Build Own Transfer BOT 建设-拥有-转让Build Own Operate Transfer BOOT 建设-拥有-经营-转让Build Own Operate BOO 建设-拥有-经营Buy Build Operate BBO 购买-建设-经营2023-06-16 14:32:031
sybase的user 、dbo、alias的区别
从字面意思去理解就可以了。user:使用者,表或者库的使用者一般是多个。dbo:database owner 数据库所有者,一般只有一位。alias:别名。比如一个user叫a,它可以有alias是b,所以,a有的所有的权限b也有。当然,这里的a也可以是指一个组。2023-06-16 14:32:121
什么是数据库
什么是数据库? 数据库是以某种文件结构存储的一系列信息表,这种文件结构使您能够访问这些表、选择表中的列、对表进行排序以及根据各种标准选择行。数据库通常有多个 索引与这些表中的许多列相关联,所以我们能尽可能快地访问这些表。 以员工记录为例,您可以设想一个含有员工姓名、地址、工资、扣税以及津贴等内容的表。让我们考虑一下这些内容可能如何组织在一起。您可以设想一个表包含员工姓名、地址和电话号码。您希望保存的其它信息可能包括工资、工资范围、上次加薪时间、下次加薪时间、员工业绩评定等内容。 这些内容是否应保存在一个表格中?几乎可以肯定不应该如此。不同类别的员工的工资范围可能没有区别;这样,您可以仅将员工类型储存在员工记录表中,而将工资范围储存在另一个表中,通过类型编号与这个表关联。考虑以下情况: Key Lastname SalaryType SalaryType Min Max 1 Adams 2 1 30000 45000 2 Johnson 1 2 45000 60000 3 Smyth 3 3 60000 75000 4 Tully 1 5 Wolff 2 SalaryType 列中的数据引用第二个表。我们可以想象出许多种这样的表,如用于存储居住城市和每个城市的税值、健康计划扣除金额等的表。每个表都有一个主键列(如上面两个表中最左边的列)和若干数据列。在数据库中建立表格既是一门艺术,也是一门科学。这些表的结构由它们的范式指出。我们通常说表属于1NF、2NF 或 3NF。 第一范式:表中的每个表元应该只有一个值(永远不可能是一个数组)。(1NF) 第二范式:满足 1NF,并且每一个非主键列完全依赖于主键列。这表示主键和该行中的剩余表元之间是 1 对 1 的关系。(2NF) 第三范式:满足 2NF,并且所有非主键列是互相独立的。任何一个数据列中包含的值都不能从其他列的数据计算得到。(3NF) 现在,几乎所有的数据库都是基于“第三范式 (3NF)”创建的。这意味着通常都有相当多的表,每个表中的信息列都相对较少。 从数据库中获取数据 假设我们希望生成一个包含员工及其工资范围的表,在我们设计的一个练习中将使用这个表。这个表格不是直接存在在数据库中,但可以通过向数据库发出一个查询来构建它。我们希望得到如下所示的一个表: Name Min Max Tully $30,000.00 $45,000.00 Johnson $30,000.00 $45,000.00 Wolff $45,000.00 $60,000.00 Adams $45,000.00 $60,000.00 Smyth $60,000.00 $75,000.00 我们发现,获得这些表的查询形式如下所示 SELECT DISTINCTROW Employees.Name, SalaryRanges.Min, SalaryRanges.Max FROM Employees INNER JOIN SalaryRanges ON Employees.SalaryKey = SalaryRanges.SalaryKey ORDER BY SalaryRanges.Min; 这种语言称为结构化查询语言,即 SQL,而且它是几乎目前所有数据库都可以使用的一种语言。SQL-92 标准被认为是一种基础标准,而且已更新多次。 数据库的种类 PC 上的数据库,如 dBase、Borland Paradox、Microsoft Access 和 FoxBase。 数据库服务器:IBM DB/2、Microsoft SQL Server、 Oracle、Sybase、SQLBase 和 XDB。 所有这些数据库产品都支持多种相对类似的 SQL 方言,因此,所有数据库最初看起来好象可以互换。每种数据库都有不同的性能特征,而且每一种都有不同的用户界面和编程接口。 ODBC 如果我们能够以某种方式编写不依赖于特定厂商的数据库的代码,并且能够不改变自己的调用程序即可从这些数据库中得到相同的结果,那将是一件很好的事。如果我们可以仅为所有这些数据库编写一些封装,使它们具有相似的编程接口,这种对数据库编程独立于供应商的特性将很容易实现。 什么是 JDBC? JDBC 是对 ODBC API 进行的一种面向对象的封装和重新设计,它易于学习和使用,并且它真正能够使您编写不依赖厂商的代码,用以查询和操纵数据库。尽管它与所有 Java API 一样,都是面向对象的,但它并不是很高级别的对象集. 除 Microsoft 之外,多数厂商都采用了 JDBC,并为其数据库提供了 JDBC 驱动程序;这使您可轻松地真正编写几乎完全不依赖数据库的代码。另外,JavaSoft 和 Intersolv 已开发了一种称为 JDBC-ODBC Bridge 的产品,可使您连接还没有直接的 JDBC 驱动程序的数据库。支持 JDBC 的所有数据库必须至少可以支持 SQL-92 标准。这在很大程度上实现了跨数据库和平台的可移植性。 安装和使用 JDBC JDBC 的类都被归到 java.sql 包中,在安装 Java JDK 1.4时会自动安装。然而,如果您想使用 JDBC-ODBC 桥。JDBC-ODBC 驱动程序可从 Sun 的 Java 网站 (http://java.sun.com/) 轻松地找到并下载。在您扩充并安装了这个驱动程序后,必须执行下列步骤: 将 jdbc-odbcclasses; 路径添加到您的 PATH 环境变量中。 将 jdbc-odbcclasses; 路径添加到您的 CLASSPATH 环境变量中。 JDBC 驱动程序的类型 Java 程序连接数据库的方法实际上有四种: 1. JDBC-ODBC 桥和 ODBC 驱动程序 -- 在这种方式下,这是一个本地解决方案,因为 ODBC 驱动程序和桥代码必须出现在用户的每台机器中。从根本上说这是一个临时解决方案。 2. 本机代码和 Java 驱动程序 -- 它用另一个本地解决方案(该平台上的 Java 可调用的本机代码)取代 ODBC 和 JDBC-ODBC 桥。 3. JDBC 网络的纯 Java 驱动程序 -- 由 Java 驱动程序翻译的 JDBC 形成传送给服务器的独立协议。然后,服务器可连接任何数量的数据库。这种方法使您可能从客户机 Applet 中调用服务器,并将结果返回到您的 Applet。在这种情况下,中间件软件提供商可提供服务器。 4. 本机协议 Java 驱动程序 -- Java 驱动程序直接转换为该数据库的协议并进行调用。这种方法也可以通过网络使用,而且可以在 Web 浏览器的 Applet 中显示结果。在这种情况下,每个数据库厂商将提供驱动程序。 如果您希望编写代码来处理 PC 客户机数据库,如 dBase、Foxbase 或 Access,则您可能会使用第一种方法,并且拥有用户机器上的所有代码。更大的客户机-服务器数据库产品(如 IBM 的 DB2)已提供了第 3 级别的驱动程序。 两层模型和三层模型 当数据库和查询它的应用程序在同一台机器上,而且没有服务器代码的干预时,我们将生成的程序称为两层模型。一层是应用程序,而另一层是数据库。在 JDBC-ODBC 桥系统中通常是这种情况。 当一个应用程序或 applet 调用服务器,服务器再去调用数据库时,我们称其为三层模型。当您调用称为“服务器”的程序时通常是这种情况。 编写 JDBC 代码访问数据库 用 ODBC 注册您的数据库 连接数据库 所有与数据库有关的对象和方法都在 java.sql 包中,因此在使用 JDBC 的程序中必须加入 "import java.sql.* "。 JDBC 要连接 ODBC 数据库,您必须首先加载 JDBC-ODBC 桥驱动程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 该语句加载驱动程序,并创建该类的一个实例。然后,要连接一个特定的数据库,您必须创建 Connect 类的一个实例,并使用 URL 语法连接数据库。 String url = "jdbc:odbc:Northwind"; Connection con = DriverManager.getConnection(url); 请注意,您使用的数据库名是您在 ODBC 设置面板中输入的“数据源”名称。 URL 语法可能因数据库类型的不同而变化极大。 jdbc:subprotocol:subname 第一组字符代表连接协议,并且始终是 jdbc。还可能有一个子协议,在此处,子协议被指定为 odbc。它规定了一类数据库的连通性机制。如果您要连接其它机器上的数据库服务器,可能也要指定该机器和一个子目录: jdbc:bark//doggie/elliott 最后,您可能要指定用户名和口令,作为连接字符串的一部分: jdbc:bark//doggie/elliot;UID=GoodDog;PWD=woof 访问MSSQL Server方法:(驱动程序需要:msutil.jar,msbase.jar,mssqlServer.jar) DBDriver=com.microsoft.jdbc.sqlserver.SQLServerDriver URL=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo username=sa password= maxcon=10 mincon=1 poolName=SkyDev 利用我们开发的数据库类,使用方法如下: DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost", 1433, "demo", "sa", "")); Connection con = DbO.getConnection(); //类代码(不含连接工厂实现) package skydev.modules.data; public final class SqlServerConnectionFactory extends ConnectionFactory { private final String dbDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; private String host; private int port; private String databaseName; public SqlServerConnectionFactory() { super.setDriverName(dbDriver); } /** * * @param host 数据库所在的主机名:如"localhost" * @param port SQL服务器运行的端口号,如果使用缺省值 1433,传入一个负数即可 * @param databaseName 数据库名称 * @param userName 用户名 * @param password 口令 */ public SqlServerConnectionFactory(String host, int port, String databaseName, String userName, String password) { this.setHost(host); this.setPort(port); this.setDatabaseName(databaseName); this.setUserName(userName); this.setPassword(password); init(); } private void init() { super.setDriverName(dbDriver); super.setUrl("jdbc:microsoft:sqlserver://" + host.trim() + ":" + new Integer(port).toString() + ";DatabaseName=" + databaseName.trim()); //super.setUrl("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo"); } …… //------------------------------------------------------------------------------------ 访问MySQL的方法: DBDriver=com.mysql.jdbc.Driver URL=jdbc:mysql://localhost/demo username= password= maxcon=5 mincon=1 poolName=zhengmao 访问数据库 一旦连接到数据库,就可以请求表名以及表列的名称和内容等信息,而且您可以运行 SQL 语句来查询数据库或者添加或修改其内容。可用来从数据库中获取信息的对象有: DatabaseMetaData 有关整个数据库的信息:表名、表的索引、数据库产品的名称和版本、数据库支持的操作。 ResultSet 关于某个表的信息或一个查询的结果。您必须逐行访问数据行,但是您可以任何顺序访问列。 ResultSetMetaData 有关 ResultSet 中列的名称和类型的信息。 尽管每个对象都有大量的方法让您获得数据库元素的极为详细的信息,但在每个对象中都有几种主要的方法使您可获得数据的最重要信息。然而,如果您希望看到比此处更多的信息,建议您学习文档以获得其余方法的说明。 ResultSet ResultSet 对象是 JDBC 中最重要的单个对象。从本质上讲,它是对一个一般宽度和未知长度的表的一种抽象。几乎所有的方法和查询都将数据作为 ResultSet 返回。ResultSet 包含任意数量的命名列,您可以按名称访问这些列。它还包含一个或多个行,您可以按顺序自上而下逐一访问。在您使用 ResultSet 之前,必须查询它包含多少个列。此信息存储在 ResultSetMetaData 对象中。 //从元数据中获得列数 ResultSetMetaData rsmd; rsmd = results.getMetaData(); numCols = rsmd.getColumnCount(); 当您获得一个 ResultSet 时,它正好指向第一行之前的位置。您可以使用 next() 方法得到其他每一行,当没有更多行时,该方法会返回 false。由于从数据库中获取数据可能会导致错误,您必须始终将结果集处理语句包括在一个 try 块中。 您可以多种形式获取 ResultSet 中的数据,这取决于每个列中存储的数据类型。另外,您可以按列序号或列名获取列的内容。请注意,列序号从 1 开始,而不是从 0 开始。ResultSet 对象的一些最常用方法如下所示。 getInt(int); 将序号为 int 的列的内容作为整数返回。 getInt(String); 将名称为 String 的列的内容作为整数返回。 getFloat(int); 将序号为 int 的列的内容作为一个 float 型数返回。 getFloat(String); 将名称为 String 的列的内容作为 float 型数返回。 getDate(int); 将序号为 int 的列的内容作为日期返回。 getDate(String); 将名称为 String 的列的内容作为日期返回。 next(); 将行指针移到下一行。如果没有剩余行,则返回 false。 Close(); 关闭结果集。 getMetaData(); 返回 ResultSetMetaData 对象。 ResultSetMetaData 您使用 getMetaData() 方法从 ResultSet 中获取 ResultSetMetaData 对象。您可以使用此对象获得列的数目和类型以及每一列的名称。 getColumnCount(); 返回 ResultSet 中的列数。 getColumnName(int); 返回列序号为 int 的列名。 getColumnLabel(int); 返回此列暗含的标签。 isCurrency(int); 如果此列包含带有货币单位的一个数字,则返回 true。 isReadOnly(int); 如果此列为只读,则返回 true。 isAutoIncrement(int); 如果此列自动递增,则返回 true。这类列通常为键,而且始终是只读的。 getColumnType(int); 返回此列的 SQL 数据类型。这些数据类型包括 BIGINT BINARY BIT CHAR DATE DECIMAL DOUBLE FLOAT INTEGER LONGVARBINARY LONGVARCHAR NULL NUMERIC OTHER REAL SMALLINT TIME TIMESTAMP TINYINT VARBINARY VARCHAR DatabaseMetaData DatabaseMetaData 对象可为您提供整个数据库的信息。您主要用它获取数据库中表的名称,以及表中列的名称。由于不同的数据库支持不同的 SQL 变体,因此,也有多种方法查询数据库支持哪些 SQL 方法。 getCatalogs() 返回该数据库中的信息目录列表。使用 JDBC-ODBC Bridge 驱动程序,您可以获得用 ODBC 注册的数据库列表。这很少用于 JDBC-ODBC 数据库。 getTables(catalog, schema,tableNames, columnNames) 返回表名与 tableNames 相符而且列名与 columnNames 相符的所有表的说明。 getColumns(catalog, schema,tableNames, columnNames) 返回表名与 tableNames 相符而且列名与 columnNames 相符的所有表列说明。 getURL(); 获得您所连接的 URL 名称。 getDriverName(); 获得您所连接的数据库驱动程序的名称。 获取有关表的信息 您可以使用 DataBaseMetaData 的 getTables() 方法来获取数据库中表的信息。这个方法有如下4个 String 参数: results =dma.getTables(catalog, schema, tablemask, types[]); 其中参数的意义是: Catalog 要在其中查找表名的目录名。对于 JDBC-ODBC 数据库以及许多其他数据库而言,可将其设置为 null。这些数据库的目录项实际上是它在文件系统中的绝对路径名称。 Schema 要包括的数据库“方案”。许多数据库不支持方案,而对另一些数据库而言,它代表数据库所有者的用户名。一般将它设置为 null。 Tablemask 一个掩码,用来描述您要检索的表的名称。如果您希望检索所有表名,则将其设为通配符 %。请注意,SQL 中的通配符是 % 符号,而不是一般 PC 用户的 * 符号。 types[] 这是描述您要检索的表的类型的 String 数组。数据库中通常包括许多用于内部处理的表,而对作为用户的您没什么价值。如果它是空值,则您会得到所有这些表。如果您将其设为包含字符串“TABLES”的单元素数组,您将仅获得对用户有用的表格。 一个简单的 JDBC 程序 我们已经学习了 JDBC 的所有基本功能,现在我们可以编写一个简单的程序,该程序打开数据库,打印它的表名以及某一表列的内容,然后对该数据库执行查询。此程序如下所示: package skydevkit; import java.sql.*; public class JdbcOdbc_test { ResultSet results; ResultSetMetaData rsmd; DatabaseMetaData dma; Connection con; public JdbcOdbc_test() throws SQLException { String url = "jdbc:odbc:Northwind"; try { //加载 JDBC-ODBC 桥驱动程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection(url);//连接数据库 dma = con.getMetaData();//获取数据库的元数据 System.out.println("Connected to:" + dma.getURL()); System.out.println("Driver " + dma.getDriverName()); } catch (Exception e) { System.out.println(e); } try { Statement stmt = con.createStatement(); results = stmt.executeQuery("select * from 客户;"); ResultSetMetaData resultMetaData = results.getMetaData(); int cols = resultMetaData.getColumnCount(); String resultRow = ""; for (int i = 1; i < cols; i++) { resultRow += resultMetaData.getColumnName(i) + ";"; } System.out.println(resultRow); while (results.next()) { resultRow = ""; for (int i = 1; i < cols; i++) { try { resultRow += results.getString(i) + ";"; } catch (NullPointerException e) { System.out.println(e.getMessage()); } } System.out.println(resultRow); } } catch (Exception e) { System.out.println("query exception"); } finally { results.close(); } } } 补充高级内容 关于调用SQLServer存储过程的例子:(用到了我们开发的数据库连接类) CREATE PROCEDURE [dbo].[sp_getStudentByName](@name char(10)) AS Select * from Students where [Name]=@name GO DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost", 1433, "demo", "sa", "")); Connection con = DbO.getConnection(); CallableStatement pstmt = null; System.out.println("TestDB1()............"); /* try { pstmt = con.prepareCall("{call sp_getStudentById(?)}"); pstmt.setInt(1, 1); }*/ try { pstmt = con.prepareCall("{call sp_getStudentByName(?)}"); //注意参数如何传递 pstmt.setString(1, "Tom"); } …… 使用输出参数: CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS insert into Students([Name],[Age]) values (@name,@age) select @id=@@IDENTITY GO try { pstmt = con.prepareCall("{call sp_insertStudent(?,?,?)}"); pstmt.setString(1, "zengqingsong"); pstmt.setInt(2, 22); pstmt.registerOutParameter(3, Types.INTEGER); pstmt.executeUpdate(); int id = pstmt.getInt(3); System.out.println(id); } 使用返回参数的例子: CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS insert into Students([Name],[Age]) values (@name,@age) select @id=@@IDENTITY –测试输出参数 return 30 –测试返回30 GO try { pstmt = con.prepareCall("{?=call sp_insertStudent(?,?,?)}"); pstmt.setString(2, "zengqingsong"); pstmt.setInt(3, 22); pstmt.registerOutParameter(4, Types.INTEGER); pstmt.registerOutParameter(1, Types.INTEGER); int ret = pstmt.executeUpdate(); //执行影响的行数 int ret2 = pstmt.getInt(1); //返回参数(输出参数) int id = pstmt.getInt(4); //输出参数 System.out.println(ret); System.out.println(ret2); System.out.println(id);2023-06-16 14:32:223
MSSQL中的dbo是什么角色?怎么以其他用户进去后建立的表还是dbo.xxxxxx?
dbo是指db owner,也就是数据库所有者。你在建立表时,上面工具栏上第二项的“表和索引属性”,点进去,里面有“所有者”,把它改成你自己的用户就行了。2023-06-16 14:32:381
关于SQL server 中的dbo、guest个是什么,他们都有什么功能,有请各位朋友给个详细的回答,先谢了!
不是很清楚,应该是管理权限什么的吧,就像是你电脑的账号,管理员,客户什么的2023-06-16 14:33:032
SQL2000数据库出现只供dbo使用怎么解决
dbo 就是 database owner 数据库的 所有者你不是它有所有人,所以不让你操作可以 右键→属性 改变它 或者以 所在者 身份登录 就可以了2023-06-16 14:33:141
为什么C#中数据库sql语句中在表的前面加上.dbo,不加也能正常执行,两者有什么区别!
dbo是指数据库所有者database owner,是具有在数据库中执行所有活动的暗示性权限的用户。所以,你在数据库中的所有操作,涉及到表名,如果没有加所有者,那么默认所有者就是dbo。因为,其他所有者的表,必须加所有者,而dbo,可以省略所有者。2023-06-16 14:33:232
sql server2000中执行sql语句时发现系统会在表名前自动加上“dbo.”,什么意思?
所有者http://zhidao.baidu.com/question/30738303.html2023-06-16 14:33:302
在sql中sys.与dbo.有什么区别,是一个指架构一个指表吗?
架构是指包含表、视图、过程等的容器。sys是包含系统对象的架构。dbo是用户默认架构,sysadmin 固定服务器角色的所有成员都有默认架构 dbo.2023-06-16 14:33:401
pb select错误 dbo错误
肯定是权限问题。你可以直接在SQLSERVER的查询脚本测试一下。使用你的用户,查询你所说的几个表。select dbo.students.id,dbo.students.name,dbo.students.age from dbo.students看看用你的用户,这个语句会不会报一样的错误,你用户的权限比较低,强行使用DBO用户查询,肯定不行。2023-06-16 14:33:491
怎么判断sql数据库是否存在,存在删除
如何判断数据库是否存在 执行下列的SQL,获得一张表,根据表的行数来判断。select * from master..sysdatabases where name=N"所查询的数据库名"if exists(select * from master.dbo.sysdatabases where name = "yexinwinners")begindrop database yexinwinnersprint "yexinwinners己存在,己被删除"endelsebegincreate database yexinwinnerson primary(name = yexinwinners_mdf,filename = "c:yexinwinners.mdf",size = 10mb,maxsize = 50mb,filegrowth = 25%)log on(name = yexinwinners_ldf,filename = "c:yexinwinners.ldf",size = 10mb,maxsize = 50mb,filegrowth = 25%)print "yexinwinners 数据库创建成功"end2023-06-16 14:33:562
如何对一个已经存在的SQL Server表分区
有两种方法可以实现对一个表分区.一是创建一个新的标识为分区表的表(你可参照此步骤),然后把数据复制到这张新表,再对这两张表分别改名.或者,像我写在下面的,通过重建或创建一个聚集索引来达到分区一个表.一个SQL Server表和数据进行分区示例--Table/Index creationCREATE TABLE [dbo].[TABLE1] ([pkcol] [int] NOT NULL, [datacol1] [int] NULL, [datacol2] [int] NULL, [datacol3] [varchar](50) NULL, [partitioncol] datetime)GOALTER TABLE dbo.TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY CLUSTERED (pkcol) GOCREATE NONCLUSTERED INDEX IX_TABLE1_col2col3 ON dbo.TABLE1 (datacol1,datacol2) WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]2023-06-16 14:34:121
创建 对于 用户“dbo”失败。错误: 15023
int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j; printf("original array is: "); for(i=0;i<10;i++) printf("%5d",a[i]); printf(" "); printf("insert a new number:"); scanf("%d",&number);2023-06-16 14:34:351
SQL中调用函数时是不是一定要加上dbo?
表函数不用,其它需要 表函数不用,其它需要 --dbo是SCHEMA_NAME结构描术,这是创建者定义的2023-06-16 14:34:562
Sql 行列转换
http://wenku.baidu.com/view/451b23f4f705cc17552709d0.html这里有答案2023-06-16 14:35:043
sql语句中什么时候要加dbo.什么时候不需要加啊
"select * from users Where UserAccount=" + """ + UserName + """ + "And UserPwd=" + """ + strMd5 + """ select * from users Where UserAccount="UserName1" And UserPwd="Md5Pwd" 这就是从c#翻译过来的sql语句,其中单引号间表示数据库中的字符类使用,比如id like "aaa001",双引号表示c#里面的字符串。数据库中的字符类的比较建议使用LIKE,不要用= select * from users Where UserAccount Like "UserName1" And UserPwd Like "Md5Pwd"(在user表中查找用户名为"UserName1"并且经过MD5加密后的密文为"Md5Pwd"的记录,若存在,表示该用户用户名与密码一致,允许登录系统2023-06-16 14:35:561
我用pb连接的sql2003的数据库,表前面怎么都多了dbo,怎么去掉啊!
我估计你连的是:SQL 2005或更高版本,在2005或后期版本中(包括ORACLE),打开PB数据窗口中的SQL语句都会加上dbo.开头,没关系,这不影响你的程序。2023-06-16 14:36:042
sql server 数据库怎么复制dbo
方式一、如果写代码select * into [目标数据库B].DBO.表名 from. [源数据库A].DBO.表名方式二、如果不写代码,可以用导入的方式复制表结构(如果目标数据库已经存在,此步跳过)1、打开并连接Sql Server,在源数据库DATA_A(源数据库名称)上右键,然后依次点击“编写表脚本为”→“CREATE到”→“新查询编辑器窗口”。2、在第1步产生的编辑器中按”crtl+a“组合键全选内容,然后右键“复制“(或按"crtl+c"键)。3、新建查询,然后右键“粘贴”(或ctrl+v);如图所示,将代码中DATA_A(源数据库名)改为DATA_B(目标数据库名)。接着右键单击”执行“执行代码。4、在目标数据库的表结构中就可以看到被复制过来的表了。表的数据内容复制选中目标数据库DATA_B然后点击”任务“→”导入数据“。进入”SQL Server导入导出向导“,根据提示步骤操作。选择数据源(源数据库)。选择目标(目标数据库)、指定表复制或查询。选择源表和源视图:设置源表和目标表后,单击“编辑映射”按钮,在弹出窗口中选中“启用标识插入”。(否则后面会出错)一直点击“下一步”至最后完成操作。2023-06-16 14:36:141
dbo模式中,运营服务器结束至颁发合同完成证书的时间应不超过几天
DBO:是指设计(Design)-建造(Build)-运营(Operation)的简称,指的是承包商在业主手中以某一合理总价承包设计并建造一个公共设施或基础设施,并且负责运营该设施,满足在该设施试用期间公共部门的运作要求。承包商负责设计的维修保养以及更换在合同期内已经超过其使用期的资产,在该合同期满后,资产所有权交回业主或公共部门。DBO的特点可概括为“单一责任”和“功能保证”。DBO合同中的承包商承担设计、建造和运营的责任,对项目是否达到预定的技术和进度要求负责,由于DBO中的设计-建造部分采用总价包干的方式,他也必须对项目的建造费用控制负责,并通过运营的考验确保将来向业主移交一个符合运营要求的设施。(一)2023-06-16 14:36:234
sql2005中dbo问题
返回表函数可以这样去掉dbo,标量值函数是需要加上dbo所有者2023-06-16 14:36:321
mysql中有sys,sue,dbo么?
mysql中有sys,sue,dbo么? - MYSQL中,有没有像在MSSQL的master.dbo.sysdatabases 保存着所有的数据库名称, xxxxxxx.dbo.sysobjects这样保存着所有的表名字段名等信息的系统表2023-06-16 14:36:421
sql2005数据库中创建表时为何会在原表名前加上一个dbo.的东西,这是什么意思
默认架构名,默认的用户Sa具有权限,不需理会这个架构名2023-06-16 14:36:502
什么是DBO模式
DBO(即设计、建设、运营)DBO是个非常好的想法,因为市场化后,谁投资谁负责建设、运营,让投资人自己选择工艺,可以将投资、建设、运营一揽子考虑,政府已经选定的工艺可不一定就是造价最低、运营最优的工艺。2023-06-16 14:37:123
sql中 dbo 是什么意思
表的所有者2023-06-16 14:37:366
sql中 dbo 是什么意思
表的所有者2023-06-16 14:38:056
简单问题 SqlServer中的dbo是什么东西
dbo是sqlserver中最垃圾的东西了,也是微软一直是单用户产品的表现2023-06-16 14:38:293
SQL中FROM数据库名.dbo.表名,其中dbo作用与含义是什么呢
SQL中FROM数据库名.dbo.表名的DBO相当于用户名,以所有者身份使用表2023-06-16 14:38:361
SQL中FROM数据库名.dbo.表名,其中dbo作用与含义是什么呢
它应该是数据库对象吧!一般它是系统默认的,2023-06-16 14:38:453
sql server 2005 中删除对于用户的dbo失败怎么办
在删除SQL Server用户时,有时会报错:Microsoft SQL Server错误: 15138删除对于用户失败,数据库主体在该数据库中拥有架构,无法删除。删除 对于 用户“*****”失败。 (Microsoft.SqlServer.Smo) 。下面将为您介绍两种的解决方法。其他信息:执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)解决方法一先删除此用户对应的架构,然后在删除对应的用户步骤1。SQL SERVER MANAGEMENT STUDIO -> 数据库 -> 安全性 -> 构架,先删除对应的构架2。SQL SERVER MANAGEMENT STUDIO -> 数据库 -> 安全性 -> 用户,删除对应的用户解决方法二–执行如下SQL语句ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo;–然后手动删除就可以了。2023-06-16 14:38:541
sqlserver中的表所有者不是dbo怎么改成dbo的
1:从下面的图片中就可以看出来,当前这个选中的表的所有者是"dxkj",并不是dbo,所以现在要把这个表的所有者改回dbo的,在该表上点击右键,选择“设计”,如下图:2:右键点击表名然后选择设计表,如下图3:在工具2023-06-16 14:39:101
sql数据表里的所有者一般为“dbo”可以改成其他的吗
可以的 还可以改成SA权限只要你加了用户就可以更改2023-06-16 14:39:181
数据库怎么获得?什么是数据库
什么是数据库? 数据库是以某种文件结构存储的一系列信息表,这种文件结构使您能够访问这些表、选择表中的列、对表进行排序以及根据各种标准选择行。数据库通常有多个 索引与这些表中的许多列相关联,所以我们能尽可能快地访问这些表。 以员工记录为例,您可以设想一个含有员工姓名、地址、工资、扣税以及津贴等内容的表。让我们考虑一下这些内容可能如何组织在一起。您可以设想一个表包含员工姓名、地址和电话号码。您希望保存的其它信息可能包括工资、工资范围、上次加薪时间、下次加薪时间、员工业绩评定等内容。 这些内容是否应保存在一个表格中?几乎可以肯定不应该如此。不同类别的员工的工资范围可能没有区别;这样,您可以仅将员工类型储存在员工记录表中,而将工资范围储存在另一个表中,通过类型编号与这个表关联。考虑以下情况: Key Lastname SalaryType SalaryType Min Max 1 Adams 2 1 30000 45000 2 Johnson 1 2 45000 60000 3 Smyth 3 3 60000 75000 4 Tully 1 5 Wolff 2 SalaryType 列中的数据引用第二个表。我们可以想象出许多种这样的表,如用于存储居住城市和每个城市的税值、健康计划扣除金额等的表。每个表都有一个主键列(如上面两个表中最左边的列)和若干数据列。在数据库中建立表格既是一门艺术,也是一门科学。这些表的结构由它们的范式指出。我们通常说表属于1NF、2NF 或 3NF。 第一范式:表中的每个表元应该只有一个值(永远不可能是一个数组)。(1NF) 第二范式:满足 1NF,并且每一个非主键列完全依赖于主键列。这表示主键和该行中的剩余表元之间是 1 对 1 的关系。(2NF) 第三范式:满足 2NF,并且所有非主键列是互相独立的。任何一个数据列中包含的值都不能从其他列的数据计算得到。(3NF) 现在,几乎所有的数据库都是基于“第三范式 (3NF)”创建的。这意味着通常都有相当多的表,每个表中的信息列都相对较少。 从数据库中获取数据 假设我们希望生成一个包含员工及其工资范围的表,在我们设计的一个练习中将使用这个表。这个表格不是直接存在在数据库中,但可以通过向数据库发出一个查询来构建它。我们希望得到如下所示的一个表: Name Min Max Tully $30,000.00 $45,000.00 Johnson $30,000.00 $45,000.00 Wolff $45,000.00 $60,000.00 Adams $45,000.00 $60,000.00 Smyth $60,000.00 $75,000.00 我们发现,获得这些表的查询形式如下所示 SELECT DISTINCTROW Employees.Name, SalaryRanges.Min, SalaryRanges.Max FROM Employees INNER JOIN SalaryRanges ON Employees.SalaryKey = SalaryRanges.SalaryKey ORDER BY SalaryRanges.Min; 这种语言称为结构化查询语言,即 SQL,而且它是几乎目前所有数据库都可以使用的一种语言。SQL-92 标准被认为是一种基础标准,而且已更新多次。 数据库的种类 PC 上的数据库,如 dBase、Borland Paradox、Microsoft Access 和 FoxBase。 数据库服务器:IBM DB/2、Microsoft SQL Server、 Oracle、Sybase、SQLBase 和 XDB。 所有这些数据库产品都支持多种相对类似的 SQL 方言,因此,所有数据库最初看起来好象可以互换。每种数据库都有不同的性能特征,而且每一种都有不同的用户界面和编程接口。 ODBC 如果我们能够以某种方式编写不依赖于特定厂商的数据库的代码,并且能够不改变自己的调用程序即可从这些数据库中得到相同的结果,那将是一件很好的事。如果我们可以仅为所有这些数据库编写一些封装,使它们具有相似的编程接口,这种对数据库编程独立于供应商的特性将很容易实现。 什么是 JDBC? JDBC 是对 ODBC API 进行的一种面向对象的封装和重新设计,它易于学习和使用,并且它真正能够使您编写不依赖厂商的代码,用以查询和操纵数据库。尽管它与所有 Java API 一样,都是面向对象的,但它并不是很高级别的对象集. 除 Microsoft 之外,多数厂商都采用了 JDBC,并为其数据库提供了 JDBC 驱动程序;这使您可轻松地真正编写几乎完全不依赖数据库的代码。另外,JavaSoft 和 Intersolv 已开发了一种称为 JDBC-ODBC Bridge 的产品,可使您连接还没有直接的 JDBC 驱动程序的数据库。支持 JDBC 的所有数据库必须至少可以支持 SQL-92 标准。这在很大程度上实现了跨数据库和平台的可移植性。 安装和使用 JDBC JDBC 的类都被归到 java.sql 包中,在安装 Java JDK 1.4时会自动安装。然而,如果您想使用 JDBC-ODBC 桥。JDBC-ODBC 驱动程序可从 Sun 的 Java 网站 (http://java.sun.com/) 轻松地找到并下载。在您扩充并安装了这个驱动程序后,必须执行下列步骤: 将 jdbc-odbcclasses; 路径添加到您的 PATH 环境变量中。 将 jdbc-odbcclasses; 路径添加到您的 CLASSPATH 环境变量中。 JDBC 驱动程序的类型 Java 程序连接数据库的方法实际上有四种: 1. JDBC-ODBC 桥和 ODBC 驱动程序 -- 在这种方式下,这是一个本地解决方案,因为 ODBC 驱动程序和桥代码必须出现在用户的每台机器中。从根本上说这是一个临时解决方案。 2. 本机代码和 Java 驱动程序 -- 它用另一个本地解决方案(该平台上的 Java 可调用的本机代码)取代 ODBC 和 JDBC-ODBC 桥。 3. JDBC 网络的纯 Java 驱动程序 -- 由 Java 驱动程序翻译的 JDBC 形成传送给服务器的独立协议。然后,服务器可连接任何数量的数据库。这种方法使您可能从客户机 Applet 中调用服务器,并将结果返回到您的 Applet。在这种情况下,中间件软件提供商可提供服务器。 4. 本机协议 Java 驱动程序 -- Java 驱动程序直接转换为该数据库的协议并进行调用。这种方法也可以通过网络使用,而且可以在 Web 浏览器的 Applet 中显示结果。在这种情况下,每个数据库厂商将提供驱动程序。 如果您希望编写代码来处理 PC 客户机数据库,如 dBase、Foxbase 或 Access,则您可能会使用第一种方法,并且拥有用户机器上的所有代码。更大的客户机-服务器数据库产品(如 IBM 的 DB2)已提供了第 3 级别的驱动程序。 两层模型和三层模型 当数据库和查询它的应用程序在同一台机器上,而且没有服务器代码的干预时,我们将生成的程序称为两层模型。一层是应用程序,而另一层是数据库。在 JDBC-ODBC 桥系统中通常是这种情况。 当一个应用程序或 applet 调用服务器,服务器再去调用数据库时,我们称其为三层模型。当您调用称为“服务器”的程序时通常是这种情况。 编写 JDBC 代码访问数据库 用 ODBC 注册您的数据库 连接数据库 所有与数据库有关的对象和方法都在 java.sql 包中,因此在使用 JDBC 的程序中必须加入 "import java.sql.* "。 JDBC 要连接 ODBC 数据库,您必须首先加载 JDBC-ODBC 桥驱动程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 该语句加载驱动程序,并创建该类的一个实例。然后,要连接一个特定的数据库,您必须创建 Connect 类的一个实例,并使用 URL 语法连接数据库。 String url = "jdbc:odbc:Northwind"; Connection con = DriverManager.getConnection(url); 请注意,您使用的数据库名是您在 ODBC 设置面板中输入的“数据源”名称。 URL 语法可能因数据库类型的不同而变化极大。 jdbc:subprotocol:subname 第一组字符代表连接协议,并且始终是 jdbc。还可能有一个子协议,在此处,子协议被指定为 odbc。它规定了一类数据库的连通性机制。如果您要连接其它机器上的数据库服务器,可能也要指定该机器和一个子目录: jdbc:bark//doggie/elliott 最后,您可能要指定用户名和口令,作为连接字符串的一部分: jdbc:bark//doggie/elliot;UID=GoodDog;PWD=woof 访问MSSQL Server方法:(驱动程序需要:msutil.jar,msbase.jar,mssqlServer.jar) DBDriver=com.microsoft.jdbc.sqlserver.SQLServerDriver URL=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo username=sa password= maxcon=10 mincon=1 poolName=SkyDev 利用我们开发的数据库类,使用方法如下: DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost", 1433, "demo", "sa", "")); Connection con = DbO.getConnection(); //类代码(不含连接工厂实现) package skydev.modules.data; public final class SqlServerConnectionFactory extends ConnectionFactory { private final String dbDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; private String host; private int port; private String databaseName; public SqlServerConnectionFactory() { super.setDriverName(dbDriver); } /** * * @param host 数据库所在的主机名:如"localhost" * @param port SQL服务器运行的端口号,如果使用缺省值 1433,传入一个负数即可 * @param databaseName 数据库名称 * @param userName 用户名 * @param password 口令 */ public SqlServerConnectionFactory(String host, int port, String databaseName, String userName, String password) { this.setHost(host); this.setPort(port); this.setDatabaseName(databaseName); this.setUserName(userName); this.setPassword(password); init(); } private void init() { super.setDriverName(dbDriver); super.setUrl("jdbc:microsoft:sqlserver://" + host.trim() + ":" + new Integer(port).toString() + ";DatabaseName=" + databaseName.trim()); //super.setUrl("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo"); } …… //------------------------------------------------------------------------------------ 访问MySQL的方法: DBDriver=com.mysql.jdbc.Driver URL=jdbc:mysql://localhost/demo username= password= maxcon=5 mincon=1 poolName=zhengmao 访问数据库 一旦连接到数据库,就可以请求表名以及表列的名称和内容等信息,而且您可以运行 SQL 语句来查询数据库或者添加或修改其内容。可用来从数据库中获取信息的对象有: DatabaseMetaData 有关整个数据库的信息:表名、表的索引、数据库产品的名称和版本、数据库支持的操作。 ResultSet 关于某个表的信息或一个查询的结果。您必须逐行访问数据行,但是您可以任何顺序访问列。 ResultSetMetaData 有关 ResultSet 中列的名称和类型的信息。 尽管每个对象都有大量的方法让您获得数据库元素的极为详细的信息,但在每个对象中都有几种主要的方法使您可获得数据的最重要信息。然而,如果您希望看到比此处更多的信息,建议您学习文档以获得其余方法的说明。 ResultSet ResultSet 对象是 JDBC 中最重要的单个对象。从本质上讲,它是对一个一般宽度和未知长度的表的一种抽象。几乎所有的方法和查询都将数据作为 ResultSet 返回。ResultSet 包含任意数量的命名列,您可以按名称访问这些列。它还包含一个或多个行,您可以按顺序自上而下逐一访问。在您使用 ResultSet 之前,必须查询它包含多少个列。此信息存储在 ResultSetMetaData 对象中。 //从元数据中获得列数 ResultSetMetaData rsmd; rsmd = results.getMetaData(); numCols = rsmd.getColumnCount(); 当您获得一个 ResultSet 时,它正好指向第一行之前的位置。您可以使用 next() 方法得到其他每一行,当没有更多行时,该方法会返回 false。由于从数据库中获取数据可能会导致错误,您必须始终将结果集处理语句包括在一个 try 块中。 您可以多种形式获取 ResultSet 中的数据,这取决于每个列中存储的数据类型。另外,您可以按列序号或列名获取列的内容。请注意,列序号从 1 开始,而不是从 0 开始。ResultSet 对象的一些最常用方法如下所示。 getInt(int); 将序号为 int 的列的内容作为整数返回。 getInt(String); 将名称为 String 的列的内容作为整数返回。 getFloat(int); 将序号为 int 的列的内容作为一个 float 型数返回。 getFloat(String); 将名称为 String 的列的内容作为 float 型数返回。 getDate(int); 将序号为 int 的列的内容作为日期返回。 getDate(String); 将名称为 String 的列的内容作为日期返回。 next(); 将行指针移到下一行。如果没有剩余行,则返回 false。 Close(); 关闭结果集。 getMetaData(); 返回 ResultSetMetaData 对象。 ResultSetMetaData 您使用 getMetaData() 方法从 ResultSet 中获取 ResultSetMetaData 对象。您可以使用此对象获得列的数目和类型以及每一列的名称。 getColumnCount(); 返回 ResultSet 中的列数。 getColumnName(int); 返回列序号为 int 的列名。 getColumnLabel(int); 返回此列暗含的标签。 isCurrency(int); 如果此列包含带有货币单位的一个数字,则返回 true。 isReadOnly(int); 如果此列为只读,则返回 true。 isAutoIncrement(int); 如果此列自动递增,则返回 true。这类列通常为键,而且始终是只读的。 getColumnType(int); 返回此列的 SQL 数据类型。这些数据类型包括 BIGINT BINARY BIT CHAR DATE DECIMAL DOUBLE FLOAT INTEGER LONGVARBINARY LONGVARCHAR NULL NUMERIC OTHER REAL SMALLINT TIME TIMESTAMP TINYINT VARBINARY VARCHAR DatabaseMetaData DatabaseMetaData 对象可为您提供整个数据库的信息。您主要用它获取数据库中表的名称,以及表中列的名称。由于不同的数据库支持不同的 SQL 变体,因此,也有多种方法查询数据库支持哪些 SQL 方法。 getCatalogs() 返回该数据库中的信息目录列表。使用 JDBC-ODBC Bridge 驱动程序,您可以获得用 ODBC 注册的数据库列表。这很少用于 JDBC-ODBC 数据库。 getTables(catalog, schema,tableNames, columnNames) 返回表名与 tableNames 相符而且列名与 columnNames 相符的所有表的说明。 getColumns(catalog, schema,tableNames, columnNames) 返回表名与 tableNames 相符而且列名与 columnNames 相符的所有表列说明。 getURL(); 获得您所连接的 URL 名称。 getDriverName(); 获得您所连接的数据库驱动程序的名称。 获取有关表的信息 您可以使用 DataBaseMetaData 的 getTables() 方法来获取数据库中表的信息。这个方法有如下4个 String 参数: results =dma.getTables(catalog, schema, tablemask, types[]); 其中参数的意义是: Catalog 要在其中查找表名的目录名。对于 JDBC-ODBC 数据库以及许多其他数据库而言,可将其设置为 null。这些数据库的目录项实际上是它在文件系统中的绝对路径名称。 Schema 要包括的数据库“方案”。许多数据库不支持方案,而对另一些数据库而言,它代表数据库所有者的用户名。一般将它设置为 null。 Tablemask 一个掩码,用来描述您要检索的表的名称。如果您希望检索所有表名,则将其设为通配符 %。请注意,SQL 中的通配符是 % 符号,而不是一般 PC 用户的 * 符号。 types[] 这是描述您要检索的表的类型的 String 数组。数据库中通常包括许多用于内部处理的表,而对作为用户的您没什么价值。如果它是空值,则您会得到所有这些表。如果您将其设为包含字符串“TABLES”的单元素数组,您将仅获得对用户有用的表格。 一个简单的 JDBC 程序 我们已经学习了 JDBC 的所有基本功能,现在我们可以编写一个简单的程序,该程序打开数据库,打印它的表名以及某一表列的内容,然后对该数据库执行查询。此程序如下所示: package skydevkit; import java.sql.*; public class JdbcOdbc_test { ResultSet results; ResultSetMetaData rsmd; DatabaseMetaData dma; Connection con; public JdbcOdbc_test() throws SQLException { String url = "jdbc:odbc:Northwind"; try { //加载 JDBC-ODBC 桥驱动程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection(url);//连接数据库 dma = con.getMetaData();//获取数据库的元数据 System.out.println("Connected to:" + dma.getURL()); System.out.println("Driver " + dma.getDriverName()); } catch (Exception e) { System.out.println(e); } try { Statement stmt = con.createStatement(); results = stmt.executeQuery("select * from 客户;"); ResultSetMetaData resultMetaData = results.getMetaData(); int cols = resultMetaData.getColumnCount(); String resultRow = ""; for (int i = 1; i < cols; i++) { resultRow += resultMetaData.getColumnName(i) + ";"; } System.out.println(resultRow); while (results.next()) { resultRow = ""; for (int i = 1; i < cols; i++) { try { resultRow += results.getString(i) + ";"; } catch (NullPointerException e) { System.out.println(e.getMessage()); } } System.out.println(resultRow); } } catch (Exception e) { System.out.println("query exception"); } finally { results.close(); } } } 补充高级内容 关于调用SQLServer存储过程的例子:(用到了我们开发的数据库连接类) CREATE PROCEDURE [dbo].[sp_getStudentByName](@name char(10)) AS Select * from Students where [Name]=@name GO DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost", 1433, "demo", "sa", "")); Connection con = DbO.getConnection(); CallableStatement pstmt = null; System.out.println("TestDB1()............"); /* try { pstmt = con.prepareCall("{call sp_getStudentById(?)}"); pstmt.setInt(1, 1); }*/ try { pstmt = con.prepareCall("{call sp_getStudentByName(?)}"); //注意参数如何传递 pstmt.setString(1, "Tom"); } …… 使用输出参数: CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS insert into Students([Name],[Age]) values (@name,@age) select @id=@@IDENTITY GO try { pstmt = con.prepareCall("{call sp_insertStudent(?,?,?)}"); pstmt.setString(1, "zengqingsong"); pstmt.setInt(2, 22); pstmt.registerOutParameter(3, Types.INTEGER); pstmt.executeUpdate(); int id = pstmt.getInt(3); System.out.println(id); } 使用返回参数的例子: CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS insert into Students([Name],[Age]) values (@name,@age) select @id=@@IDENTITY –测试输出参数 return 30 –测试返回30 GO try { pstmt = con.prepareCall("{?=call sp_insertStudent(?,?,?)}"); pstmt.setString(2, "zengqingsong"); pstmt.setInt(3, 22); pstmt.registerOutParameter(4, Types.INTEGER); pstmt.registerOutParameter(1, Types.INTEGER); int ret = pstmt.executeUpdate(); //执行影响的行数 int ret2 = pstmt.getInt(1); //返回参数(输出参数) int id = pstmt.getInt(4); //输出参数 System.out.println(ret); System.out.println(ret2); System.out.println(id);参考资料:http://zhidao.baidu.com/question/2050414.html2023-06-16 14:39:401
sql2008如何更改所有者为dbo
创建存储过程中开头:如 create procedure[dbo].[p_usersAdd]2023-06-16 14:39:471
求教:dbo.f_get_bigbrandid(b.brandid) bigbrand 这种语法格式是什么意思?
Select * from dbo.f_get_bigbrandid(b.brandid) bigbrand 这里的dbo是数据库下的表对象的管理对象。f_get_bigbrandid是函数名,返回记录集。括弧里面是参数。后面应该是查询得到记录集的别名。2023-06-16 14:39:561