Lotus и MS SQL (jdbc)

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

Klido

Итак, по рекомендациям в топике ниже решено подключиться к 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 путь к папке с драйвером указан...

Есть ли какие-то ньюансы ещё, чтобы помочь подключить этот класс?
 
Для лотуса не надо прописывать класспасс. Просто скопируйте джарку в каталог Domino\jvm\lib\ext\ или Notes\jvm\lib\ext\ после копирования перегрузите клинт лотуса или сервак. Ошибка говорит как раз о том что не найден класс драйвера
 
м-д-а
скока не говори - юзайте 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.?)

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

читайте там about this database
и говорите спасибо Сергею ;)
ex - переменная - там перехватываются исключения типа SQLException
 
Не понял, как драйвер присоединять к агенту)

Если это вот так, то где хратится драйвер в базе?
как его вообще к базе прикрутить?(
Class.forName(doc.getItemValueString("JDBCDriver"));
 
вы хэлп к базе читали?
код смотрели?
а ещё гугл есть ;)
у MSSQL:
com.microsoft.jdbc.sqlserver.SQLServerDriver

и вот

у оракла:
oracle.jdbc.driver.OracleDriver
 
вы хэлп к базе читали?
код смотрели?
...

*Для соединения с SQLite использовался jdbc-драйвер sqlitejdbc-v053.jar (http://www.zentus.com/sqlitejdbc/)
Драйвер присоединен к агенту. *


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

тестирую под клиентом 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
 
путь к драйверу com.microsoft.sqlserver.jdbc.SQLServerDriver
версия драйвера:
после скачивания страницы/сохранения и открытия/принятия условий


из notes\jvm\lib\ext убрать все "лишние" бибиотеки, кот. предоставляют com.microsoft.sqlserver.jdbc.SQLServerDriver
иначе класс может не загрузиться
 
двигаемся дальше, следущая ошибка
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)
 
"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;
 
есть альтернативные драйвера




и стринги соединения

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

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

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

В результате вот такая ошибка
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)

в чем прикол?
 
NickProstoNick
Бы ла такая же ошибка, неизвесный хост ( не может достучаться до сервера )
 
NickProstoNick
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
Тема начинается этой ошибкой, да и в руководстве по установке драйвера она указывается в первых абзацах. Рецепт лечения:
link removed
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!