关于医学的心得体会:我用hibernate 连接数据库(sqlserver),开发工具是myeclipse如何连接??

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 18:07:33
我现在的一个项目是用myeclipse,我想用hibernate连接sqlserver
但是老提示URL错误,请高手帮忙~~~~~
driver name :com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://DbComputerNameOrIP:1433;databaseName=pubs
username:sa
password:sa
我的就是这些,提示URL错误

// $Id: BasicJdbcOperateTest.java,v 1.1 2006/07/28 01:13:57 aaron Exp $
package cn.net.isomtri.test.jdbc;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;

import junit.framework.TestCase;

import org.springframework.jdbc.datasource.DriverManagerDataSource;

import com.eaio.uuid.UUID;

// CREATE TABLE "DOCUMENT"."T_DOC001"
// ( "DOC_ID" CHAR(32) NOT NULL ENABLE,
// "LANG_TYPE" CHAR(2) NOT NULL ENABLE,
// "DOC_NAME" VARCHAR2(200) NOT NULL ENABLE,
// "PUB_DATE" DATE,
// "SOURCE" VARCHAR2(200),
// "SUMMARY" VARCHAR2(2000),
// "TEST" NUMBER(10,2),
// CONSTRAINT "PK_T_DOC001" PRIMARY KEY ("DOC_ID")
// USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
// STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
// PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
// TABLESPACE "USERS" ENABLE
// ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
// STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
// PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
// TABLESPACE "USERS"
/**
* 基本JDBC调用测试类
*
* @author 刘德欣
* @created 2006/07/27
* @version $Revision: 1.1 $, $Date: 2006/07/28 01:13:57 $
*/
public class BasicJdbcOperateTest
extends
TestCase {

/**
* JDBC驱动:driverClassName <br>
* MySQL:"com.mysql.jdbc.Driver" <br>
* PostgreSQL:"org.postgresql.Driver" <br>
* Oracle:"oracle.jdbc.driver.OracleDriver" <br>
* Sybase:"com.sybase.jdbc2.jdbc.SybDriver" <br>
* SQLServer:"com.microsoft.jdbc.sqlserver.SQLServerDriver" <br>
* DB2:"com.ibm.db2.jdbc.net.DB2Driver" <br>
*/
private static final String DRIVER_CLASS_NAME = "oracle.jdbc.driver.OracleDriver";

/**
* 数据库连接字:url <br>
* MySQL:"jdbc:mysql://DbComputerNameOrIP:3306/DbName" <br>
* PostgreSQL:"jdbc:postgresql://DbComputerNameOrIP:3306/DbName" <br>
* Oracle:"jdbc:oracle:thin:@DbComputerNameOrIP:1521:DbName" <br>
* Sybase:"jdbc:sybase:DbName:DbComputerNameOrIP:2638" <br>
* SQLServer:"jdbc:microsoft:sqlserver://DbComputerNameOrIP:1433;databaseName=DbName"
* <br>
* DB2:"jdbc:db2://DbComputerNameOrIP/DbName" <br>
*/
private static final String URL = "jdbc:oracle:thin:@172.16.50.11:1521:ISOMTRI";

/**
* 数据库访问所需要的用户名:username
*/
private static final String USERNAME = "document";

/**
* 数据库访问所需要的密码:password
*/
private static final String PASSWORD = "institute";

/**
* JDBC基本概念
*/
public void testBasicJdbcOperate1() {

try {
// 加载JDBC驱动
Class.forName(DRIVER_CLASS_NAME);

// 建立数据库连接
Connection conn = DriverManager.getConnection(URL, USERNAME,
PASSWORD);

// 关闭数据库连接
conn.close();

assertTrue(true);
} catch (SQLException e) {
e.printStackTrace();
fail();
} catch (ClassNotFoundException e) {
fail();
}
}

/**
* 使用统一的方法连接数据库
*
* @return 数据库连接器
*/
protected Connection getConnection() {

Connection conn = null;

try {

DriverManagerDataSource dataSource = new DriverManagerDataSource();

dataSource.setDriverClassName(DRIVER_CLASS_NAME);
dataSource.setUrl(URL);
dataSource.setUsername(USERNAME);
dataSource.setPassword(PASSWORD);

// 加载JDBC驱动
// Class.forName(DRIVER_CLASS_NAME);
// 建立数据库连接
// conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);

conn = dataSource.getConnection();

assertTrue(true);
} catch (SQLException e) {
e.printStackTrace();
fail();
}

return conn;
}

/**
* 最基本的CRUD操作
*/
public void testBasicJdbcOperate2() {

// step 1
String id = create();

// step 3
find(id);

// 考核
update(id);

// step 2
delete();
}

/**
* CREATE操作
*
* @return 新记录的DOC_ID
*/
protected String create() {

String id = null;

try {
// 取得数据库连接器
Connection conn = getConnection();

// StringBuffer的调用方法
StringBuffer sql = new StringBuffer();
sql
.append("insert into T_DOC001 ")
.append(
"(DOC_ID, LANG_TYPE, DOC_NAME, PUB_DATE, SOURCE, SUMMARY, TEST)")
.append("values(?, ?, ?, ?, ?, ?, ?)");

// 预编译声明(连接器有两种调用SQL的方法:简单声明与预编译声明)
PreparedStatement state = conn.prepareStatement(sql.toString());

// 参数索引必须从1开始
try {
state.setString(0, "a");
fail();
} catch (SQLException e) {
assertTrue(true);
}

// 设置第一个参数(UUID的用法)
id = new UUID().toString().replaceAll("-", "");
state.setString(1, id);

state.setString(2, "zh");

state.setString(3, "test");

// Timestamp的用法
// 年从1900算起
// 月的范围 0 - 11
state.setTimestamp(4, new Timestamp(2006 - 1900, 7 - 1, 20, 8, 30,
0, 0));

state.setString(5, "source");

state.setString(6, "summary");

// 设置第七个参数(BigDecimal的用法)
// state.setByte(7, (byte)10);
// state.setShort(7, (short) 10);
// state.setInt(7, 10);
// state.setLong(7, 10L);
// 插入float与double时,SQL具有四舍五入功能
// state.setFloat(7, 10.12545678f);
// state.setDouble(7, 10.12545678);
state.setBigDecimal(7, new BigDecimal("10.125"));

// 更新操作(JDBC提供两种操作:查询操作与更新操作)
// executeUpdate返回操作影响到的记录数
assertEquals(1, state.executeUpdate());

// 关闭数据库连接
conn.close();

assertTrue(true);
} catch (SQLException e) {
e.printStackTrace();
fail();
}

return id;
}

/**
* 简单的READ操作
*
* @param id
* 需要校验的DOC_ID
*/
protected void find(
String id) {

try {
// 取得数据库连接器
Connection conn = getConnection();

String sql = "select DOC_ID, LANG_TYPE, DOC_NAME, "
+ "PUB_DATE, SOURCE, SUMMARY, TEST from T_DOC001";

// 简单声明(连接器有两种调用SQL的方法:简单声明与预编译声明)
Statement state = conn.createStatement();

// 查询操作(JDBC提供两种操作:查询操作与更新操作)
ResultSet rs = state.executeQuery(sql);

// 获取结果集中列数的方法
assertEquals(7, rs.getMetaData().getColumnCount());

// 列索引必须从1开始
try {
rs.getMetaData().getColumnName(0);
fail();
} catch (SQLException e) {
assertTrue(true);
}

// 列索引不得超出范围
try {
rs.getMetaData().getColumnName(8);
fail();
} catch (SQLException e) {
assertTrue(true);
}

// 第一列的信息
assertEquals("DOC_ID", rs.getMetaData().getColumnLabel(1));
assertEquals("DOC_ID", rs.getMetaData().getColumnName(1));
assertEquals("java.lang.String", rs.getMetaData()
.getColumnClassName(1));
assertEquals(32, rs.getMetaData().getColumnDisplaySize(1));
// SQL的标准? 1 <--> CHAR
assertEquals(1, rs.getMetaData().getColumnType(1));
assertEquals("CHAR", rs.getMetaData().getColumnTypeName(1));

// 第二列的信息
assertEquals("LANG_TYPE", rs.getMetaData().getColumnLabel(2));
assertEquals("LANG_TYPE", rs.getMetaData().getColumnName(2));
assertEquals("java.lang.String", rs.getMetaData()
.getColumnClassName(2));
assertEquals(2, rs.getMetaData().getColumnDisplaySize(2));
assertEquals("CHAR", rs.getMetaData().getColumnTypeName(2));

// 第三列的信息
assertEquals("DOC_NAME", rs.getMetaData().getColumnLabel(3));
assertEquals("DOC_NAME", rs.getMetaData().getColumnName(3));
assertEquals("java.lang.String", rs.getMetaData()
.getColumnClassName(3));
assertEquals(200, rs.getMetaData().getColumnDisplaySize(3));
assertEquals("VARCHAR2", rs.getMetaData().getColumnTypeName(3));

// 第四列的信息
assertEquals("PUB_DATE", rs.getMetaData().getColumnLabel(4));
assertEquals("PUB_DATE", rs.getMetaData().getColumnName(4));
assertEquals("java.sql.Timestamp", rs.getMetaData()
.getColumnClassName(4));
assertEquals(7, rs.getMetaData().getColumnDisplaySize(4));
assertEquals("DATE", rs.getMetaData().getColumnTypeName(4));

// 第七列的信息
assertEquals("TEST", rs.getMetaData().getColumnLabel(7));
assertEquals("TEST", rs.getMetaData().getColumnName(7));
assertEquals("java.math.BigDecimal", rs.getMetaData()
.getColumnClassName(7));
assertEquals(22, rs.getMetaData().getColumnDisplaySize(7));
assertEquals("NUMBER", rs.getMetaData().getColumnTypeName(7));

// ResultSet中没有直接获取行数的方法
assertTrue(rs.next());

// 无效列的读取
try {
rs.getString(0);
fail();
} catch (SQLException e) {
assertTrue(true);
}

// 第一列数据的读取(按列数读取)
assertEquals(id, rs.getString(1));

// 第二列数据的读取(按列数读取)
assertEquals("zh", rs.getString(2));

// 第三列数据的读取(按列名读取)
assertEquals("test", rs.getString("DOC_NAME"));

// 第四列数据的读取
assertEquals("2006/07/20 00:00:00", new SimpleDateFormat(
"yyyy/MM/dd HH:mm:ss").format(rs.getDate("PUB_DATE")));
assertEquals("1970/01/01 08:30:00", new SimpleDateFormat(
"yyyy/MM/dd HH:mm:ss").format(rs.getTime("PUB_DATE")));
assertEquals("2006/07/20 08:30:00", new SimpleDateFormat(
"yyyy/MM/dd HH:mm:ss").format(rs.getTimestamp("PUB_DATE")));

// 第七列数据的读取(简单类型)
assertEquals((byte) 10, rs.getByte("TEST"));
assertEquals((short) 10, rs.getShort("TEST"));
assertEquals(10, rs.getInt("TEST"));
assertEquals(10L, rs.getLong("TEST"));
assertEquals(10.13F, rs.getFloat("TEST"), 0.01F);
assertEquals(10.13, rs.getDouble("TEST"), 0.01);

// 第七列数据的读取(BigDecimal)
assertEquals((byte) 10, rs.getBigDecimal("TEST").byteValue());
assertEquals((short) 10, rs.getBigDecimal("TEST").shortValue());
assertEquals(10, rs.getBigDecimal("TEST").intValue());
assertEquals(10L, rs.getBigDecimal("TEST").longValue());
assertEquals(10.13F, rs.getBigDecimal("TEST").floatValue(), 0.01F);
assertEquals(10.13, rs.getBigDecimal("TEST").doubleValue(), 0.01);

// 数据库中只有一行
assertFalse(rs.next());

// 关闭数据库连接
conn.close();

assertTrue(true);
} catch (SQLException e) {
fail();
}

}

/**
* UPDATE操作
*
* @param id
* 需要更新的记录的DOC_ID
*/
protected void update(
String id) {

// 请将指定id的记录做以下修改:
// LANG_TYPE 修改为 "ja";
// PUB_DATE 修改为 "2006/08/01 00:00:00"(利用Date类);
// TEST 修改为 "432.65"(利用float类型);
}

/**
* DELETE操作
*/
protected void delete() {

try {
// 取得数据库连接器
Connection conn = getConnection();

String sql = "delete from T_DOC001";

// 简单声明(连接器有两种调用SQL的方法:简单声明与预编译声明)
Statement state = conn.createStatement();

// 更新操作(JDBC提供两种操作:查询操作与更新操作)
// executeUpdate返回操作影响到的记录数
assertEquals(1, state.executeUpdate(sql));

// 关闭数据库连接
conn.close();

assertTrue(true);
} catch (SQLException e) {
fail();
}
}
}

7月14日 13:42 1、确定2000机器与SQLServer数据库在同一网段。
2、两台机器之间能够PING通,SQLServer数据库服务已经启动。
3、2000机器的客户端是否已经配置好,确定启用的协议和别名。
3、使用Query Analyzer等工具查看是否可以连接?
如果不行,只能说是2000机器的系统局域网通讯有问题,再根据情况细查好了!