PDA

View Full Version : Помощь в Java



JaaR
16.07.2013, 18:04
Всем привет,
сразу прошу тухлыми помидорами не кидаться, я нуб в программирование :)

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

Первая проблема выявлена. Не соответствие расширений.

try{
PreparedStatement pst = c.prepareStatement("select * from dataasdatei where artnr = ?");//? - это парамет
System.out.println("preSet"+FaNr);
pst.setString(1, FaNr);//установление значения параметра. Обратите внимание: нумерация параметров начинается не с 0, а с 1!
ResultSet prs = pst.executeQuery();
System.out.println("Will in schleife");
while(prs.next()){
System.out.println("bin in schleife");
System.out.println(prs.getString("dateiname"));//Последовательно для каждой строки выводим значение из колонки ColumnName
System.out.println(prs.getString("pfad"));

//PDF
Runtime.getRuntime().exec("cmd.exe /c start /b 14529.pdf");
}
} catch(Exception e){
e.printStackTrace();
System.out.println("search fail");
}

Archy
16.07.2013, 18:16
хахха ну и бардак.... :) все в кучу налипил

по человечески надо бы разделить гую, ДБ конектор и и все остальное! так же я так понимаю ты там на копипастил не меренно даже немецкие коменты есть :) ты то хоть сам понимаешь что там у тебя творится?

я посмотрю сегодня, отпишусь... так же нет не какой у тебя защиты от SQL инжекшена /facepalm :)
скинь в приват данные соединения к БД, и убедись что она мне доступна - это значит:
если под рутером, сделай порт форвардинг на 3306 или где там у тебя ДБ висит?
так же убедись что логин root принимается с любого хоста

JaaR
16.07.2013, 19:08
немецкие коменты это мои :) прога будет применяться локально :) и это еще совершенно сырейшый вариант :)
Налепил, потому что в начале гуи писал, потом учил методом проб и ошибок всяческие элементы к ней :)
потом прилепил запрос к дб :) первый бли так сказать :) следом всякие проверки и т.д :) вот и получилась стена текста :)

Archy
16.07.2013, 19:22
я по позже сегодня гляну! дай только доступ к БД или дай schema create stament чтоб я у себя смог с эмулировать

на щет ГУИ че чего лучше Net Beans drag and drop еще не видел, под еклипс тоже вродей сейцахс сделали, но корявенько. так что я если делаю то ГУИ ресую в нет бинсах а потом код тырю в еклипс, мне там больше нравистся кодить

JaaR
16.07.2013, 19:27
да доступа прямого нет, прейдется локально делать а схема уже в коде же есть
притом на моей локалке все фуричило, а гребаный Ingres DB не хочет :)

Archy
16.07.2013, 19:35
так так так, погоди, у тебя на локалке пашет, а на ремот хосте не пашет? я правильно понимаю?

слухай зайди в googl чат (Briksins [всякое там] gmail.com) быстрее будет

EDIT:
что за база данных? MySQL?

JaaR
16.07.2013, 20:38
да на ремоуте не пашет с командой pst.setString(1, FaNr);
если заместо этого в
PreparedStatement pst = c.prepareStatement("select * from dataasdatei where artnr = ?"); заменить знак вопроса на искомые данные все пашет.
т.е тут какая то трабла с передачей данных с переменной FaNr на pst. Арчи в тс зайти можеш ?

Archy
16.07.2013, 20:52
нет я на работе! буду дома через час, тогда смогу, или же заходи в гугл чат, смогу по чатится не множко

JaaR
16.07.2013, 21:21
да я тебе написал в гугле уже :)
если поможет, проверял на локальной дб mysql через xampp, а у заказчика Ingres.

Archy
16.07.2013, 21:27
a оно у тебя крашется?? ошибка какая есть из DB?
так же какого у тебя типа данные там на Ингрес? тут я вижу ты делаешь
pst.setString(1, FaNr);
пологаю у тебя на локалке с mysql "artnr" типа VARCHAR(XXX)
ты уверен что на ремоте оно тоже стринг а не инт?

я не могу у себя проверить твой код потому что у меня нет дров на Ингрес, 2х ты не дал данные соединения

JaaR
16.07.2013, 21:39
да я тебе написал в гугле уже :)
если поможет, проверял на локальной дб mysql через xampp, а у заказчика Ingres.
Пробовал и лонг и инт все в ноль уходит.

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

02nz
17.07.2013, 01:18
не легче на пхп скрипт высрать? :crazy:

JaaR
17.07.2013, 07:39
не легче :) у шефа далеко идущие планы :)
нашел где сука зарыта...там расширение мне не понятное... попробовал поискать в других колонках все пашет.


п.с Кто нибудь знает метод, как узнать расширение, не имея ДБ под рукой, только ремоут подключение.
Позвонить и узнать не вариант, там полный ахтунг.

п.с.с это явно какой то текстовое расширение, т.е присутствуют буквы и цифры :)

Archy
17.07.2013, 13:43
Jaar я не получил не чего от тебя на гугле! напиши мне ныло и я тебя сам в чат приглашу
еще раз ящик: Briksins http://www.trubetech.com/images/ico.dog.png gmail.com

Archy
17.07.2013, 13:58
я тут не давно писал маленькую тулзу для создания PHP веб движка под базу данных (короче мне было лень PHP писать и я написал прогу на Java чтоб за меня PHP писала) тут можно посмотреть готовый варинат (https://www.dropbox.com/s/7bg0dv465r05xrz/MySqlToPHP_Generator.jar)
типо запускаешь тулс, он сканирует базу данных в доль и поперек и выдает тебе PHP движек под нее

вот тебе сорсы (https://www.dropbox.com/s/7tcojk5vc27669z/workspace.rar), но т.к. у меня запросов в базу было совсем чуточку да и юзер инпут там не использовался, я не использовал PrepareStatment, писал вручную... но там ты можешь посмотреть как я ковыряю базу и смотрю какие таблици, как они называются, какие параметры в таблицы и какой тип ечеек.... ну короче кочай сорсы, да ковыряй! думаю тебе поможет разобрастя

JaaR
17.07.2013, 15:10
Спасибо Седому, надоумил меня через нетбинс законектится к дб и посмотреть параметры. Как обычно, мистика рядом. Все текстовые колонки в таблице varchar. Мистика в том, что для SELECT во всех колонках окромя нужной мне, я могу передавать данные с помощью setString(1,NrFa); и SELECT выдает правильные результаты.
т.е к примеру

PreparedStatement pst = c.prepareStatement("select * from dataasdatei where posnr = ?");
pst.setString(1, FaNr); работает велеколепно.

PreparedStatement pst = c.prepareStatement("select * from dataasdatei where artnr = ?");
pst.setString(1, FaNr);
уже не перенимает содержимое FaNr.

ам что еще веселей posnr оказался Int и всеравно проканало.....

Кто у нас шаман ?

JaaR
17.07.2013, 15:22
арчи отписал, если Вадимс Биркинс это ты, то тогда тебе написал.

JaaR
17.07.2013, 19:00
спс Арчи общими усилиями справились.

PreparedStatement pst = c.prepareStatement("select * from dataasdatei where artnr = "+FaNr+"");

Archy
18.07.2013, 04:26
вот ты балбес еклмн, целый день тебе обьсянсял ты все свое :)
твой FaNr - это int
ты должен был делать setInt(1, FaNr);
а в данном случае последние ковычки тогда не нужны


PreparedStatement pst = c.prepareStatement("select * from dataasdatei where artnr = "+FaNr);

JaaR
18.07.2013, 07:45
а вот большой и толстый :( сетИнт не функциклирует :).
если я принудительно конвентирую в Инт. и меняю на "+FaNr работает. "+FaNr+" если оставлять стрингом тоже пашет :) кверю меняет при любых значаениях.
сетХХХ не воспринимает в этой колонке...при сете он кверю не меняет.
если вбиваю не существующий FaNr не входит в while, следовательно rs==null ?

Sedoy
18.07.2013, 12:23
вот ты балбес еклмн, целый день тебе обьсянсял ты все свое :)


PreparedStatement pst = c.prepareStatement("select * from dataasdatei where artnr = "+FaNr);


на будущее всем Java разрабам :) так писать не стоит. Особенно если запрос подобный у вас будет вызываться более 1ого раза но с разными параметрами. PreparedStatment запросы это сила.

В конкретном случае у Jaar-а какая то непонятная херня с СУБД.

JaaR
18.07.2013, 14:15
Седой я то в этом не виноват :) и так сколько трахался и вас мучал.

Archy
18.07.2013, 17:23
на будущее всем Java разрабам :) так писать не стоит.
да понятно.... я и JaaR'у обьяснил что такой метод не безопасный и подходит максимум для дебага или пруф концепта на скорую руку, но у него почему-то по другому не работает... и БД у них какая то веселая

JaaR кстате ты не забудь то защиту внедрить от SQL injection
нельзя твой FaNr на прямую с узер инпут фиелда в кверю сувать! у тебя всю базу данных дропнут за секунду!

почитай тут про SQL injection (http://en.wikipedia.org/wiki/SQL_injection) и не когда не забывай про это когда работаеш с любыми BD

грубо говря тебе надо стрингу проверить и принудительно выдрать все не позволительное, а именно все кавычки всякое такое, а если ты пишешь для веба то тебе еще нужно выдрать все HTML таги а то будет крос референс инжекшен

JaaR
18.07.2013, 21:35
Арчи блин глян код, там же стоит реплэйс все окромя номерных знаков :)
FaNr=FaNr.replaceAll("^0-9", "");

JaaR
20.07.2013, 00:26
арчи кинь в пм ссылку на сорсы последние что кидал, посмотрю дома. Там где картинки в джаре.

02nz
20.07.2013, 09:30
if FaNr.toBool().toStr().toUpper() == "FALSE" then do shits

предлагаю удалить яву и не вспоминать об этом пиздеце :crazy:

Sedoy
22.07.2013, 16:33
if FaNr.toBool().toStr().toUpper() == "FALSE" then do shits

предлагаю удалить яву и не вспоминать об этом пиздеце :crazy:

что за беспощадный кусок чудо кода? О_о

02nz
23.07.2013, 00:43
>FaNr=FaNr.replaceAll("^0-9", "");

перетроллил :)