Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
dropych
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
1

Использование переменной из другого класса

31.05.2017, 14:08. Просмотров 1133. Ответов 12
Метки нет (Все метки)

есть класс Getip, узнаю ип и записываю в String ip
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package AC;
 
import java.net.*;
import java.io.*;
public class Getip {
        
        
        public static String ip; // <---
 
        public static void main(String[] args) throws IOException {
              URL whatismyip = new URL("http://checkip.amazonaws.com");
              BufferedReader in = new BufferedReader(new InputStreamReader(
                              whatismyip.openStream()));
 
              String  ip = in.readLine(); // <---
              System.out.println(ip);
          }
         
    }
Есть другой класс mysql
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package AC;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
/**
 * Simple Java program to connect to MySQL database running on localhost and
 * running SELECT and INSERT query to retrieve and add data.
 * @author Javin Paul
 */
 
public class mysql {
 
    // JDBC URL, username and password of MySQL server
    private static final String url = "jdbc:mysql://***:3306/ac";
    private static final String user = "***";
    private static final String password = "****";
 
    // JDBC variables for opening and managing connection
    private static Connection con;
    private static Statement stmt;
    private static ResultSet rs;
  
    String ip = new String(Getip.ip); // <---
    
    public static void main(String args[]) {
        
            
 
        try {
            
            // opening database connection to MySQL server
            con = DriverManager.getConnection(url, user, password);
 
            // getting Statement object to execute query
            stmt = con.createStatement();
        
 
    
            String[] insert = {"INSERT INTO users(ip) VALUES (ip);"}; // <---
           
            for (String sql : insert) {
             stmt.execute(sql);
         }
 
        } catch (SQLException sqlEx) {
            sqlEx.printStackTrace();
        } 
        
    }
 
}
Ип, который находится в переменной хочу записывать в БД. Но почему-то в БД приходит пустое поле. Гуглил, вроде так нужно делать. но явно что-то не так)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2017, 14:08
Ответы с готовыми решениями:

Вывести переменную из другого класса
Всем привет, помогите получить ответ result в public class ProfileFragment...

Доступ к private-данным одного класса из другого
Как получить доступ к private данных одного класса в другом? В принципе нельзя....

NulPointerlException при вызове метода другого класса
При нажатии на кнопку в &quot;New&quot; (фрейм) должен выполняться метод catchNew класса...

Как перенести int переменные из другого класса
// Как бы ConcurrentHashMap переносит стринг / инт. А переменные random ,...

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

12
korshun84
86 / 86 / 22
Регистрация: 08.07.2014
Сообщений: 507
31.05.2017, 14:12 2
Потому что в классе Getip у тебя 2 переменных ip, в классе mysql ты обращаешься к той, которая всегда пустая.
0
dropych
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
31.05.2017, 14:20  [ТС] 3
если в getip не создавать public static String ip;
тогда во втором классе оно жалуется ip cannot be resolved or is not a field
0
korshun84
86 / 86 / 22
Регистрация: 08.07.2014
Сообщений: 507
31.05.2017, 14:24 4
Я тебе не говорил, что не надо создавать public static String ip;, ты этой переменной и присваивай значение, а не создавай новую.
0
dropych
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
31.05.2017, 14:32  [ТС] 5
сделал так, но результат не изменился
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package AC;
 
import java.net.*;
import java.io.*;
public class Getip {
        
        
    public static String ip;
 
    
 
        public static void main(String[] args) throws IOException {
              URL whatismyip = new URL("http://checkip.amazonaws.com");
              BufferedReader in = new BufferedReader(new InputStreamReader(
                              whatismyip.openStream()));
 
              ip = in.readLine(); 
              System.out.println(ip);
          }
         
    }
0
korshun84
86 / 86 / 22
Регистрация: 08.07.2014
Сообщений: 507
31.05.2017, 14:38 6
Не удивительно, раз ты тут к классу mysql нигде не обращаешься. Получил ip, вывел его в консоль и все, этот участок кода больше ничего и не делает. Это первый момент.
Второй: для чего в обоих твоих двух классах присутствует метод public static void main(String args[]) { } ?
0
dropych
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
31.05.2017, 15:08  [ТС] 7
классы находятся в разных файлах
потому public static void main(String args[]) { } несколько раз
а зачем ip обращаться к mysql,если мне нужно получить переменную из ip в mysql?
0
korshun84
86 / 86 / 22
Регистрация: 08.07.2014
Сообщений: 507
31.05.2017, 20:14 8
Цитата Сообщение от dropych Посмотреть сообщение
классы находятся в разных файлах
потому public static void main(String args[]) { } несколько раз
То-есть, если у тебя в проекте 10 файлов с классами, то ты в каждый из них будешь пихать public static void main(String args[]) { } ? Ты в курсе вообще, что это за метод такой ?
Цитата Сообщение от dropych Посмотреть сообщение
а зачем ip обращаться к mysql,если мне нужно получить переменную из ip в mysql?
String ip = new String(Getip.ip); - вызов пустой переменной ip. Она по-твоему сама как-то инициализироваться нужным значением должна ?

Вот это
Java
1
2
3
4
5
URL whatismyip = new URL("http://checkip.amazonaws.com");
              BufferedReader in = new BufferedReader(new InputStreamReader(
                              whatismyip.openStream()));
 
              ip = in.readLine();
Перенеси в класс mysql, смысл по двум разным классам это раскидывать.
0
dropych
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
31.05.2017, 21:22  [ТС] 9
Цитата Сообщение от korshun84 Посмотреть сообщение
То-есть, если у тебя в проекте 10 файлов с классами, то ты в каждый из них будешь пихать public static void main(String args[]) { } ? Ты в курсе вообще, что это за метод такой ?
я в курсе, просто изначально создавал как отдельные подпрограммы и сейчас только объединяю. пока так
Цитата Сообщение от korshun84 Посмотреть сообщение
Перенеси в класс mysql, смысл по двум разным классам это раскидывать.
кроме ип, будет еще несколько данных которые будут подтягивать с других классов и будут записываться в БД, когда в отдельных файлах, удобнее редактировать
В классе ip
Java
1
2
3
4
public static String getip() {
                    return ip;
              
          }
это ж вроде и есть инициализация?
0
korshun84
86 / 86 / 22
Регистрация: 08.07.2014
Сообщений: 507
01.06.2017, 06:12 10
Цитата Сообщение от dropych Посмотреть сообщение
это ж вроде и есть инициализация?
Нет, это просто геттер. Если ты будешь вызывать его так же, как и Getip.ip, то в итоге получишь то же самое, то-есть ничего.
Тогда уже так:
Java
1
2
3
4
5
public static String getip() {
URL whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
return in.readLine();
}
0
dropych
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
01.06.2017, 15:53  [ТС] 11
Цитата Сообщение от korshun84 Посмотреть сообщение
Нет, это просто геттер. Если ты будешь вызывать его так же, как и Getip.ip, то в итоге получишь то же самое, то-есть ничего.
Тогда уже так:
JavaВыделить код
1
2
3
4
5
public static String getip() {
URL whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
return in.readLine();
}
если делать оба класса в одном файле, тогда, если я правильно понимаю, getip должен быть мейн? ведь если mysql является main классом, выполнение программы начинается с него, и сначала программа записывает данные в бд, а потом только определяет ип? или я что-то не так понял. Кроме того,на примере с классом getip я пытаюсь разобраться как правильно собирать значения из других классов и отправлять в БД. т.к. данных будет отправляться достаточно много и не хотелось бы все это смешивать в одном файле.
если сделать как вы предложили выше, а строку заполнения БД сделать так:
Java
1
 String[] insert = {"INSERT INTO users(ip) VALUES (getip);"};
все равно в БД приходит пустое поле
0
korshun84
86 / 86 / 22
Регистрация: 08.07.2014
Сообщений: 507
02.06.2017, 10:08 12
Лучший ответ Сообщение было отмечено dropych как решение

Решение

Цитата Сообщение от dropych Посмотреть сообщение
если делать оба класса в одном файле, тогда, если я правильно понимаю, getip должен быть мейн? ведь если mysql является main классом, выполнение программы начинается с него, и сначала программа записывает данные в бд, а потом только определяет ип?
Чувак, у тебя реально каша в голове.

Делаешь вот так:

Java
1
2
3
4
5
6
7
8
9
public class Getip {
 
        public static String getip() {
            URL whatismyip = new URL("http://checkip.amazonaws.com");
            BufferedReader in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
            return in.readLine();
        }
         
    }
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class mysql {
 
    // JDBC URL, username and password of MySQL server
    private static final String url = "jdbc:mysql://***:3306/ac";
    private static final String user = "***";
    private static final String password = "****";
 
    // JDBC variables for opening and managing connection
    private static Connection con;
    private static Statement stmt;
    private static ResultSet rs;
    
    public static void main(String args[]) {
        
         String ip = Getip.getip();
 
        try {
            
            // opening database connection to MySQL server
            con = DriverManager.getConnection(url, user, password);
 
            // getting Statement object to execute query
            stmt = con.createStatement();
        
 
    
            String[] insert = {"INSERT INTO users(ip) VALUES (ip);"}; // <---
           
            for (String sql : insert) {
             stmt.execute(sql);
         }
 
        } catch (SQLException sqlEx) {
            sqlEx.printStackTrace();
        } 
        
    }
 
}
И будет тебе щастье.

Добавлено через 2 минуты
Цитата Сообщение от dropych Посмотреть сообщение
все равно в БД приходит пустое поле
Так ты ерунду какую-то делаешь, а не sql запрос.
Оно вот так как-то делается.
1
dropych
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
02.06.2017, 19:32  [ТС] 13
да, работает) спасибо
про кашу вы правы, я просто на пхп только работал, а это первый проект на java , туговато идет
0
02.06.2017, 19:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2017, 19:32

[Интересно] Необходимо изменить тело метода другого класса в runtime. Модификация байт-кода, ASM
Здравствуйте. Имеется множество скомпилированных классов другой программы,...

Создать объект, взяв имя его класса из переменной типа String?
Привет всем! Братцы, подскажите, ато у самого не получается... Есть...

Использование класса как переменной другого класса
Приветствую! Кто-нибудь может объяснить вопрос, заданный в теме? Как объявлять...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru