关于windows身份验证和sql server身份验证:
[Microsoft][SQL Server 2000 Driver for JDBC]ResultSet can not re-read row data for column
在用JSP+sqlserver开发网站中遇到“ResultSet can not re-read row data for column 1”问题,在网上搜索得知,原来是微软公司的驱动的兼容性不太好。
有热心人总结了微软驱动的缺点:
(1)如果采用jdbc-odbc驱动,那么就必须按照查询顺序来一次读取(不论有没有image或text类型)
(2)如果采用微软提供的ms sql server jdbc driver,如果查询语句中,不存在image或text类型字段,那么可以按照无序获取
(3)如果采用微软提供的ms sql server jdbc driver,如果查询语句中,存在image或text类型字段,那么就必须按照顺序读取,否则就会报告Driver]ResultSet can not re-read row data for column之类的错误
(4)如果想不查询语句中有没有image或text类型字段,都可以不按照顺序获取,或重复获取。那么就必须更换驱动,改用第三方的。
解决方法:
1:最好是可以不用text .image类型的话,就最好不用
要是用的话就按照顺序(从左到右的顺序)读取字段,例如(getString(1),getString(2),getString(3)....);当然这样不能回读或重复读取...这个是微软jdbc驱动的一个bug
2:下载JDTS驱动(支持SQL6.5,7.0,2000,2005,SYBASE) 下载地址:http://jtds.sourceforge.net/
使用数据库包jTDS:
micro的sql server jdbc驱动限制了记录的回读功能,这样开发的过程会经常出现错误,所以有了opensource的jtds.jar:
jTDS is an open source 100% pure Java JDBC 3.0 driver for Microsoft SQL Server (6.5, 7, 2000 and 2005) and Sybase。
http://jtds.sourceforge.net/
关于
DBO(Data Base Owner):
dbo是一个构架(schema),与sql2000不同的是,在sql2005中,表的调用格式如下:"数据库名.构架名.表名",同一个用户可以被授权访问多个构架,也可以被禁止访问某个或多个构架,这就是2005中提倡的"用户与构架分离"的概念.
在2005中,如果在创建表时没有指定构架(schema),那么系统默认该表的构架是dbo,所以会出现很多表名前自动加上dbo.字符样式.
数据库名.构架名.表名,这种方式在相同的数据服务器,但是所用表不在当前编码的数据库内。
例如:在数据库A中有表dbo.T1,B中有dbo.T2。
你在数据库B里调用T1这时候要写成 select * from A.dbo.T1
SQL Server与其他数据库表结构/数据的导入/导出:
SQL Server 2000中是用的DTS(数据转换服务)
Microsoft 在SQL Server 2005 中又对DTS 进行了重大的改进,使一个单纯的ETL工具,变成了具有企业级开发能力的ETL平台,而不仅仅是把名字从DTS 改为了SSIS。
ETL:
英文Extract-Transform-Load 的縮寫,用來描述將資料從來源端經過萃取(extract)、轉置(transform)、載入(load)至目的端的過程。
2005中查询分析器中显示行号:
工具->选项->文本编辑器->所有语言->常规->显示->行号
SQL Server 中删除存在的表格, Drop table if exists 的实现:
-- 比如删除 t_user这个表格,可以用如下的方法
if exists (select 1 from dbo.sysobjects where id=object_id(N't_user') and OBJECTPROPERTY(id,N'IsUserTable')=1)
drop table t_user;
SQL Server数据类型介绍
http://www.chinaret.com/user/topic_view.aspx?id=d86e8756-c567-4127-a6c0-4ca87d35ab30
常用查询:
查看表结构:sp_MShelpcolumns 'tablename'
如:sp_MShelpcolumns 'dbo.t_abc'