Lotus и MS SQL (jdbc)

  • Автор темы Klido
  • Дата начала
K

Klido

#1
Итак, по рекомендациям в топике ниже решено подключиться к sql2005 через JDBC. Из-под LD 8.5.1

Вроде всё просто, качаем jdbc-драйвер, кладем его куда-то, прописываем путь в classpath переменную среды, пишем коротенький тестовый агентик для подключения вроде

<!--shcode--><pre><code class='java'>import lotus.domino.*;
import java.sql.*;

public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String connectionUrl = "jdbc:sqlserver://ИмяСервера:Порт;user=Юзер;password=Пароль;";
Connection con = DriverManager.getConnection(connectionUrl);

}
catch (Exception e) {
e.printStackTrace();
}
}
}[/CODE]
и вместо ожидаемого положительного результата получаем (и на клиенте под XP, и на серваке под линухом...):
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.lang.Class.forNameImpl(Native Method)
at java.lang.Class.forName(Class.java:136)
at JavaAgent.NotesMain(JavaAgent.java:11)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
Внимательное чтение доки и гугление по этому поводу наводят на мысль, что у кучи народа похожие траблы с подключением класса, даже не под лотусом. Воркэраунд наводит на воспоминания, что как-то джава лотусиная была требовательна к местоположению джаров. В переменную JavaUserClasses путь к папке с драйвером указан...

Есть ли какие-то ньюансы ещё, чтобы помочь подключить этот класс?
 
02.04.2005
170
1
#2
Для лотуса не надо прописывать класспасс. Просто скопируйте джарку в каталог Domino\jvm\lib\ext\ или Notes\jvm\lib\ext\ после копирования перегрузите клинт лотуса или сервак. Ошибка говорит как раз о том что не найден класс драйвера
 

susinmn

Well-known member
16.10.2007
529
3
#4
м-д-а
скока не говори - юзайте jdbc...
но "продожали есть кактус" ;)
lmike, а есть пример использования jdbc? Если есть покажи, пожалуйста)

Драйвер jdbc в базу куда запихивать?)
Как этот драйвер использовать в скрипте?
(import com.sybase.jdbc.*;
import java.sql.*:(

Вот скрипт подключения, только не знаю он рабочий или нет)
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'> public BasicJDBCDemo()
{
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost/coffeebreak";
conn = DriverManager.getConnection(url, "username", "password");
doTests();
conn.close();
}
catch (ClassNotFoundException ex) {System.err.println(ex.getMessage());}
catch (IllegalAccessException ex) {System.err.println(ex.getMessage());}
catch (InstantiationException ex) {System.err.println(ex.getMessage());}
catch (SQLException ex) {System.err.println(ex.getMessage());}
}

Вот пример запроса

private void doSelectTest()
{
System.out.println("[OUTPUT FROM SELECT]");
String query = "SELECT COF_NAME, PRICE FROM COFFEES";
try
{
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
while (rs.next())
{
String s = rs.getString("COF_NAME");
float n = rs.getFloat("PRICE");
System.out.println(s + " " + n);
}
}
catch (SQLException ex)
{
System.err.println(ex.getMessage());
}
}[/CODE]Мне не понятно что за ex.?)

Очень хочется разобраться, помогите)
 

susinmn

Well-known member
16.10.2007
529
3
#6
Не понял, как драйвер присоединять к агенту)

Если это вот так, то где хратится драйвер в базе?
как его вообще к базе прикрутить?(
Class.forName(doc.getItemValueString("JDBCDriver"));
 

susinmn

Well-known member
16.10.2007
529
3
#8
вы хэлп к базе читали?
код смотрели?
...
*Для соединения с SQLite использовался jdbc-драйвер sqlitejdbc-v053.jar (http://www.zentus.com/sqlitejdbc/)
Драйвер присоединен к агенту. *


Я хочу, что бы этот драйвер лежал где-то в бд и что бы у любого пользователя работал connection без предварительной установки драйвера. такое возможно?
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#9
я уже отвечал на подобные вопросы...
драйвер положить либо как в хэлпе, либо в jvm/lib/ext/
цепляете в базу драйвера (в к-л док), проверяете, при старте, присут их в нужном каталоге
если нет - кладёте туда и просите перезапустить Нотус (никакой установки!)
каталог jvm:
System.getProperty("java.home")
 

morpheus

скриптописец
07.08.2006
3 915
1
#10
Првиет всем, та же ошибка

тестирую под клиентом 7.0.2
sqljdbc.jar и sqljdbc4.jar - лежат по "D:\notes\jvm\lib\ext" , Java.Home = D:\notes\jvm

что может быть

уже и комп перегружал и все равно при запуске локального агента

java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#11
путь к драйверу com.microsoft.sqlserver.jdbc.SQLServerDriver
версия драйвера:
после скачивания страницы/сохранения и открытия/принятия условий
http://download.microsoft.com/download/b/4...C_Driver_12.htm

из notes\jvm\lib\ext убрать все "лишние" бибиотеки, кот. предоставляют com.microsoft.sqlserver.jdbc.SQLServerDriver
иначе класс может не загрузиться
 

morpheus

скриптописец
07.08.2006
3 915
1
#12
двигаемся дальше, следущая ошибка
java.sql.SQLException: No suitable driver


<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код агента</div></div><div class="sp-body"><div class="sp-content">
Код:
import lotus.domino.*;
import java.sql.*;

public class JavaAgent extends AgentBase {


public void NotesMain() {

try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();


// Get connection 
DriverManager.registerDriver(new	com.microsoft.sqlserver.jdbc.SQLServerDriver());
Connection connection = DriverManager.getConnection(
"jdbc:microsoft:sqlserver://MySQL:1433","USER","PASS");
if (connection != null) { System.out.print("Enter the data: "); }


} catch(Exception e) {
e.printStackTrace();
}
}
}

java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:189)
at JavaAgent.NotesMain(JavaAgent.java:16)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#13
"jdbc:microsoft:sqlserver://MySQL:1433","USER","PASS"
мне кажется странным такой стринг соединения :)

Добавлено: и на линухах "это" возможно не заработает (там dll, в xa каталоге)

Добавлено: у них в хелпе такие варианты:
Connect to the default database on the local computer by using a user name and password:

jdbc:sqlserver://localhost;user=MyUserName;password=*****;
Note: Although the previous example uses a username and password in the connection string, if you are running your application on a Windows operating system, you should use integrated security as it is more secure. For more information, see the Connecting with Integrated Authentication section later in this topic.

Connect to the default database on the local computer by using integrated authentication:

jdbc:sqlserver://localhost;integratedSecurity=true;

Connect to a named database on a remote server:

jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;

Connect on the default port to the remote server:

jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks;integratedSecurity=true;

Connect by specifying a customized application name:

jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;applicationName=My
App;
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#15
а порт дефолтный?
и притом - не ясно как ОЛЕ соединяется
он могет через пайпы (есть такой тип коннектов), а не по TCP/IP (думаю по другому java коннект не пройдет, хотя... х.з. МС)
в таком расладе - надо разрешить коннектиться к серваку по TCP
 

morpheus

скриптописец
07.08.2006
3 915
1
#16
lmike
порт дефолтный

всё решилось строкой
Connection connection = DriverManager.getConnection( "jdbc:sqlserver://INSCOMP\\inscomsrv;integratedSecurity=false;","user","pass");

на сколько я понимаю означает не использовать безопасность винды
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#17
на сколько я понимаю означает не использовать безопасность винды
почти..., но только это больше касается ввода имени и пароля :)
иначе используется виндовый акк
Connect to the default database on the local computer by using integrated authentication:
jdbc:sqlserver://localhost;integratedSecurity=true;
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#18
Всем привет!
Вот пытался выполнить ЭТО

В результате вот такая ошибка
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
at java.lang.Class.forName(Class.java:136)
at Connect.getConnection(Unknown Source)
at Connect.displayDbProperties(Unknown Source)
at Connect.main(Unknown Source)
в чем прикол?
 

morpheus

скриптописец
07.08.2006
3 915
1
#19
NickProstoNick
Бы ла такая же ошибка, неизвесный хост ( не может достучаться до сервера )