热列祝贺:中国共产党第十七次全国代表大会胜利闭幕   颜色主题:   网页游戏 软件下载 软件文章 常用网址 自助友情
 首页程序设计数据库操作系统办公系列WEB开发项目专题网络安全图形图像站点地图友情链接
 您的位置: >首页 >程序设计 >Java >未分类 >SQL Server2000+JDBC常见问题及解决
  文章搜索
按名称 按简介
  本类推荐
· HTML转PDF (不支持中文)
· 缩小图片的高和宽
· Java异常处理--尽量不要从tr...
· Java的数组(Array)、Vector...
· 一个简单的用JAVA实现的屏幕抓...
· JAVA国际化DEMO
· java 面试中的一道编写一个截...
· Vector在Java编程中的应用
· 浅析Java中Data类的应用
· 深入研究Servlet线程安全性问题
  本类排行
· java解rar压缩
· 删除文件夹下的所有文件
· java解zip压缩 和 把目录压缩...
· 在eclipse + MyEclipse下配置...
· HTML转PDF (不支持中文)
· java中文问题(原创)
· JAVA中通过JDBC访问MS SQLServ...
· weblogic——远程/近程调用EJB...
· 避免重启你的应用程序 一
· 把数据写入Excel文件中
· java锁住一个文件(独占方式访...
· java实现URL带参数请求(get/po...
· Hibernate获得成功的十大理由
· EJB3 and Hibernate3 Annotati...
· Java中的“数据集”
· EJB3 and Hibernate Annotatio...
· 一篇关于session的好文!
· JDBC基础知识(1)
· 避免重启你的应用程序 二
· java实现URL带参数请求(get/po...
· Struts控制器组件
· MyEclipse开发Struts框架的Hel...
· 小谈JDBC中的连接与连接池
· 反醒一下,兼java.lang的一点点...
· 利用JSP获取网页源文件并抓取...
· Java参数传递的一些心得
· Java源码分析:深入探讨Iterat...
· So what are inner classes go...
· SQL Server2000+JDBC常见问题...
· java.net.InetSocketAddress翻译
· JAVA对数字证书的常用操作
· 我翻译的J2EE平台安全(原著是...
· 在 Java 应用程序中访问USB设备
· 得到一张图片的宽度和高度
· 缩小图片的高和宽
· Java的数组(Array)、Vector...
· 深入研究Servlet线程安全性问题
· Java新手上路大全(初学必看)
· JAVA国际化DEMO
· Java异常处理--尽量不要从tr...
· 浅析Java中Data类的应用
· Vector在Java编程中的应用
· Java Applet 入门(目录)
· 一个简单的用JAVA实现的屏幕抓...
· Java学习从入门到精通 3过程篇
· java 面试中的一道编写一个截...
· Java打印程序设计全攻略
· Java学习从入门到精通 2书籍篇
· Eclipse 3.0 简介和插件开发示例
· Java学习从入门到精通 1工具篇
SQL Server2000+JDBC常见问题及解决

  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.(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.(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.(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 验证即可。
  相关软件
·MySQL Server for windows v5.0
·Access-To-MySQL v3.3
·PL/SQL Developer v7.0.1 中文绿色版
·Microsoft SQL Server 2000 四合一
·SQLTools v1.5 buld 9 Beta
·SQL Server 7 24学时教程
·SQL Server 7资源指南
·SQL Server 7.0 数据库管理与应用开发
·SQL Server2000开发指南
·SQL Server 7编程技术内幕
  相关文章
·JAVA中通过JDBC访问MS SQLServer2000的常见问题
·SQL Server(存储过程)临时表与滞后名称解析
·SQL Server应用程序中的高级SQL注入(2)
·将SQL SERVER中所有表的列信息显示出来〔总结〕
·SQL Server 中系统表的作用
·MYSQL创建、删除和选择数据库
·MySQL索引分析和优化
·学习MySQL常用操作命令
·用MySQL创建数据库和数据库表
·ACCESS中使用SQL语句应注意的地方及几点技巧
下载帮助 发布软件 自助友情 友情链接 网站导航 广告服务 法律声明 联系我们
六世下载 版权所有 ©2005-2007
本站的数据收集于网络,版权归原作者及出版社所有 如果您觉得侵犯了您的版权请来信告诉我们,我们会尽快删除其内容!
鲁ICP备05050400号