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也将无法使用索引。 从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。 习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。 其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?! 另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程); SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。) 我个人认为就是孜孜不懈的学习 比如日志传送、比如集群。。。 呵呵,这就是偶想说的
页:
[1]