[
原创
]
JDBC
如何q接
SQL SERVER 2000
的默认实例和命名实例
引用h明出?/span>
:http//www.aygfsteel.com/SINOJAVA
(
一
)
下蝲
Microsoft SQL Server 2000 Service Pack 3a
q安?/span>
http://www.microsoft.com/downloads/details.aspx?FamilyId=90DCD52C-0488-4E46-AFBF-ACACE5369FA3&displaylang=zh-cn
(
?/span>
)
下蝲q安?/span>
SQL SERVER 2000
?/span>
JDBC
驱动
(
SQL Server 2000 Driver for JDBC Service Pack 3
)
(
?/span>
)
配置
JDBC
驱动
classpath
环境变量
:
Ҏ
1:
填加
:
C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msbase.jar;
C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\mssqlserver.jar;
C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msutil.jar;
?/span>
: C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\
为我
JDBC
得安装\?/span>
Ҏ
2:
?/span>
mssqlserver.jar; msutil.jar; msbase.jar
拯?/span>
JDK
?/span>
lib
目录?/span>
,
然后讄
classpath
D:\Java\jdk1.5.0_05\lib\sqlserver\msutil.jar;
D:\Java\jdk1.5.0_05\lib\sqlserver\msbase.jar;
D:\Java\jdk1.5.0_05\lib\sqlserver\mssqlserver.jar;
(
?/span>
)
创徏q接数据库默认实例得q接代码
:
import java.sql.*;
public class ConSqlserver {
Connection con=null;
//Statement st=null;
//ResultSet re=null;
public ConSqlserver()
{
try
{
String driver="com.microsoft.jdbc.sqlserver.SqlServerDriver";
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind";
Class.forName(driver).newInstance();
con =DriverManager.getConnection(url,"sa","zhaopf");
System.out.println("
q接成功
!");
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
// TODO
自动生成Ҏ存根
ConSqlserver con=new ConSqlserver();
}
}
(
?/span>
)
创徏q接数据库命名实例的q接代码
(
实例名ؓ
SINOIT\SINOSERVER)
L
import java.sql.*;
public class ConSqlserverppp {
Connection con=null;
//Statement st=null;
//ResultSet re=null;
public ConSqlserverppp()
{
try
{
//String driver="com.microsoft.jdbc.sqlserver.SqlServerDriver";
String url="jdbc:microsoft:sqlserver://SINOIT\\SINOSERVER;DatabaseName=Northwind";
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
//Class.forName(driver);//.newInstance();
con =DriverManager.getConnection(url,"sa","zse");
//st=con.createStatement();
System.out.println("
q接成功
!");
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
ConSqlserverppp con=new ConSqlserverppp();
}
}
用JAVAq接数据库主要有两种方式Q?font color="#0000ff">一是用JDBC-ODBC桥来q接Q?font color="#0000ff">二是用相兛_商提供的相应驱动E序来连接,首先谈谈W一U连接?/font>
JDBC-ODBC桥接器是用JdbcOdbc.Class和一个用于访问ODBC驱动E序的本地库实现的。对于WINDOWSq_Q该本地库是一个动态连接库DLL
(JDBCODBC.DLL)?
׃JDBC在设计上与ODBC很接q。在内部Q这个驱动程序把JDBC的方法映到ODBC调用上,q样QJDBC可以和M可用的ODBC驱动E序q行
交互了。这U桥接器的优ҎQ它使JDBC目前有能力访问几乎所有的数据库。通行方式如图所C:
应用E序---JDBC API---JDBC-ODBC---ODBC API---ODBC?--数据?
具体操作Ҏ为:
首先打开控制面板的管理工P打开数据源(ODBCQ,在用户DSN里面d数据源(即你要连接的数据库的名字Q,在这里假定连接SQL SERVER
2000的GoodsSupply数据库。名U填写你要连接的数据库的名称QGoodsSupplyQ,然后逐步讄Q如果选用了用SQL-SERVER密码认证的话Q?/p>
p输入相应的用户名及密码连接到数据库。一路下一步设|完成?
在JAVA里面~写E序q行试Q在q里我的E序是让用户输入L的表名与与列名,把该列的所有数据输出。源代码如下Q?
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.*;
public class ODBCBridge {
public static void main(String[] args) {
String url="jdbc:odbc:GoodsSupply";
Statement sm=null;
String command=null;
ResultSet rs=null;
String tableName=null;
String cName=null;
String result=null;
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
try {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加蝲驱动
}catch(ClassNotFoundException e){
System.out.println("Can not load Jdbc-Odbc Bridge Driver");
System.err.print("ClassNotFoundException:");
System.err.println(e.getMessage());
}
Connection con=DriverManager.getConnection(url,"USER","PASSWORD"); //使用SQL-SERVER2000认证
DatabaseMetaData dmd=con.getMetaData(); //DMD接的相应情况
System.out.println("q接的数据库:"+dmd.getURL());
System.out.println("驱动E序:"+dmd.getDriverName());
sm=con.createStatement();
System.out.println("输入表名");
tableName=input.readLine();
while(true) {
System.out.println("输入列名(为空时程序结?:");
cName=input.readLine();
if(cName.equalsIgnoreCase(""))
break;
command="select "+cName+" from "+tableName;
rs=sm.executeQuery(command); //执行查询
if(!rs.next())
System.out.println("表名或列名输入有?);
else {
System.out.println("查询l果?");
do
{
result=rs.getString(cName);
//数据库语a讄Z文,不用转换~码
//result=new String(result.getBytes("ISO-8859-1"),"GB2312");
System.out.println(result);
}while(rs.next());
}
}
}catch(SQLException ex) {
System.out.println("SQLException:");
while(ex!=null) {
System.out.println("Message:"+ex.getMessage());
ex=ex.getNextException();
}
}catch(Exception e) {
System.out.println("IOException");
}
}
}
JAVA与数据库q接ҎQ二Q?/strong>
现在介绍W二U方法,用关厂商提供的相应驱动程序来q接?
q种实现Ҏ是直接用数据库厂商提供的用专用的网l协议创建的驱动E序Q通过它可以直接将JDBC API调用转换为直接网l调用。这U调
用方式一般性能比较好,而且也是实用中最单的Ҏ。因为它步需要安装其他的库或中间件。几乎所有的数据库厂商都Z们的数据库提?/p>
了这U数据库提供了这UJDBC驱动E序Q也可以从第三方厂商获得q些驱动E序?
从网址http://industry.Java.sun.com/products/jdbc/drivers/可以看到所有有用的驱动E序的清单。其l果如图所C:
应用E序---JDBC API---驱动E序---数据?
q里首先要安装JDBC的驱动程序,推荐SP2版本的,可从微Y|站上下?
http://www.microsoft.com/downloads/details.aspx?FamilyID=9f1874b6-f8e1-4bd6-947c-0fc5bf05bf71&DisplayLang=en 下蝲最下面?/p>
SETUP.EXE
q个驱动E序要配合SQL SERVER2000 SP3AQ相应下载URL?
http://www.microsoft.com/china/sql/downloads/sp3.asp 下蝲 chs_sql2ksp3.exe
如果用JAVA SDK直接~译q行的话需要设|环境变量,安装好的JDBC驱动里面的LIB三个文g讄为环境变量:
classpathQ?
D:\program files\Microsoft SQL Server\jdbc\lib\msbase.jar;
D:\program files\Microsoft SQL Server\jdbc\lib\mssqlserver.jar;
D:\program files\Microsoft SQL Server\jdbc\lib\msutil.jar;
安装卛_用微软的驱动E序q接数据库了Q相应代码与前面基本相同Q?
import java.sql.*;
import java.io.*;
public class DBColumn {
public static void main(String[] args) {
Connection con=null;
Statement sm=null;
String command=null;
ResultSet rs=null;
String tableName=null;
String cName=null;
String result=null;
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
System.out.println("驱动E序已加?);
//SQL SERVER的登陆方式必Mؓ使用SQL SERVER密码登陆认证方式
con=DriverManager.getConnection("jdbc:microsoft:sqlserver://SERVERNAME:1433","USER","PASSWORD");
con.setCatalog("GoodsSupply");
System.out.println("OK,成功q接到数据库");
}catch(Exception ex) {
ex.printStackTrace();
}
try
{
sm=con.createStatement();
System.out.println("输入表名");
tableName=input.readLine();
while(true) {
System.out.println("输入列名(为空时程序结?:");
cName=input.readLine();
if(cName.equalsIgnoreCase(""))
break;
command="select "+cName+" from "+tableName;
rs=sm.executeQuery(command);
if(!rs.next())
System.out.println("表名或列名输入有?);
else {
System.out.println("查询l果?");
do
{
result=rs.getString(cName);
//result=new String(result.getBytes("ISO-8859-1"),"GB2312");
System.out.println(result);
}while(rs.next());
}
}
}catch(Exception ex) {
ex.printStackTrace();
}
}
}
JAVA与数据库q接ҎQ三Q?img height="19" src="http://www.aygfsteel.com/Emoticons/thumbs_down.gif" width="19" border="0" />
最后给出JAVAq接其他数据库的关键代码Q?/p>
1、Oracle8/8i/9i数据库(thin模式Q ?
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为数据库的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
2、DB2数据库 ?
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sampleZ的数据库名 ?
String user="admin";
String password="";
Connection conn=DriverManager.getConnection(url,user,password);
3、Sybase数据库 ?
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";
//myDBZ的数据库名 ?
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
4、Informix数据库 ?
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//myDB为数据库名 ?
Connection conn= DriverManager.getConnection(url);
5、MySQL数据库 ?
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=
true&characterEncoding=8859_1"
//myDB为数据库名 ?
Connection conn= DriverManager.getConnection(url);
6、PostgreSQL数据库 ?
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB"
//myDB为数据库名 ?
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);