动态网站制作指南
[  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库学院 > 数据库技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ 数据库技巧 ]的信息

本月文章推荐
.SQL Server编写存储过程小工具(一.
.sql server行转列问题终极解决.
.sql server 2005中的表分区.
.如何为SQL Server表数据生成inse.
.全文本检索的应用(1).
.循序渐进讲解数据表的十二个设计.
.实现一个用户取过的数据不被其他.
.如何使Microsoft SQL Server的日.
.数据库查询结果的动态排序(3).
.Microsoft SQL Server数据库日志.
.全面解析关系数据模型存在的不足.
.SQL SERVER应用问题解答13例(三.
.SQL Server 数据库管理常用的SQL.
.如何在应用程序中避免死锁问题?.
.一个四用户信息同步更新的存储过.
.SQL Server自动备份无法删除过期.
.一个复合查询方法.
.探讨基于不绑定变量与绑定变量的.
.教你轻松掌握数据仓库的规划和构.
.SQL中使用关系代数合并数据.

SQL Server2000+JDBC常见问题及解决

文章类别:数据库技巧 | 发表日期:2005-5-18 |


  SQL Server 2000 是当今网络编程中使用的比较多的一个数据库系统,java是目前最流行的编程语言,在编程中涉及的比较多也比较重要的就是数据库问题,java自身提供了对各类主流数据库系统的支持,通过java.sql 库,提供了统一的接口,使得可以在java环境下不必对程序作大规模的修改,只要更改相应的驱动程序,即可实现对各类数据库的操作,从而提高软件的生存周期和降低软件的开发成本和维护费用,在这种情况下SQL Server 2000 和java 的融合问题就显得比较重要了,本文简要地阐述一下SQL Server 2000 和jdk的融合问题。

  系统需求:

   数据库:SQL Server 2000 sp3
   驱动程序:SQL Server driver for jdbc
   java版本:jdk1.2以上

  1:我们首先使用jdbc-odbc桥来实现数据库的连接,这个相对简单。
  
  首先使用SQL Server 企业管理其建立一个数据库test,并建立一个简单的表 first_table

  建立odbc数据源 ,各步骤采用默认操作即可

  编写一个简单的测试程序,该程序主要实现数据库的连接,以及一个简单的sql操作 ,代码如下:

/***********************************************
/*
/*DbTest.java
/*
/******************************************* */

import java.sql.*;

public class DbTest {

 Connection con;
 Statement sta;
 ResultSet rs;

 String driver;
 String url;
 String user;
 String pwd;
 public DbTest()
 {
  driver = "sun.jdbc.odbc.JdbcOdbcDriver";
  url = "jdbc:odbc:store_manager";
  user = "share";
  pwd = "share";
  init();
 }
 public void init()
 {
  try{
   Class.forName(driver);
   System.out.println("driver is ok");
   con = DriverManager.getConnection(url,user,pwd);
   System.out.println("conection is ok");
   sta = con.createStatement();
   rs = sta.executeQuery("select * from room");
   while(rs.next())
    System.out.println(rs.getInt("roomNum"));
  }catch(Exception e)
  {
   e.printStackTrace();
  }
 }

 public static void main(String args [])//自己替换[]
 {
  new DbTest();
 }

  运行结果如下:

driver is ok
conection is ok
1001
1002
1003
1004
1005
1006
Press any key to continue...

  顺利通过测试

  2、我们这次不通过odbc桥来操作数据库,我们采用SQL Server driver 来实现对SQL Server数据库的操作, 这将是我们这篇文章的重点,因为jdbc-odbc桥是一种常见的操作windows系统数据库的常用方法,但它存在的缺点很多,所以现在很多开发者都侧重于使用sqlserver driver来操作,在这里我们通过一步步的调试,来加深读者对这种连接的理解

  在通常的理解下,只要我们装了sqlserver driver for jdbc 我们便可进行数据库编程,事实则不然,首先我们看下边的代码:

/***********************************************
/*
/*DbTest.java
/*http://www.knowsky.com
/******************************************* */

import java.sql.*;

public class DbTest {

 Connection con;
 Statement sta;
 ResultSet rs;

 String driver;
 String url;
 String user;
 String pwd;
 public DbTest()
 {
  driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";;
  url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName =StoreManager";
  user = "sa";
  pwd = "potsmart10";
  init();
 }
 public void init()
 {
  try{
   Class.forName(driver);
   System.out.println("driver is ok");
   con = DriverManager.getConnection(url,user,pwd);
   System.out.println("conection is ok");
   sta = con.createStatement();
   rs = sta.executeQuery("select * from room");
   while(rs.next())
   System.out.println(rs.getInt("roomNum"));
  }catch(Exception e)
  {
   e.printStackTrace();
  }
 }

 public static void main(String args [])//自己替换[]
 {
  new DbTest();
 }

  这段代码跟上变得代码是一样的,差别在于驱动,还有url,这是在使用sqlserver driver for jdbc 中遇到的困惑。按道理讲,上边这段代码应该没错,可首先我们来看一下,如果SQL Server服务器没有升级到sp3(在使用jdbc时,如果系统是xp或者2003务必要把sqlserver 升级到sp3,往上到处都有下的),我们看看运行结果

driver is ok
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establis
hing socket.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source
)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(Unknown Source)

at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Sou
rce)
at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown S
ource)
at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:523)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at DbTest.init(DbTest.java:32)
at DbTest.<init>(DbTest.java:25)
at DbTest.main(DbTest.java:46)
Press any key to continue...

  出现上边错误的主要原因是默认的数据库服务器端口 1433没有打开,无法直接连接 。

  如果升级到sp3则这个问题可以结决,我们再来看看升级之后,程序运行的结果

driver is ok
conection is ok
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对
象名 'room' 无效。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source
)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown
Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown
Source)
at com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(
Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Sour
ce)
at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType
(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown
Source)
at com.microsoft.jdbc.base.BaseStatement.postImplExecu
te(Unknown Source)

at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown So
urce)
at com.microsoft.jdbc.base.BaseStatement.executeQuery(Unknown Source)
at DbTest.init(DbTest.java:35)
at DbTest.<init>(DbTest.java:25)
at DbTest.main(DbTest.java:46)
Press any key to continue...

  在这儿,用户已经登陆上去,但是却不能访问里边的数据表,出现这个问题的原因在于sa用户为系统用户,它虽然能够登陆数据库,但是storeManager数据库里边却没有这个用户的访问权限,所以,我们现在为这个数据库重新建立一个用户share ,建立过程如下:在storeManager数据库中选重用户 ---〉新建用户 -- 〉名称选择(这一步中有两个关键点 1:身份验证选sql身份验证,默认数据库选StoreManager)-〉建立新教色share ,此时更改程序,将用户登陆名和密码修改一下,重新运行程序

driver is ok
conection is ok
1001
1002
1003
1004
1005
1006
Press any key to continue...

  这次顺利通过测试

  总结:

  SQL Server和jdbc 的融合问题,关键涉及到sp3补丁(端口开放)还有用户问题,解决这两个问题之后,剩余的便是sqlserver 操作问题了,还有一点在远程操作的时候,要把sqlserver 组设置一下,在安全性里边亦将身份验证更改为SQL Server 验证即可。


上一篇:如何让你的SQL运行得更快 人气:14229
下一篇:SQL Server 某些条件下求某日的日期 人气:9585
点击此处浏览全部SQL Server的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-5-16 乘风多用户PHP统计系统 v3.4
2008-5-16 轩溪下载系统 v3.78 build 0515
2008-5-16 普沙B2B 浙江省商贸网 v2.0
2008-5-16 asp抓蜘蛛的小程序 v1.0
2008-5-16 齐齐乐网私服发布站 仿haosf新版
2008-5-16 IssTech信息反馈系统 v1.0
2008-5-16 自由领域大头贴(js接口版) 修正版
2008-5-16 医院网站系统
2008-5-16 智拓-分类信息管理系统 v5.0
2008-5-7 Windows XP SP3 官方英文版
2008-5-7 Windows XP SP3 官方香港中文版
2008-5-7 Windows XP SP3 官方繁体中文版
2008-5-7 Windows XP SP3 官方简体中文版
2008-4-30 Multiple Unzip Wizard 1.02
2008-4-30 Multiple Unrar Wizard 1.0.0
2008-4-30 WinZip Install/Try/Uninstall a
2008-4-30 ZIP压缩文件修复器WzipFix 2.0
2008-4-30 Pentazip 6.01 Build 189 For Wi
  发表评论
姓 名: 验证码: [ 全部贴吧 ] [ 浏览评论 ]
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号