PDA

Просмотр полной версии : Присвоить значение из бд


parrx
17.02.2017, 11:56
Всем привет! Гуру джавы подскажите пожалуйста как из бд присвоить значение к стрингу, и обновлять его при определенном условии?

Сделал набросок, но думалка что-то не думает, и сомнение в правильности (новичок еще) кода..



class blablabla()

{

public static String str1;

public static String str2;

public int something = get.Rnd(123);

public void First(String strOne, String strTwo)

{

Connection con = null;

PreparedStatement statement = null;

ResultSet rs = null;

try

{

con = DatabaseFactory.getInstance().getConnection();

statement = con.prepareStatement("SELECT value1=?, value2=? FROM table1;");

statement.setString(1, strOne);

statement.setString(2, strTwo);

statement.execute();

DbUtils.close(statement);

rs = statement.executeQuery();

if (rs.next())

{

strOne(String.valueOf(rs.getString("value1")));

strOne(String.valueOf(rs.getString("value2")));

str1 = strOne;

str2 = strTwo;

}

else if (rset.getInt(1) > 0)

{

if(something == 123)

{

// Update

statement = con.prepareStatement("UPDATE table1 SET value1=123456;");

statement.setEscapeProcessing(true);

statement.setString(1, strOne);

statement.executeUpdate();

}

else

{

System.out.println("nothing >>>>>>>>");

}

}

}

catch (Exception e)

{

_log.error(StringUtils.EMPTY, e);

}

finally

{

DbUtils.closeQuietly(con, statement, rs);

}

}

}

Enmity
17.02.2017, 19:53
коннект к бд, если его нет

Код:



{
Connection conn = null;
String url = "jdbc:mysql://1.2.3.4:3306/";
String dbName = "testdbname";
String driver = "com.mysql.jdbc.Driver";
String userName = "testusername";
String password = "12345";
try {
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url + dbName, userName, password);
System.out.println("Connected to the database");
//если нужно закрывать коннект, т.е я лично использую это дело как проверялку работы мускула на чём-то
conn.close();
System.out.println("Disconnected from database");
} catch (Exception e) {
e.printStackTrace();
}
}


достать что-то и присвоить что-то

sorenocopypaste.webpEnmity · 17 Фев 2017 в 18:53' data-fancybox="lb-thread-4939" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://mmo-dev.info/attachments/sorenocopypaste-webp.20329/" data-type="image" style="cursor: pointer;" title="sorenocopypaste.webp">

можешь использовать как пример



за код не ругать, это было давно и неправда

тут по факту в коде у тебя после executeQuery() получается ResultSet, который ты итерируешь и тащишь из него данные.

подставлять какие-то значения вместо "someshet=?" можешь с помощью smth.set(LongStringIntAnyAnotherShit)(иденти фикатор в виде цифры, значение);

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

к примеру если ты разобрал пачку значений из ResultSet, ты можешь кинуть их куда-нибудь в мапку и потом с ними работать. таким же образом ты можешь присваивать их к чему-то.

т.е к примеру, весь код писать не буду, куски сверху идентичные:

Код:



**** some shit here****
String jafaisatrap = "";
**** some shit here ****
jafaisatrap = resultSet.getString("название_колонки_с_которой_ мы_тащим_значение");


если мутишь чан с говном мапку с данными, то будет что-то вроде такого:

Код:



kakayaToRandomnayaMapa kartaGovnokoda = new kakayaToRandomnayaMapa<>();
**** some shit here ****
while(resultSet.next()) {
**** some shit here ****
kakietoDannie.govnokod = resultSet.getString("govnokod");
kakietoDannie.aPravdaGovnokod = resultSet.getBoolean("anepizdiwlitichasom")
kartaGovnokoda.put(K,V); //k - key, v - value, pogugli sam rabotu s mapkami, moi iuniy drug
}

class kakietoDannie {
String govnokod;
boolean aPravdaGovnokod;
}


т.е в конце каждой итерации резултсета ты делаешь чёт с этими данными и всё. надо тебе их затолкать куда-то - заталкивай прям тут.

как обновлять его при определённом условии - конкретнее, шо за условие.

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

больше инфоса

parrx
17.02.2017, 22:08
Спасибо за хороший пинок) сейчас попробую по этому примеру)



коннект к бд, если его нет
больше инфоса



например

Код:



//есть
string one = "111111"; //(значение берется из базы)
//потом условие какое либо
if(земля == планета){
one = "222222"; // данные изменяются в бд
}
if(земля == луна){
one = "333333"; тоже обновляется значение
}


З.Ы. Ваш пример я распечатаю и в рамочку поставлю))))

kick
17.02.2017, 22:11
Запрещено публиковать исходный код без BB-кода — CODE.

parrx
17.02.2017, 22:16
Извините больше не буду

Enmity
17.02.2017, 23:14
Спасибо за хороший пинок) сейчас попробую по этому примеру)

например

Код:



//есть
string one = "111111"; //(значение берется из базы)
//потом условие какое либо
if(земля == планета){
one = "222222"; // данные изменяются в бд
}
if(земля == луна){
one = "333333"; тоже обновляется значение
}


З.Ы. Ваш пример я распечатаю и в рамочку поставлю))))



т.е как я понимаю тебе надо, если в рандом_название_метода срабатывает какое-то условие, вкорячивать это дело в базу?

получаешь от DatabaseFactory если он есть \ делаешь коннект к базе если его нет, делаешь statement с INSERT'ом.

алгоритм тот же, код не особо разнится.

Код:



%%%% всё тот же говнокод шо и сверху%
PreparedStatement statement = connection.prepareStatement("SELECT * FROM bbs_buffer WHERE player_id=?;"); ->>>>>

PreparedStatement statement = connection.prepareStatement("INSERT INTO sometable VALUES(someshit) ;");


если по идентификатору, к примеру таблица у нас имеет столбы id, value и называется govnokod ->

Код:



PreparedStatement statement = connection.prepareStatement("INSERT INTO govnokod VALUES(id, YOUR_STRING_HERE_MYFRENDE) WHERE id=? ;");


если с кодом заталкивания в этот стейтмент всякого мусора:

Код:



PreparedStatement statement = connection.prepareStatement("INSERT INTO govnokod VALUES(?, ?) WHERE id=? ;");
statement.setInt(1, TVOY_KLASSNIY_ID);
statement.setInt(2, TVOY_KLASSNIY_STRING);
statement.setInt(3, TVOY_KLASSNIY_ID);
ResultSet resultSet = statement.executeQuery();


и дальше по аналогии работаешь с данными стейтмента. я забыл шо у нас тут инсерт, шо с ним делать ещё надо.

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

Код:



// public - если в отдельном классе валяется, так можешь спокойно костылить private
public static void davaiVkoryachimGovnokod(int someUnfuckableId, String someUnfuckableShietdata){
%%%% тут какой-то говнокод про то как ты к базе пути ищешь %%%%
PreparedStatement statement = connection.prepareStatement("INSERT INTO govnokod VALUES(?, ?) WHERE id=? ;");
statement.setInt(1, someUnfuckableId);
statement.setInt(2, someUnfuckableShietdata);
statement.setInt(3, someUnfuckableId);
ResultSet resultSet = statement.executeQuery();
//название в зависимости от коннекта
connection.close(); // никогда не забывай закрывать поток
}


и просто при срабатывании чего-то тупо вызываешь метод, передавая в него id и String с мусором.



Код:



//есть
string one = "111111"; //(значение берется из базы)
//потом условие какое либо
if(земля == планета){
one = "222222"; // данные изменяются в бд
}
if(земля == луна){
one = "333333"; тоже обновляется значение
}



а, да, забыл совсем. вот тебе смесь твоего и моего говнокода

Код:



String one = "";
// код у истинного говнокодера должен иметь ид такое же классное, как и сам говнокодер. вкорячим сюда 228 лулза ради.
if(код == говно){
one = "222222";
davaiVkoryachimGovnokod(228, one);
}
if(земля == луна){
System.out.println("если я выполнился, значит мир сошёл с ума"); // этого достаточно в этом условии
}

parrx
18.02.2017, 02:38
я забыл шо у нас тут инсерт, шо с ним делать ещё надо.


но что-то у меня не получается данные присвоить стрингу...

Код:



public class mainOne
{
public static String first;

public void thisIsClass1()
{
String pervaya = "";
String vtoraya= "";
String three= "";
String four= "";
String five= "";
String six= "";
String seven= "";
String new1= "";
String new2= "";

Connection con = null;
PreparedStatement statement = null;
ResultSet rs = null;
try
{
con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("INSERT INTO table VALUES(?, ?) WHERE id=? AND id2=?;");
statement.setString(1, "111111");
statement.setString(2, pervaya);
statement.setString(3, "00--00--00");
ResultSet resultSet = statement.executeQuery();

con.close();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
DbUtils.closeQuietly(con, statement, rs);
}
first=pervaya;
}

public thisIsClass2()
{
pervaya = "9999999";
vtoraya= "8888888";
three= "3333333333333";
four= "444444444444";
five= "5555555555";
six= "666666666";
seven= "77777777";
new1= "8888";
new2= "111111111";
}

Enmity
18.02.2017, 02:40
но что-то у меня не получается данные присвоить стрингу...


сложный вопрос - а нахера сначала инсертить данные в бд, а потом эти же данные тащить в стринг?

у тебя вся логика где-то в бороде, посмотри шо за ужас ты написал

вообще шо из всего вышенаписанного ты пытаешься получить?

я вижу кашу из вышеописанного чана с дерьмом, к примеру, а ты что видишь?

и вообще, ты ИДЕху юзаешь какую-либо?

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

ладно, давай проедемся катком по коду.

чудотворный класс thisIsClass2 - на кой болт он нужен и какое у него предназначение?

зачем в отдельном классе не классе, но по названию классе, хранить этот мусор?

во-первых выкидываем в помойку этот класс2, мы ж не совсем дауны, верно?

мало того что у тебя переменные объявлены внутри другого метода, что значит что конкретно таким образом ты просто написал 9 cтрок какой-то дичи, так ты ещё и юзать это пытаешься. U SRSLY MAN?

едем дальше, предположим что превратили мы этот аутистический паровоз в что-то подобное



2250e-clip-59kb[1].webpEnmity · 18 Фев 2017 в 01:40' data-fancybox="lb-thread-4939" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://mmo-dev.info/attachments/2250e-clip-59kb-1-webp.20330/" data-type="image" style="cursor: pointer;" title="2250e-clip-59kb[1].webp">


есть у нас инсерт тут, окей, инсертом мы тащим в базу какой-то буллшит, окей.

вопрос - в кой чёрт у нас тут присвоение стринга к стрингу вся эта помойка с бд, если мы её не используем?

более того, после инсерта мы не имеем ResultSet'a, потому мы можем просто брать как топовые пацаны и корячить такой паровоз. когда писал предыдущий пост чёт затупил. не делай так.

Код:



//autistic mode
ResultSet resultSet = statement.executeQuery();
//govnokod.setKostiliCount(govnokod.getKostiliCount( ) - 1)
statement.executeQuery();


и так всё же, на кой болт тут вся эта помойка с бд, если нам нужно просто прикостылить строку к строке?





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

давай селектить.



b49bb-clip-68kb[1].webpEnmity · 18 Фев 2017 в 01:40' data-fancybox="lb-thread-4939" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://mmo-dev.info/attachments/b49bb-clip-68kb-1-webp.20332/" data-type="image" style="cursor: pointer;" title="b49bb-clip-68kb[1].webp">


вопрос раскрыт, или нужно больше костылей в сей тред?

parrx
19.02.2017, 18:10
вопрос раскрыт, или нужно больше костылей в сей тред?



Спасибо попробовал так сделать но, почему то все равно значение строки "null", не подтягивает значение из бд

второй класс добавлен для того чтобы в нем можно было выводить значение строки)) задумка наркоманская) согласен

на словах вроде просто



объявляем строку (которую во 2 классе и выводим)

подтягиваем ее значение из бд

потом при каком либо изменении обновляем значение(которому равна строка) в бд

Enmity
19.02.2017, 19:54
код в студию

parrx
19.02.2017, 20:34
код в студию



Код:



//////////////////////////////////////////////////
//a1.java
public class a1
{
public static String one;

public void thisIsClass1() throws SQLException
{
Connection con = null;
PreparedStatement statement = null;
ResultSet rs = null;

try
{
con = DatabaseFactory.getInstance().getConnection();
//в бд таблица с столбцами (one - nine) в которых по дефолту параментры "333333"
statement = con.prepareStatement("SELECT one FROM table;");
statement.setString(1, "one"); // как я понял здесь в стэйтмент запихивается значение из бд
ResultSet rs = statement.executeQuery();

one = rs.getString("one");
}
catch(Exception e)
{
_log.error("", e);
}
finally
{
DbUtils.closeQuietly(con, statement, rs);
}
}

// ниже в другом методе
public void thisIsClass2()
{
Connection con = null;
PreparedStatement statement = null;

try
{
con = DatabaseFactory.getInstance().getConnection();
// произходят действия при которых меняеться значение "one"
if(1 == 1)
{
statement = con.prepareStatement("UPDATE one FROM table;");
statement.setString(1, "666666"); // как я понимаю здесь присываем данные в "one"
statement.executeUpdate();
;
}
}
catch(Exception e)
{
_log.error("", e);
}
finally
{
DbUtils.closeQuietly(con, statement);
}
}
}
//--------------------------------------------------------------------

//a2.java
import a1;

public class a2
{
public void second()
{
System.out.println(a1.one);
}
}
//////////////////////////////////////////////////

Enmity
19.02.2017, 22:25
Код:



statement = con.prepareStatement("UPDATE one FROM table;");
statement.setString(1, "666666"); // как я понимаю здесь присываем данные в "one"


а собственно что в стейтменте ты меняешь, если в нём ничего нет?

алсо, те же яйца в другом месте:

Код:



statement = con.prepareStatement("SELECT one FROM table;");
statement.setString(1, "one"); // как я понял здесь в стэйтмент запихивается значение из бд


ты ничего не передаёшь, логично что там нечему меняться.

parrx
19.02.2017, 22:47
а собственно что в стейтменте ты меняешь, если в нём ничего нет?
ты ничего не передаёшь, логично что там нечему меняться.



Код:



statement = con.prepareStatement("UPDATE one FROM table WHERE one=?;");
statement.setString(1, "666666");


вот так ?

Enmity
19.02.2017, 22:58
Код:



statement = con.prepareStatement("UPDATE one FROM table WHERE one=?;");
statement.setString(1, "666666");


вот так ?


я тут койчо намутил для тебя, но у нас тут сложные аутистические пароли конфирмед просто так информацию не получить.

пароль на архив - ответ на вопрос (сразу скажу что формулировка говно, но типа как мог):

как называются объекты, которые в случае изменения не обновляются, а создаются копиями с изменениями? маска ответа: i***t***e

и да, дамп таблички там же валяется, прям в комментарии

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

parrx
19.02.2017, 23:19
Спасибо) сейчас просмотрю)

Enmity
19.02.2017, 23:26
там кстати всё ещё есть некоторое количество говнокода.

зафикси сам.

намекну: метод getInfos, связано с коннектом (одно условие выполняется всегда, а значит можно упростить и убрать его, немного перекатав код).

parrx
22.02.2017, 13:06
А



там кстати всё ещё есть некоторое количество говнокода.

зафикси сам.
намекну: метод getInfos, связано с коннектом (одно условие выполняется всегда, а значит можно упростить и убрать его, немного перекатав код).



Спасибо) разобрался)

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