|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在性能方面,在windows平台下,.net可能是占强项,要是把.net放在sun开发的操作系统上去运行呢?根本就运行不了,.net对其它操作系统的支持也很弱,性能也可能比不上java。server|sqlserver|成绩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
/*
/********************************************/
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中碰到的狐疑
按事理讲,上边这段代码应当没错,可起首我们来看一下,假如sqlser服务器没有晋级到sp3(在利用jdbc时,假如体系是xp大概2003务需要把sqlserver晋级到sp3,往上各处都有下的),我们看看运转了局
driverisok
java.sql.SQLException:[Microsoft][SQLServer2000DriverforJDBC]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:[Microsoft][SQLServer2000DriverforJDBC][SQLServer]对
象名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...
此次顺遂经由过程测试
总结:sqlserve和jdbc的交融成绩,关头触及到sp3补钉(端口开放)另有用户成绩,办理这两个成绩以后,残剩的即是sqlserver操纵成绩了,另有一点在远程操纵的时分,要把sqlserver组设置一下,在平安性里边亦将身份考证变动为sqlserve考证便可
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。 |
|