2009-07-03 2 views
3

Я пытаюсь следовать учебным пособиям Java JDBC для написания программы Java, которая может подключаться к SQL Server 2008. Я теряюсь при создании соединения.Как настроить источник данных в Java для подключения к MS SQL Server?

Следующий фрагмент является из учебника:

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

Эти ответы несколько полезны. Я приму ответ, если кто-нибудь сможет объяснить, почему ds дважды определяется в учебнике Sun. –

+0

Я просто переживаю тот же процесс! Я смотрел эту страницу: http://docs.oracle.com/javase/tutorial/jdbc/basics/connecting.html, которая начинает говорить о кофейнях! В тот момент я сдался. Вы должны любить документацию java/oracle! –

+0

На самом деле, за последние пять лет он немного улучшился. Он имеет значительно меньше ошибок, начиная с последнего раза, когда я проверял. :) –

ответ

8

Начните с 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-сервера - 1433.

ОБНОВЛЕНИЕ: Хорошая точка ниже. Драйверы JDBC можно использовать как из Microsoft, так и из JTDS. Я предпочитаю последнее.

JNDI-запросы связаны с серверами приложений Java EE, которые поддерживают объединение пулов. Вы можете попросить сервер приложений создать пул подключений, что может быть дорогостоящим делом, и при необходимости выдавать их клиентам, например библиотечным книгам.

Если вы не используете сервер приложений Java EE или пул соединений, вам необходимо создать соединение самостоятельно. Вот где ручные процессы и DriverManager входят.

ОБЪЯСНЕНИЕ: Что касается того, почему учебник Sun показывает DataSource дважды, я бы сказал, что это случай плохого редактирования. Если вы посмотрите выше образца кода, он говорит, что вы можете получить DataSource «путем поиска или вручную». В приведенном ниже фрагменте кода показаны оба вместе, когда это должно быть одно или другое.

Вы знаете, что это непреднамеренная ошибка, потому что код, который не был написан, не может быть скомпилирован. Вы дважды заявляете «ds».

Поэтому он должен читать «... lookup», а затем его фрагмент кода, а затем «... вручную», а затем его фрагмент кода.

+0

Спасибо, очень полезно. –

+0

Хорошо, я повесил трубку на что-то очень простое. Что может быть «хозяином»? Это путь к программе MSSQL? –

+0

«host» - это либо имя, либо IP-адрес сервера, на котором работает SQL Server (например, «localhost» или «127.0.0.1»). – duffymo

4

Мне нравится драйвер jTDS для подключения к SQL Server.

URL-адрес будет выглядеть следующим образом:

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

Проверить this для jTDS Url Info.

This также содержит некоторую интересную информацию, помогающую устранить проблемы с jtds для SQL-выражений.

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.

0
DataSource ds = new SimpleDriverDataSource(new com.mysql.jdbc.Driver(), 
    "jdbc:mysql://database:1433;databaseName=name", "username", "password"); 
JdbcTemplate jdbc = new JdbcTemplate(ds); 
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 

для вызова хранимых процедур.

Смежные вопросы