7

我正在尝试按照 Java 的 JDBC 教程编写一个可以连接到 SQL Server 2008 的 Java 程序。我在建立连接时迷路了。

以下片段来自教程:

InitialContext ic = new InitialContext();
DataSource ds = ic.lookup("java:comp/env/jdbc/myDB");
Connection con = ds.getConnection();
DataSource ds = (DataSource) org.apache.derby.jdbc.ClientDataSource()
ds.setPort(1527);
ds.setHost("localhost");
ds.setUser("APP")
ds.setPassword("APP");
Connection con = ds.getConnection(); 

没有解释 comp/env/jdbc/myDB 应该指向什么,我不知道我应该如何选择一个端口。此外,对象 ds 似乎被定义了两次。

我正在使用JSQLDataSource驱动程序,以作记录。谁能在这里指出我正确的方向?

http://java.sun.com/docs/books/tutorial/jdbc/basics/connecting.html

4

5 回答 5

13

我不确定上面的任何人是否真的回答了这个问题。

我发现这个微软示例很有用

那里的关键信息确实是您需要的类是SQLServerDataSource ,它基本上是一个配置对象 - 您可以像这样使用它:

    SQLServerDataSource dataSource = new SQLServerDataSource();
    dataSource.setUser("aUser");
    dataSource.setPassword("password");
    dataSource.setServerName("hostname");
    dataSource.setDatabaseName("db");

然后你会打电话

dataSource.getConnection();

获得一个连接对象,它基本上是你用来与数据库对话的东西。

采用

connection.prepareStatement("some sql with ? substitutions");

为触发 sql 做一些事情,并且:

connection.prepareCall

用于调用存储过程。

于 2014-05-12T15:53:01.680 回答
11

JDBC 教程Microsoft 文档开始。

还有这个:

String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
Class.forName(driver);
String url = "jdbc:microsoft:sqlserver://host:1433/database";
Connection conn = DriverManager.getConnection(url, "username", "password");

填写主机、数据库、用户名和密码的值。SQL 服务器的默认端口是 1433。

更新:下面的好点。JDBC 驱动程序可以从 Microsoft 和 jTDS 获得。我更喜欢后者。

JNDI 查找与支持连接池的 Java EE 应用服务器有关。您可以要求应用程序服务器创建一个连接池,这可能是一件昂贵的事情,并根据需要将它们借给图书馆书籍等客户端。

如果您不使用 Java EE 应用服务器或连接池,则必须自己创建连接。这就是手动流程和 DriverManager 发挥作用的地方。

说明: 至于为什么 Sun 教程显示 DataSource 两次,我会说这是一个糟糕的编辑情况。如果您查看上面的代码示例,它说您可以“通过查找或手动”获取数据源。下面的代码片段同时显示了两者,当它应该是一个或另一个时。

您知道这是一个无意的错误,因为编写的代码无法编译。您已经声明了两次“ds”。

所以它应该读取“...lookup”,然后是它的代码片段,然后是“...manually”,然后是它的代码片段。

于 2009-07-03T18:10:57.493 回答
4

我喜欢用于连接 SQL Server 的jTDS驱动程序。

URL 将如下所示:

jdbc:jtds:sqlserver://localhost/Finance;instance=sqlexpress

检查jTDS网址信息。

也有一些有趣的信息来帮助解决 jtds to sql express 的各种问题。

于 2009-07-03T18:12:06.417 回答
1

这个问题很久以前就已经回答过了。这个问题是关于 JNDI 查找的。通过查找,您必须查看应用程序服务器日志以查看连接绑定到什么。例如在 Jboss 启动中,我可以看到:

[ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=myDB' to JNDI name 'java:myDB'

使用该 name=myDB 您查找

InitialContext ic = new InitialContext();
DataSource ds = ic.lookup("java:myDB");

请注意服务器日志和代码如何都指向 JNDI 名称java:myDB

于 2013-03-20T23:48:12.833 回答
1
DataSource ds = new SimpleDriverDataSource(new com.mysql.jdbc.Driver(),
    "jdbc:mysql://database:1433;databaseName=name", "username", "password");
JdbcTemplate jdbc = new JdbcTemplate(ds);
于 2014-01-16T15:01:27.057 回答