如何在Java中配置DataSource以连接到MS SQL Server?

Eri*_*son 5 java sql-server datasource

我正在尝试按照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(); 
Run Code Online (Sandbox Code Playgroud)

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

我正在使用JSQLDataSource驱动程序,以备记录.任何人都能指出我在正确的方向吗?

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

Jon*_*Raa 11

我不确定上面有人真的回答了这个问题.

我发现这个微软样本很有用.

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

    SQLServerDataSource dataSource = new SQLServerDataSource();
    dataSource.setUser("aUser");
    dataSource.setPassword("password");
    dataSource.setServerName("hostname");
    dataSource.setDatabaseName("db");
Run Code Online (Sandbox Code Playgroud)

然后你会打电话

dataSource.getConnection();
Run Code Online (Sandbox Code Playgroud)

获取一个连接对象,它基本上就是你用来与数据库通信的东西.

使用

connection.prepareStatement("some sql with ? substitutions");
Run Code Online (Sandbox Code Playgroud)

制作一些用于解雇sql的东西:

connection.prepareCall
Run Code Online (Sandbox Code Playgroud)

用于调用存储过程.


duf*_*ymo 10

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");
Run Code Online (Sandbox Code Playgroud)

填写主机,数据库,用户名和密码的值.SQL Server的默认端口是1433.

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

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

如果您不使用Java EE应用程序服务器或连接池,则必须自己创建连接.这就是手动流程和DriverManager的用武之地.

解释:至于为什么Sun教程会显示DataSource两次,我会说这是一个编辑不好的情况.如果您查看代码示例上方,则表示您可以"通过查找或手动"获取DataSource.下面的代码片段显示了它们在一起时,它应该是一个或另一个.

你知道这是一个无意的错误,因为编写的代码无法编译.你有两次声明"ds".

所以它应该是"... lookup",然后是它的代码片段,然后是"... manual",然后是它的代码片段.