• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы allex
  • Дата начала
A

allex

Insert into переменную?
есть код
Код:
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 - документа
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
советую использовать

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

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

Код:
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);
}
 
A

allex

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

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

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

Вложения

  • sshot_1.png
    sshot_1.png
    9,3 КБ · Просмотры: 576
A

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]


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

nvyush

Использовать класс java.util.Vector или java.util.ArrayList (метод add(Object e)).
Код:
public java.util.Vector dataconection(String id) {
java.util.Vector retVar;
//...
while(rs.next()) {
//получекние читабельного результата в консоль
retVar.add(/*что-то нужное */);
}
return retVar;
}
 
V

vitfil

Или написать вспомогательный класс-обертку для вашего массива и возвращать его.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Есть вот такой <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]


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

select именно такой как в примере?

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

morpheus

allex


делал с использованием HashMap, удобно когда возвращаеться один row в recordSet
Код:
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
 
A

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">, который должен создать новый документ
Код:
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">
Код:
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


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

morpheus

allex
имхо, дело в том что или Сессия или база - null
 
N

nvyush

ИМХО, AgentContext agentContext = s.getAgentContext(); работает только в агенте, т.е. в данной ситуации будет agentContext = null, соответственно на строке Database db = agentContext.getCurrentDatabase(); будет вылетать исключение java.lang.NullPointerException

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

allex

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

nvyush

Насколько я вижу, агент на LS и дергает библиотеку через LS2J. Напишите агента на яве. В функции библиотеки передавать базу в качестве параметра.

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
никакие объекты нотусни не передаются/возвращаются через LS2J
и создать и юзать, "там", их тоже невозможно!
обмен тока скалярами и стрингами и их масивами (со стороны нотусни - тока фиксированные массивы)
 

VladSh

начинающий
Lotus Team
11.12.2009
1 784
157
BIT
57
nvy, lmike
Человек пишет:
Так оно даже и не входит в процедуру
У меня это все с агента работает, а все процедуры дергаются из библиотеки
Я о том, что:
- сделать библиотеку на Java, в функцию которой передавать тип Database (Java-тип);
- сделать агент на Java, в котором получать Database по ReplicaiD и передавать её в подключаемую либу.

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

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">

Код:
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();
}
}
}


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

VladSh

начинающий
Lotus Team
11.12.2009
1 784
157
BIT
57
allex
Что-то я не понял, зачем сначала присваивается
doc.appendItemValue("Form", "ProductReport");
а затем, ниже перебивается на
doc.replaceItemValue("Form", "rlo");
?


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

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