Вопрос Присвоить значение из бд

parrx

Выдающийся
Участник
Сообщения
57
Розыгрыши
0
Репутация
7
Реакции
5
Баллы
1 310
Всем привет! Гуру джавы подскажите пожалуйста как из бд присвоить значение к стрингу, и обновлять его при определенном условии?
Сделал набросок, но думалка что-то не думает, и сомнение в правильности (новичок еще) кода..


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);
}
}
}
 

коннект к бд, если его нет
Код:
{
    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.png
можешь использовать как пример
за код не ругать, это было давно и неправда
тут по факту в коде у тебя после executeQuery() получается ResultSet, который ты итерируешь и тащишь из него данные.
подставлять какие-то значения вместо "someshet=?" можешь с помощью smth.set(LongStringIntAnyAnotherShit)(идентификатор в виде цифры, значение);
значение можно получать с геттеров без проблем, как видно выше в коде.

к примеру если ты разобрал пачку значений из ResultSet, ты можешь кинуть их куда-нибудь в мапку и потом с ними работать. таким же образом ты можешь присваивать их к чему-то.
т.е к примеру, весь код писать не буду, куски сверху идентичные:
Код:
**** some shit here****
String jafaisatrap = "";
**** some shit here ****
jafaisatrap = resultSet.getString("название_колонки_с_которой_мы_тащим_значение");

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

Код:
kakayaToRandomnayaMapa<KakoitoKey, kakietoDannie> 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

    parrx

    Баллов: 3
    Спасибо)
Спасибо за хороший пинок) сейчас попробую по этому примеру)
коннект к бд, если его нет
больше инфоса

например
Код:
//есть
string one = "111111"; //(значение берется из базы)
//потом условие какое либо
if(земля == планета){
     one = "222222"; // данные изменяются в бд
}
if(земля == луна){
     one = "333333"; тоже обновляется значение
}
З.Ы. Ваш пример я распечатаю и в рамочку поставлю))))
 
Последнее редактирование модератором:
Запрещено публиковать исходный код без BB-кода — CODE.
 
Извините больше не буду:Golddigging:
 
Спасибо за хороший пинок) сейчас попробую по этому примеру)


например
Код:
//есть
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("если я выполнился, значит мир сошёл с ума"); // этого достаточно в этом условии
}
 
Последнее редактирование модератором:
я забыл шо у нас тут инсерт, шо с ним делать ещё надо.
но что-то у меня не получается данные присвоить стрингу...

Код:
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";
    }
 
но что-то у меня не получается данные присвоить стрингу...
сложный вопрос - а нахера сначала инсертить данные в бд, а потом эти же данные тащить в стринг?

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

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

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

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

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

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

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

едем дальше, предположим что превратили мы этот аутистический паровоз в что-то подобное
есть у нас инсерт тут, окей, инсертом мы тащим в базу какой-то буллшит, окей.
вопрос - в кой чёрт у нас тут присвоение стринга к стрингу вся эта помойка с бд, если мы её не используем?
более того, после инсерта мы не имеем ResultSet'a, потому мы можем просто брать как топовые пацаны и корячить такой паровоз. когда писал предыдущий пост чёт затупил. не делай так.
Код:
//autistic mode
ResultSet resultSet = statement.executeQuery();
//govnokod.setKostiliCount(govnokod.getKostiliCount() - 1)
statement.executeQuery();
и так всё же, на кой болт тут вся эта помойка с бд, если нам нужно просто прикостылить строку к строке?
но ведь это ж говнина, мы ж заморачивались тут шоб у нас с бд чёт подтягивалось, а строку любой яйциент даун прикрутить сможет.

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

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

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

Код:
//////////////////////////////////////////////////
//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);
    }
}
//////////////////////////////////////////////////
 
Код:
               statement = con.prepareStatement("UPDATE one FROM table;");
               statement.setString(1, "666666"); // как я понимаю здесь присываем данные в "one"
а собственно что в стейтменте ты меняешь, если в нём ничего нет?
алсо, те же яйца в другом месте:
Код:
           statement = con.prepareStatement("SELECT one FROM table;");
           statement.setString(1, "one"); // как я понял здесь в стэйтмент запихивается значение из бд

ты ничего не передаёшь, логично что там нечему меняться.
 
а собственно что в стейтменте ты меняешь, если в нём ничего нет?
ты ничего не передаёшь, логично что там нечему меняться.
Код:
statement = con.prepareStatement("UPDATE one FROM table WHERE one=?;");
statement.setString(1, "666666");
вот так ?
 
Код:
statement = con.prepareStatement("UPDATE one FROM table WHERE one=?;");
statement.setString(1, "666666");
вот так ?
я тут койчо намутил для тебя, но у нас тут сложные аутистические пароли конфирмед просто так информацию не получить.

пароль на архив - ответ на вопрос (сразу скажу что формулировка говно, но типа как мог):
как называются объекты, которые в случае изменения не обновляются, а создаются копиями с изменениями? маска ответа: i***t***e

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

ответ на вопрос легко гуглится по вопросу, главное правильно скормить его гуглу
09e20-clip-127kb[1].jpg
 

Вложения

  • MySQLConnectionTest.rar
    1,4 КБ · Просмотры: 42
Последнее редактирование модератором:
Спасибо) сейчас просмотрю)
 
там кстати всё ещё есть некоторое количество говнокода.

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

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

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