??xml version="1.0" encoding="utf-8" standalone="yes"?> 用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; public class ODBCBridge { public static void main(String[] args) { 现在介绍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|站上下? SETUP.EXE q个驱动E序要配合SQL SERVER2000 SP3AQ相应下载URL? 如果用JAVA SDK直接~译q行的话需要设|环境变量,安装好的JDBC驱动里面的LIB三个文g讄为环境变量: 安装卛_用微软的驱动E序q接数据库了Q相应代码与前面基本相同Q? import java.sql.*; public static void main(String[] args) { 1、Oracle8/8i/9i数据库(thin模式Q ?
JAVA与数据库q接ҎQ一Q?img height="19" src="http://www.aygfsteel.com/Emoticons/thumbs_down.gif" width="19" border="0" />
import java.io.InputStreamReader;
import java.sql.*;
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>
http://www.microsoft.com/downloads/details.aspx?FamilyID=9f1874b6-f8e1-4bd6-947c-0fc5bf05bf71&DisplayLang=en 下蝲最下面?/p>
http://www.microsoft.com/china/sql/downloads/sp3.asp 下蝲 chs_sql2ksp3.exe
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;
import java.io.*;
public class DBColumn {
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>
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);
]]>
引用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();
}
}
引用h明出?/span>
:http//www.aygfsteel.com/SINOJAVA
1. JDBC
q接
SQL Server
下蝲
SQL Server JDBC
驱动
讄
CLASSPATH=.;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
例子Q?/span>
import java.sql.*;
public class ConSqlserver{
Connection con;
Statement st;
ResultSet rs;
public ConSqlserver(){
try{
String name="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=northwind;User=user;Password=password";
Class.forName(name);
con=DriverManager.getConnection(url,"user","password");
System.out.println("
q接成功
!");
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String args[])
{
ConSqlserver cs=new ConSqlserver();
}
}
2.JDBC
q接
ORACLE- -
oracle
自己?/span>
jdbc
驱动Q具体位|在
C:\oracleora92\jdbc\lib\classes12.jar
讄
CLASSPATH=.;C:\oracleora92\jdbc\lib\classes12.jar
例子Q?/span>
import java.sql.*;
public class ConOracle{
Connection con;
Statement st;
ResultSet rs;
public ConOracle(){
try{
String name="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin@localhost:1521:database";
Class.forName(name);
con=DriverManager.getConnection(url,"user","password");
System.out.println("
q接成功
!");
con.close();
}catch(Exception e){
e.printStackTrace();
}
public static void main(String args[]){
ConOracle co=new ConOracle();
}
}
3.JDBC
q接
MySQL
下蝲
MySQLJDBC
驱动
讄
CLASSPATH=.;C:\Program Files\MySQL\mysql-connector-java-3.2.0-alpha\mysql-connector
-java-3.2.0-alpha\mysql-connector-java-3.2.0-alpha-bin.jar
例子Q?/span>
import java.sql.*;
public class ConMysql{
Connection con;
Statement st;
ResultSet rs;
public ConMysql(){
try{
String name="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost/database?user=user&password=password";
Class.forName(name);
con=DriverManager.getConnection(url);
System.out.println("
q接成功
!");
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String args[]){
ConMysql cms=new ConMysql();
}
}
4.
JDBC
q接
DB2-
-
DB2
自己?/span>
jdbc
驱动Q具体位|在
C:\Program Files\IBM\SQLLIB\java\db2jcc.jar
C:\Program Files\IBM\SQLLIB\java\db2jcc_license_cu.jar
C:\Program Files\IBM\SQLLIB\java\db2jcc_license_cisuz.jar
讄
CLASSPATH=.;C:\ProgramFiles\IBM\SQLLIB\java\db2jcc.jar;
C:\ProgramFiles\IBM\SQLLIB\java\db2jcc_license_cu.jar;
C:\ProgramFiles\IBM\SQLLIB\java\db2jcc_license_cisuz.jar
注意Q在使用
jdbc
q接
db2
Ӟ一定要?/span>
ibm
自己?/span>
jdk
Q?/span>
否则执行会出现错误,可能?/span>
ibm
?/span>
jdbc
驱动?/span>
sun
?/span>
jdk
不兼容的问题
具体位置?/span>
C:\Program Files\IBM\SQLLIB\java\jdk
例子Q?/span>
import java.sql.*;
public class ConDB2{
Connection con;
Statement st;
ResultSet rs;
public ConDB2(){
try{
String name="com.ibm.db2.jcc.DB2Driver";
String url="jdbc:db2://localhost:50000/database";
Class.forName(name);
con=DriverManager.getConnection(url,"user","password");
System.out.println("
q接成功
!");
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String args[]){
ConDB2 cd=new ConDB2();
}
}
引用h明出?/span>
:http//www.aygfsteel.com/SINOJAVA
所谓的“实例”,是一?/span>
SQL Server
数据库引擎?/span>
SQL Server 2000
支持在同一台计机上同时运行多?/span>
SQL Server
数据库引擎实例。每?/span>
SQL Server
数据库引擎实例各有一套不为其他实例共享的pȝ及用h据库。应用程序连接同一台计机上的
SQL Server
数据库引擎实例的方式与连接其他计机上运行的
SQL Server
数据库引擎的方式基本相同。由于实例各有一套不为其他实例共享的pȝ及用h据库Q所以各实例的运行是独立的,一个实例的q行不会受其他实例运行的影响Q也不会影响其他实例的运行。在一台计机上安装多?/span>
SQL Server
实例Q就相当于把q台计算机模拟成多个数据库服务器Q而且q些模拟的数据库服务器是独立且同时运行的?/span>
实例包括默认实例和命名实例两U。一台计机上最多只有一个默认实例,也可以没有默认实例,默认实例名与计算机名相同Q修改计机名会同步修改默认实例名(
SQL Server 7.0
只能被安装ؓ默认实例Q在修改计算机名后,会导?/span>
SQL Server
服务无法启动Q需要执?/span>
SQL Server
安装E序q行自动修复才能解决启动问题Q,客户端连接默认实例时Q将使用安装
SQL Server
实例的计机名?/span>
在同一台计机上安?/span>
SQL Server 7.0
?/span>
SQL Server 2000
Ӟ׃
SQL Server 7.0
只能安装为默认实例,所以应该先安装
SQL Server 7.0
Q将
SQL Server 2000
安装为命名实例。或者在安装
SQL Server 2000
的时候,指定安装为命名实例?/span>
一台计机上可以安装多个命名实例,客户端连接命名实例时Q必M用以下计机名称与命名实例的实例名组合的格式Q?/span>
computer_name\instance_name
实例主要应用于数据库引擎及其支持lgQ而不应用于客L工具。如果安装了多个实例Q则每个实例都将获得各自唯一的一套:
实例׃nlg:
以下lg可由q行于同一台计机上的所有实例共享:
E序l中的实用工L本来自计机上最先安装的 SQL Server 2000 版本。例如,如果?span lang="EN-US"> SQL Server 2000 体中文版作ؓ默认实例安装Q然后将 SQL Server 2000 国p版作为命名实例安装,则只有一?span lang="EN-US"> SQL Server 2000 E序l。该E序l中的所有实用工具图标和 SQL Server 联机丛书图标都将启动体中文版的工兗?span lang="EN-US">
所?span lang="EN-US"> SQL Server 2000 实用工具都能处理多个实例。可以从一?span lang="EN-US"> SQL Server 2000 服务理器的复本启动和停止每个实例。可使用一?span lang="EN-US"> SQL Server 2000 SQL Server 企业理器复本控制计机上所有实例中的对象,使用一?span lang="EN-US"> SQL Server 2000 服务器网l管理器复本理计算Z所有实例的|络通讯地址?span lang="EN-US">
[
原创
]
JDBC
如何q接
SQL SERVER 2000
命名实例的调试全q程
引用h明出?/span>
:http//www.aygfsteel.com/SINOJAVA
(
一
)
整个操作及出错简要介l?/span>
:
我用微Y提供?/span>
JDBC
驱动E序来连?/span>
,
我机?/span>
SQL SERVER2000
安装时创建的是新?/span>
SQL SERVER2000
命名实例
(
没有安装
SQL Server 2000
数据库默认实?/span>
),
?/span>
jdbc
安装
,
配置好以后开始连接数据库
,
我用的q接语句如下
(
我已l装?/span>
SP3
补丁
)
L
try
{
String driver="com.microsoft.jdbc.sqlserver.SqlServerDriver";
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=northwind;";
Class.forName(driver);
con =DriverManager.getConnection(url,"sa","zhaopf");
System.out.println("
q接成功
!");
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
q行E序后出现如下错误提C?/span>
:
E:\Java\eclipse>java ConSqlserver
java.lang.ClassNotFoundException: com.microsoft.jdbc
at java.net.URLClassLoader$1.run(Unknown Sou
at java.security.AccessController.doPrivileg
at java.net.URLClassLoader.findClass(Unknown
at java.lang.ClassLoader.loadClass(Unknown S
at sun.misc.Launcher$AppClassLoader.loadClas
at java.lang.ClassLoader.loadClass(Unknown S
at java.lang.ClassLoader.loadClassInternal(U
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at ConSqlserver.<init>(ConSqlserver.java:19)
at ConSqlserver.main(ConSqlserver.java:40)
(
?/span>
)
调试q程如下
:
(1)
排除
jdbc
驱动出错
:
配|?/span>
jdbc
驱动的环境变量删除后q行
,
昄的错误信息如?/span>
:
E:\Java\eclipse>java ConSqlserver
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at ConSqlserver.<init>(ConSqlserver.java:37)
at ConSqlserver.main(ConSqlserver.java:60)
?/span>
:
排除?/span>
jdbc
驱动安装的问?/span>
(2)
排除
SQL SERVER
安装问题
,
重新安装
SQL SERVER 2000,
此次安装选用
SQL SERVER2000
的默认实?/span>
,
q用上述的连接代码段
,
然后l箋调试E序成功
,
q行昄
:
E:\Java\eclipse>java ConSqlserver
q接成功
!
(3)
认数据库的安装中创建实例概忉|p?/span>
(4)
d弄清
SQL SERVER 2000
的默认实例与命名实例的含?/span>
(5)
重新查找关于
SQL SERVER 2000 JDBC
的帮助文?/span>
,
查得资料如下
:
Microsoft SQL Server 2000 supports multiple instances of a SQL Server database running
concurrently on the same server. An instance is identified by an instance name.
To connect to a named instance using a connection URL, use the following URL format:
jdbc:microsoft:sqlserver://server_name\\instance_name
NOTE: The first backslash character (\) in \\instance_name is an escape character.
where:
server_name is the IP address or hostname of the server.
instance_name is the name of the instance to which you want to connect on the server.
For example, the following connection URL connects to an instance named instance1 on
server1:
jdbc:microsoft:sqlserver://server1\\instance1;User=test;Password=secret
To connect to a named instance using a data source, specify the ServerName connection
property as described in the "Connection String Properties" topic.
(6)
重新修改q接代码如下
:
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();
}
(7)
l测试连接成?/span>