Пытаюсь разобраться...

Тема в разделе "Lotus + Java + LS2J", создана пользователем allex, 17 мар 2009.

  1. allex

    allex Гость

    Insert into переменную?
    есть код
    Код (Text):
    stmt = connection.createStatement();
    rs = stmt.executeQuery("SELECT * from biznes");

    System.out.println("---------------Вывод результата 1:---------------");
    while(rs.next())
    {
    int theid= rs.getInt("id");
    String str = rs.getString("name");
    System.out.println("id= " + theid + " ---> name = " + str);
    System.out.println("_________________________________");
    }

    stmt.executeUpdate("INSERT INTO biznes (name) values ('Русский-English')", Statement.RETURN_GENERATED_KEYS);
    stmt.executeUpdate("INSERT INTO biznes (name) values ('переменная А')", Statement.RETURN_GENERATED_KEYS);
    Вставка значений 'Русский-English' проходит изюмительно, а как суда вставить переменную [String a = doc.getItemValueString("name");], получаемую перебрром из notes - документа
     
  2. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    советую использовать http://commons.apache.org/dbutils/

    если на чисто jdbc

    то примерно так

    Код (Text):
    try {
    ps = c.prepareStatement("INSERT INTO biznes (name) values (?)");
    ps.setString(1, doc.getItemValueString("name"));
    } catch (SQLException se) {
    System.out.println("We got an exception while preparing a statement:" +
    "Probably bad SQL.");
    se.printStackTrace();
    System.exit(1);
    }

    try {
    ps.executeUpdate();
    } catch (SQLException se) {
    System.out.println("We got an exception while executing an update:" +
    "possibly bad SQL, or check the connection.");
    se.printStackTrace();
    System.exit(1);
    }
     
  3. allex

    allex Гость

    Есть вопрос по кодировке новой записи в MySQL

    В параметрах подключения указано ?useUnicode=true&characterEncoding=utf8.

    В результате получается что в консоли одно а браузер кажет совсем другое.
    Apache, php и база MySQL настроены на работу с utf-8
     

    Вложения:

    • sshot_1.png
      sshot_1.png
      Размер файла:
      25,2 КБ
      Просмотров:
      59
  4. allex

    allex Гость

    Есть вот такой <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 void dataconection(String id) {
    Connection connection = null;
    Driver d;
    try {
    d = (Driver)Class.forName("com.mysql.jdbc.Driver").newInstance();
    connection = DriverManager.getConnection("jdbc:mysql://host:port/db,"login","pass");
    System.out.println("Подключено");
    Statement stmt = null;
    ResultSet rs = null;
    PreparedStatement ps = null;
    stmt = connection.createStatement();

    rs = stmt.executeQuery("SELECT * FROM pr_status, id=" + id);

    System.out.println("---------------Вывод результата 1:---------------");
    while(rs.next())
    {
    //получекние читабельного результата в консоль
    }[/CODE]


    Как это все превратить в функцию чтоб отдавать массив значений для последующей обработки
     
  5. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Использовать класс java.util.Vector или java.util.ArrayList (метод add(Object e)).
    Код (Text):
    public java.util.Vector dataconection(String id) {
    java.util.Vector retVar;
    //...
    while(rs.next()) {
    //получекние читабельного результата в консоль
    retVar.add(/*что-то нужное */);
    }
    return retVar;
    }
     
  6. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Или написать вспомогательный класс-обертку для вашего массива и возвращать его.
     
  7. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    select именно такой как в примере?

    Ну а вообще да.. все как перечислили выше... либо видоизменить SQL-запрос... немного его дописать
     
  8. allex

    allex Гость

    Да запрос именно такой.
     
  9. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    allex


    делал с использованием HashMap, удобно когда возвращаеться один row в recordSet
    Код (Text):
    import java.util.HashMap;
    ....
    HashMap info = new HashMap(); // лист со значениями полей из запроса
    ...

    while(rs.next())
    {
    for (int i = 1; i <= numberOfColumns; i++) {
    sValue ="тут вот значение поля из запроса"
    info.put( rsMetaData.getColumnName(i).toString(), sValue );
    }
    }

    можно доделать чтобы возвращало не все колонки, а только какую-то одну для каждой строки в rs
     
  10. allex

    allex Гость

    Есть <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">, который должен создать новый документ
    Код (Text):
    public class workcard extends AgentBase {

    public void createdoc(String fio,String addres, String email, String textobr){
    try {
    Session s = getSession();
    AgentContext agentContext = s.getAgentContext();
    Database db = agentContext.getCurrentDatabase();
    Document doc = db.createDocument();
    doc.replaceItemValue("Form", "rlo");
    doc.replaceItemValue("FIO", fio);
    doc.replaceItemValue("Address", addres);
    doc.replaceItemValue("email", email);
    doc.replaceItemValue("Annotation", textobr);
    doc.computeWithForm(false, false);
    if (doc.save())
    System.out.println("Документ сохранен");
    else
    System.out.println("Документ не сохранен");
    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    <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">
    java.lang.NullPointerException
    at workcard.createdoc(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav
    a:37)
    at java.lang.reflect.Method.invoke(Method.java:599)
    at lotus.domino.JavaConnectInvoker.invoke(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav
    a:37)
    at java.lang.reflect.Method.invoke(Method.java:599)
    at lotus.domino.JavaConnectLoader.invoke(Unknown Source)


    <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">
    Код (LotusScript):
    Set jSession = New JavaSession
    Set ipClass = jSession.GetClass("workcard")
    Set con = ipClass.CreateObject()
    If Not con Is Nothing Then
    call con.createdoc("zzzzzzzz","zzzzzzzzz", "zzzzzzzzzz", "zzzzzzzzzzz")
    Else
    Print "Какая то херь с созданием объекта"
    End If

    Что я не так делаю ?
    "с явой дружу на ВЫ, изучаю по средствам написания"
     
  11. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    allex
    имхо, дело в том что или Сессия или база - null
     
  12. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    ИМХО, AgentContext agentContext = s.getAgentContext(); работает только в агенте, т.е. в данной ситуации будет agentContext = null, соответственно на строке Database db = agentContext.getCurrentDatabase(); будет вылетать исключение java.lang.NullPointerException

    Попробуйте получать базу по ReplicaID, т.е. добавьте в вызов функции строковый параметр с ReplicaID нужной базы
     
  13. allex

    allex Гость

    Так оно даже и не входит в процедуру
    У меня это все с агента работает, а все процедуры дергаются из библиотеки
     
  14. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    А сразу переменную типа Database в функцию передавать нельзя?
     
  15. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Насколько я вижу, агент на LS и дергает библиотеку через LS2J. Напишите агента на яве. В функции библиотеки передавать базу в качестве параметра.

    Добавлено:
    Честно говоря, не пробовал через LS2J передавать базу. ИМХО, LS NotesDatabase и java Database всё-таки разные типы.
     
  16. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    никакие объекты нотусни не передаются/возвращаются через LS2J
    и создать и юзать, "там", их тоже невозможно!
    обмен тока скалярами и стрингами и их масивами (со стороны нотусни - тока фиксированные массивы)
     
  17. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    nvy, lmike
    Человек пишет:
    Я о том, что:
    - сделать библиотеку на Java, в функцию которой передавать тип Database (Java-тип);
    - сделать агент на Java, в котором получать Database по ReplicaiD и передавать её в подключаемую либу.

    Если между модулями, написанными на Java, нельзя передавать объекты (в данном случае Database), то зачем тогда она вообще нужна? И смысл этих библиотек? Это что, в иерархии библиотек-классов придётся в каждой получать Database по ReplicaiD??
     
  18. allex

    allex Гость

    При запуске вот такого <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">

    Код (Text):
    import lotus.domino.*;
    import java.util.Vector;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.sql.ResultSet;
    public class JavaAgent extends AgentBase {
    public void main(String id) {
    try {
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();
    Statement stmt = null;
    ResultSet rs = null;
    Connection conn = null;
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    }
    catch (Exception ex)
    {
    System.out.println("SQLException: " + ex.getMessage());
    }

    try {
    conn = DriverManager.getConnection("jdbc:mysql://host_port_db_login_passw);
    }
    catch (SQLException ex)
    {
    System.out.println("On connect SQLException: " + ex.getMessage());
    System.out.println("SQLState: " + ex.getSQLState());
    System.out.println("VendorError: " + ex.getErrorCode());
    }
    System.out.println("Соединение успешно");
    try {
    stmt = conn.createStatement();
    id = "4isNNEkEA8kNhn9B";
    String Query = "SELECT * FROM pr_data WHILE auth=" + '"'+ id +'"';

    try {
    rs = stmt.executeQuery(Query);
    }
    catch(SQLException ex)
    {
    System.out.println("on JOIN SQLException: " + ex.getMessage());
    System.out.println("SQLState: " + ex.getSQLState());
    System.out.println("VendorError: " + ex.getErrorCode());
    }
    Database db = agentContext.getCurrentDatabase();
    Document doc = db.createDocument();
    doc.appendItemValue("Form", "ProductReport");
    Vector vauth = new Vector();
    Vector vfio = new Vector();
    Vector vaddress = new Vector();
    Vector vemail = new Vector();
    Vector vmessage = new Vector();


    while (rs.next()) {
    // retrieve and print the values for the current row
    int theid= rs.getInt("id");
    String fname = rs.getString("fname");
    String mname = rs.getString("mname");
    String lname = rs.getString("lname");
    String message = rs.getString("message");
    String email = rs.getString("email");
    String auth = rs.getString("auth");
    String pindex = rs.getString("pindex");
    String pregion = rs.getString("pregion");
    String plocality = rs.getString("plocality");
    String pstreet = rs.getString("pstreet");
    String phome = rs.getString("phome");
    String pcorps = rs.getString("pcorps");
    String pflat = rs.getString("pflat");
    System.out.println("Переменные присвоены");
    System.out.println("auth_code= " + auth );
    System.out.println("id= " + theid + " ---> ФИО = " + fname + " " + mname +" "+ lname);
    System.out.println("id= " + theid + " ---> Почтовый адрес = " + pindex +" "+ pregion +" "+ plocality +" "+ pstreet +" "+ phome +" "+ pcorps +" "+ pflat);
    System.out.println("id= " + theid + " ---> Электронныйый адрес = " + email);
    System.out.println("id= " + theid + " ---> Текст обращения = " + message );
    System.out.println("_________________________________");

    vauth.addElement(auth);
    vfio.addElement(fname + " " + mname +" "+ lname);
    vaddress.addElement(pindex +" "+ pregion +" "+ plocality +" "+ pstreet +" "+ phome +" "+ pcorps +" "+ pflat);      
    vemail.addElement(email);  
    vmessage.addElement(message);  

    }
    doc.replaceItemValue("Form", "rlo");
    doc.appendItemValue("FIO", vfio);
    doc.appendItemValue("Address", vaddress);
    doc.appendItemValue("email", vemail);
    doc.appendItemValue("Annotation", vmessage);
    doc.computeWithForm(false, false);
    doc.save();
    } finally {
    if (rs != null) {
    try {
    rs.close();
    } catch(SQLException ex) {}
    rs = null;
    } //if
    if (stmt != null) {
    try {
    stmt.close();
    } catch(SQLException ex) {}
    stmt = null;
    } //if
    } //finally


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

    в дебагер вообще ни чего не выводится.
    Я уже начинаю путаться.
     
  19. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    allex
    Что-то я не понял, зачем сначала присваивается
    doc.appendItemValue("Form", "ProductReport");
    а затем, ниже перебивается на
    doc.replaceItemValue("Form", "rlo");
    ?


    to All
    По ходу.. Кто пользовал jdbc, подскажите, можно ли вытягивать данные из записи не по имени поля, а по порядковому номеру в таблице?
     
  20. allex

    allex Гость

    недоглядел...
     
Загрузка...

Поделиться этой страницей