Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
81 / 81 / 2
Регистрация: 17.02.2010
Сообщений: 244
1

Связования таблиц JDBC

25.06.2010, 10:14. Показов 1640. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток!!! У меня есть две таблицы. И Мне нужно вытащит данные. Я их связал через Id. И когда вытаскиваю данны. В таблице 1 у мен 3 записи а в таблице 2 у мен 9 записи и каждому 3 записи таблицы 1 связан по 3 записи таблицы 2. Примерно будет так.

Таблица 1 Таблица 2
ID 1 ID 1
ID 2 ID 1
ID 3 ID 1
ID 2
ID 2
ID 2
ID 3
ID 3
ID 3

Я пробовал через резулть сет создал две и в один цикл создал еще Резульсет. Но чето у мен после первой сразу же выкидовает

Вот код
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
public ArrayList<User> getUser(String userName, int start, int end) {
ArrayList<User> users= new ArrayList<User>();
try{
    
    Statement s=conn.createStatement();
    ResultSet rs;
    String sql = null;
    sql = "select * from USER  where " + 
    " USERS_INFORM.USERNAME='" + userName + "'";
    
    ResultSet rsCustomFields;
    rs = s.executeQuery(sql);
    while(rs.next()){
        User us = new User();
        us.ID = rs.getInt("ID");
        us.userName = rs.getString("USERNAME");
        us.dateReg = rs.getDate("DATAREG");
        ........
        String customFields="select * from INFORM where ID="+doc.docID;
        rsInformation=s.executeQuery(customFields);
        while(rsInformation.next()){                                        
                       us.addInf(rsCustomFields.getString("COMMENT"), rsInformation.getString("FRENDS"));
    }
                    
    document.add(doc);
}
Возможно есть другие вариянты.

Добавлено через 1 час 13 минут
Я решил проблему создав еще один Statemnet
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2010, 10:14
Ответы с готовыми решениями:

JDBC. Запрос на выборку из нескольки таблиц.
Вопрос возник такой. Допустим я хочу при помощи JDBC послать к БД запрос. Запрос состоит из...

Получение таблиц через JDBC API
Приветствую, есть задача , нужно создать таблицы в базе, однако, перед созданием убедиться, что...

Вывести данные из двух таблиц (jdbc)
Здравствуйте! Я подключился к базы данных через jdbc. Как мне вывести данные сразу из двух таблиц?

Java + Access bez JDBC-ODBC a srazu 4erez JDBC
Pishu na java.Isplzuju Access.Svazivaju 4erez ODBC-JDBC.A moznlo li na pjramuju svzat 4erez jdbc...

5
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
25.06.2010, 10:55 2
Насколько я понял тебе нужно выполнить 1 ПРАВИЛЬНЫЙ запрос. Почитай про sql join
0
81 / 81 / 2
Регистрация: 17.02.2010
Сообщений: 244
25.06.2010, 12:40  [ТС] 3
aleksandy вы меня не понили я уже связал таблицы но проблема с отображением.
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
25.06.2010, 13:44 4
Метод должен выглядеть приблизительно вот так.
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
56
57
58
59
60
61
public List<User> getUser(String userName, int start, int end) {
    List<User> users = new ArrayList<User>();
    PreparedStatement ps = null;
    ResultSet rs = null;
    try {
        ps = conn.prepareStatement("select user.* from USER where USERS_INFORM.USERNAME= ?");
        ps.setString(1, userName);
        rs = ps.executeQuery();
        while (rs.next()) {
            User us = new User();
            us.setId(rs.getInt("ID"));
            us.setUserName(rs.getString("USERNAME"));
            us.setDateReg(rs.getDate("DATAREG"));
            PreparedStatement psCustomFields = null;
            ResultSet rsCustomFields = null;
            try {
                psCustomFields = conn.prepareStatement("select * from INFORM where ID = ?");
                psCustomFields.setInt(1, doc.getDocId());
                rsCustomFields = psCustomFields.executeQuery();
                while (rsCustomFields.next()) {
                    us.addInf(rsCustomFields.getString("COMMENT"),
                            rsCustomFields.getString("FRENDS"));
                }
            } finally {
                try {
                    if (rsCustomFields != null) {
                        try {
                            rsCustomFields.close();
                        } catch (SQLException e) {
                        }
                    }
                } finally {
                    if (psCustomFields != null) {
                        try {
                            psCustomFields.close();
                        } catch (SQLException e) {
                        }
                    }
                }
            }
        }
 
    } finally {
        try {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                }
            }
        } finally {
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                }
            }
        }
    }
    document.add(doc);
}
У бинов не должно быть публичных полей. Все нужно делать через сеттеры и геттеры. А также НИКОГДА не используй java.sql.Statement для динамически формируемых условий выборки. Это прямая дорога к инъекциям.

Добавлено через 30 секунд
А насчет отображения я так и не понял, тебе что нужно-то?
2
81 / 81 / 2
Регистрация: 17.02.2010
Сообщений: 244
26.06.2010, 10:56  [ТС] 5
Вот вы создали два PreparedStatement и ResultSet. Этот как у меня просто место Statement изминили на PreparedStatement. А мне бы желательно исполдьзовать 1 Statement или PreparedStatement на один раз

В начале хотел все сделать в одном запросе. Но получился так что отображаются пустые таблицы где сохранены данные.
0
81 / 81 / 2
Регистрация: 17.02.2010
Сообщений: 244
01.07.2010, 17:26  [ТС] 6
С одним запросом я примерно так решил проблему но возникло другая проблема. При next() он перепрыгивает на следующею оставляя одну строку пустой
Дайте совет как провильно организавать код.

Вот код
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
public ArrayList<User> getUser(String userName) {
ArrayList<User> users= new ArrayList<User>();
try{
        
        Statement s=conn.createStatement();
        ResultSet rs;
        String sql = null;
        sql = "select * from USER,  INFORM where USER.ID=INFORM.ID" + 
        " USERS.USERNAME='" + userName + "'";
        
        ResultSet rsCustomFields;
        rs = s.executeQuery(sql);
        while(rs.next()){
                User us = new User();
                us.ID = rs.getInt("ID");
                us.userName = rs.getString("USERNAME");
                us.dateReg = rs.getDate("DATAREG");
                ........
                
                while(rs.getInt("ID")==us.ID){                                                                            
                     us.addInf(rsCustomFields.getString("COMMENT"), rsInformation.getString("FRENDS"));
                     if(!rs.next()){
                            break; 
                    }
        }
                                        
        users.add(us);
}
0
01.07.2010, 17:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2010, 17:26
Помогаю со студенческими работами здесь

Ошибка в jdbc+oracle: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
Вот такой трабл: на Class.forName('oracle.jdbc.driver.OracleDriver'); отвечает ...

JDBC
Всем привет. Буду рад помощи. prStatement = myconnection.prepareStatement(&quot;select * from employees...

jdbc
Доброго времени суток. Возник вопрос про подключение sql к java. Скажу сразу, по форуму искал(не...

JDBC
Есть число Х и есть база данных с числом Y. Как вытянуть из базы данных число Y и умножить его на...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru