若天明 发表于 2015-1-16 22:26:29

MSSQL网页编程之SQL Server2000+JDBC罕见成绩及办理

EXAMPLE存储引擎是一个不做任何事情的存根引擎。它的目的是作为MySQL源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE存储引擎不支持编索引。server|办理|成绩SQLServer2000是现今收集编程中利用的对照多的一个数据库体系,java是今朝最盛行的编程言语,在编程中触及的对照多也对照主要的就是数据库成绩,java本身供应了对各种支流数据库体系的撑持,经由过程java.sql库,供应了一致的接口,使得能够在java情况下不用对程序作年夜范围的修正,只需变动响应的驱动程序,便可完成对各种数据库的操纵,从而进步软件的保存周期和下降软件的开辟本钱和保护用度,在这类情形下SQLServer2000和java的交融成绩就显得对照主要了,本文扼要地论述一下SQLServer2000和jdk的交融成绩。  体系需求:
   数据库:SQLServer2000sp3
   驱动程序:SQLServerdriverforjdbc
   java版本:jdk1.2以上
  1:我们起首利用jdbc-odbc桥来完成数据库的毗连,这个绝对复杂。
  
  起首利用SQLServer企业办理其创建一个数据库test,并创建一个复杂的表first_table
  创建odbc数据源,各步骤接纳默许操纵便可
  编写一个复杂的测试程序,该程序次要完成数据库的毗连,和一个复杂的sql操纵,代码以下:
/***********************************************
/*
/*DbTest.java
/*
/********************************************/
importjava.sql.*;
publicclassDbTest{
 Connectioncon;
 Statementsta;
 ResultSetrs;
 Stringdriver;
 Stringurl;
 Stringuser;
 Stringpwd;
 publicDbTest()
 {
  driver="sun.jdbc.odbc.JdbcOdbcDriver";
  url="jdbc:odbc:store_manager";
  user="share";
  pwd="share";
  init();
 }
 publicvoidinit()
 {
  try{
   Class.forName(driver);
   System.out.println("driverisok");
   con=DriverManager.getConnection(url,user,pwd);
   System.out.println("conectionisok");
   sta=con.createStatement();
   rs=sta.executeQuery("select*fromroom");
   while(rs.next())
    System.out.println(rs.getInt("roomNum"));
  }catch(Exceptione)
  {
   e.printStackTrace();
  }
 }
 publicstaticvoidmain(Stringargs[])//本人交换[]
 {
  newDbTest();
 }
}
  运转了局以下:
driverisok
conectionisok
1001
1002
1003
1004
1005
1006
Pressanykeytocontinue...
  顺遂经由过程测试
  2、我们此次欠亨过odbc桥来操纵数据库,我们接纳SQLServerdriver来完成对SQLServer数据库的操纵,这将是我们这篇文章的重点,由于jdbc-odbc桥是一种罕见的操纵windows体系数据库的经常使用办法,但它存在的弱点良多,以是如今良多开辟者都偏重于利用sqlserverdriver来操纵,在这里我们经由过程一步步的调试,来加深读者对这类毗连的了解
  在一般的了解下,只需我们装了sqlserverdriverforjdbc我们即可举行数据库编程,现实则否则,起首我们看下边的代码:
/***********************************************
/*
/*DbTest.java
/*http://www.ckuyun.com
/********************************************/
importjava.sql.*;
publicclassDbTest{
 Connectioncon;
 Statementsta;
 ResultSetrs;
 Stringdriver;
 Stringurl;
 Stringuser;
 Stringpwd;
 publicDbTest()
 {
  driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";;
  url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=StoreManager";
  user="sa";
  pwd="potsmart10";
  init();
 }
 publicvoidinit()
 {
  try{
   Class.forName(driver);
   System.out.println("driverisok");
   con=DriverManager.getConnection(url,user,pwd);
   System.out.println("conectionisok");
   sta=con.createStatement();
   rs=sta.executeQuery("select*fromroom");
   while(rs.next())
   System.out.println(rs.getInt("roomNum"));
  }catch(Exceptione)
  {
   e.printStackTrace();
  }
 }
 publicstaticvoidmain(Stringargs[])//本人交换[]
 {
  newDbTest();
 }
}
  这段代码跟上变得代码是一样的,不同在于驱动,另有url,这是在利用sqlserverdriverforjdbc中碰到的狐疑。按事理讲,上边这段代码应当没错,可起首我们来看一下,假如SQLServer服务器没有晋级到sp3(在利用jdbc时,假如体系是xp大概2003务需要把sqlserver晋级到sp3,往上各处都有下的),我们看看运转了局
driverisok
java.sql.SQLException:Errorestablis
hingsocket.
atcom.microsoft.jdbc.base.BaseExceptions.createException(UnknownSource
)
atcom.microsoft.jdbc.base.BaseExceptions.getException(UnknownSource)
atcom.microsoft.jdbc.base.BaseExceptions.getException(UnknownSource)
atcom.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(UnknownSource)
atcom.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(UnknownSou
rce)
atcom.microsoft.jdbc.base.BaseConnection.getNewImplConnection(UnknownS
ource)
atcom.microsoft.jdbc.base.BaseConnection.open(UnknownSource)
atcom.microsoft.jdbc.base.BaseDriver.connect(UnknownSource)
atjava.sql.DriverManager.getConnection(DriverManager.java:523)
atjava.sql.DriverManager.getConnection(DriverManager.java:171)
atDbTest.init(DbTest.java:32)
atDbTest.<init>(DbTest.java:25)
atDbTest.main(DbTest.java:46)
Pressanykeytocontinue...
  呈现上边毛病的次要缘故原由是默许的数据库服务器端口1433没有翻开,没法间接毗连。
  假如晋级到sp3则这个成绩能够结决,我们再来看看晋级以后,程序运转的了局
driverisok
conectionisok
java.sql.SQLException:对
象名room有效。
atcom.microsoft.jdbc.base.BaseExceptions.createException(UnknownSource
)
atcom.microsoft.jdbc.base.BaseExceptions.getException(UnknownSource)
atcom.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown
Source)
atcom.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown
Source)
atcom.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(
UnknownSource)
atcom.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(UnknownSour
ce)
atcom.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType
(UnknownSource)
atcom.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown
Source)
atcom.microsoft.jdbc.base.BaseStatement.postImplExecu
te(UnknownSource)
atcom.microsoft.jdbc.base.BaseStatement.commonExecute(UnknownSource)
atcom.microsoft.jdbc.base.BaseStatement.executeQueryInternal(UnknownSo
urce)
atcom.microsoft.jdbc.base.BaseStatement.executeQuery(UnknownSource)
atDbTest.init(DbTest.java:35)
atDbTest.<init>(DbTest.java:25)
atDbTest.main(DbTest.java:46)
Pressanykeytocontinue...
  在这儿,用户已上岸上往,可是却不克不及会见里边的数据表,呈现这个成绩的缘故原由在于sa用户为体系用户,它固然可以上岸数据库,可是storeManager数据库里边却没有这个用户的会见权限,以是,我们如今为这个数据库从头创建一个用户share,创建历程以下:在storeManager数据库当选重用户---〉新建用户--〉称号选择(这一步中有两个关头点1:身份考证选sql身份考证,默许数据库选StoreManager)-〉创建新教色share,此时变动程序,将用户上岸名和暗码修正一下,从头运转程序
driverisok
conectionisok
1001
1002
1003
1004
1005
1006
Pressanykeytocontinue...
  此次顺遂经由过程测试
  总结:
  SQLServer和jdbc的交融成绩,关头触及到sp3补钉(端口开放)另有用户成绩,办理这两个成绩以后,残剩的即是sqlserver操纵成绩了,另有一点在远程操纵的时分,要把sqlserver组设置一下,在平安性里边亦将身份考证变动为SQLServer考证便可。
限制,如果WHERE子句的查询条件里有不等号(WHEREcoloum!=),MySQL将无法使用索引。类似地,如果WHERE子句的查询条件里使用了函数(WHEREDAY(column)=),MySQL也将无法使用索引。

老尸 发表于 2015-1-19 12:19:09

从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。

精灵巫婆 发表于 2015-1-26 15:59:23

习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。

简单生活 发表于 2015-2-4 20:08:15

其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!

莫相离 发表于 2015-2-10 06:38:02

另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);

海妖 发表于 2015-3-1 01:42:57

SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)

愤怒的大鸟 发表于 2015-3-10 12:25:03

我个人认为就是孜孜不懈的学习

不帅 发表于 2015-3-17 07:08:24

比如日志传送、比如集群。。。

飘飘悠悠 发表于 2015-3-24 01:03:48

呵呵,这就是偶想说的
页: [1]
查看完整版本: MSSQL网页编程之SQL Server2000+JDBC罕见成绩及办理