我正在尝试使用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
答案 0 :(得分:11)
我不确定上面有人真的回答了这个问题。
我找到了this microsoft sample useful。
其中的关键信息实际上是您需要的类是 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
用于调用存储过程。
答案 1 :(得分:10)
从JDBC tutorial或Microsoft docs开始。
和此:
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 Server的默认端口是1433。
更新:下面的好点。可以从Microsoft和jTDS获得JDBC驱动程序。我更喜欢后者。
JNDI查找与支持连接池的Java EE应用服务器有关。您可以要求应用服务器创建一个连接池,这可能是一件昂贵的事情,并根据需要将它们借给图书馆书籍等客户端。
如果您没有使用Java EE应用服务器或连接池,则必须自己创建连接。这就是手动流程和DriverManager的用武之地。
解释:至于为什么Sun教程会显示DataSource两次,我会说这是一个编辑不好的情况。如果您查看代码示例,它表示您可以“通过查找或手动”获取DataSource。下面的代码片段显示了它们在一起时应该是一个还是另一个。
你知道这是一个无意的错误,因为编写的代码无法编译。你有两次声明“ds”。
所以它应该是“... lookup”,然后是它的代码片段,然后是“... manual”,然后是它的代码片段。
答案 2 :(得分:4)
我喜欢jTDS驱动程序来连接SQL Server。
URL如下所示:
jdbc:jtds:sqlserver://localhost/Finance;instance=sqlexpress
检查this以获取jTDS网址信息。
This还有一些有趣的信息可以帮助解决jtds对sql表达各种问题的麻烦。
答案 3 :(得分:0)
很久以前就已经回答过这个问题了。有人询问有关JNDI查找的问题。使用查找,您必须查看应用程序服务器日志以查看绑定的连接。例如在Jboss创业公司,我可以看到:
[ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=myDB' to JNDI name 'java:myDB'
现在就是线索。这正是我应该如何进行查找 -
InitialContext ic = new InitialContext();
DataSource ds = ic.lookup("java:myDB");
注意服务器日志和代码如何指向JNDI名称 java:myDB 。
答案 4 :(得分:0)
DataSource ds = new SimpleDriverDataSource(new com.mysql.jdbc.Driver(),
"jdbc:mysql://database:1433;databaseName=name", "username", "password");
JdbcTemplate jdbc = new JdbcTemplate(ds);