Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 11.05.2016
Сообщений: 31

PreparedStatement

09.06.2016, 12:58. Показов 905. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, необходимо сделать одно DAO, и в нём 2 PreparedStatement (для каждого из методов), один я создаю и использую, а второй не выходит, при условии что закрытие должно происходить 1 раз, и методы должны чередоваться в цикле 5 раз

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
public class ProfileDAOImpl implements ProfileDAO {
        private Connection connection = null;
        private PreparedStatement preparedStatement = null;
 
    public void getConn() throws DAOException {
        try (FileReader reader = new FileReader("db.properties")) {
            Properties properties = new Properties();
            properties.load(reader);
            String user = properties.getProperty("user");
            String password = properties.getProperty("password");
            String dburl = properties.getProperty("dburl");
            String driver = properties.getProperty("driver");
            Class.forName(driver);
            if (connection == null) {
                connection = DriverManager.getConnection(dburl, user, password);
            }
        } catch (IOException e) {
            throw new DAOException("file error ",e);
        } catch (ClassNotFoundException e) {
            throw new DAOException("class error ",e);
        } catch (SQLException e) {
            throw new DAOException("conn error ",e);
        }
    }
    private PreparedStatement getPreparedStatement(String sql) throws DAOException{
        if(preparedStatement == null) {
            try {
                preparedStatement = connection.prepareStatement(sql);
            } catch (Exception e) {
                throw new DAOException("create ps error ",e);
            }
        } return preparedStatement;
    }
    @Override
    public void updateProfile(Profile profile) throws DAOException {
        String sql = "UPDATE Profile SET user_name=?," +
                " nick_name=?, user_mail=?, password=? WHERE id=?";
        try {
            getPreparedStatement(sql);
            preparedStatement.setString(1, profile.getUserName());
            preparedStatement.setString(2, profile.getNickName());
            preparedStatement.setString(3, profile.getUserMail());
            preparedStatement.setString(4, profile.getPassword());
            preparedStatement.setInt(5, profile.getId());
            preparedStatement.executeUpdate();
        } catch (Exception e) {
            throw new DAOException("update error ",e);
        }
    }
    @Override
    public void close() throws DAOException{
        try {
            if (preparedStatement != null) {
                preparedStatement.close();
                preparedStatement = null;
            }
        } catch (Exception e) {
            throw new DAOException("Close (ps) error ",e);
        }
        try {
            if (connection != null) {
                connection.close();
                connection = null;
            }
        } catch (Exception e) {
            throw new DAOException("Close (conn) error",e);
        }
    }
    @Override
    public void createProfile (Profile profile) throws DAOException {
        String sql = "INSERT INTO Profile (user_name, nick_name, user_mail, password) " +
                "VALUES (?,?,?,?)";
        try {
            getPreparedStatement(sql);
            preparedStatement.setString(1, profile.getUserName());
            preparedStatement.setString(2, profile.getNickName());
            preparedStatement.setString(3, profile.getUserMail());
            preparedStatement.setString(4, profile.getPassword());
            preparedStatement.executeUpdate();
 
        } catch (Exception e) {
            throw new DAOException("create error ",e);
        }
    }
}

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Main {
    public static void main(String[] args) {
        
        ProfileDAO profile = new ProfileDAOImpl();
        Profile Test = new Profile();
        Test.setUserName("WWW");
        Test.setNickName("test");
        Test.setUserMail("@mail.ru");
        Test.setPassword("qwerty");
        Test.setId(1);
 
        try {
            profile.getConn();
            for (int i = 0; i < 5; i++) {
                profile.updateProfile(Test);
                profile.createProfile(Test);
            }
            profile.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
т.е. в main отрабатывает только метод updateProfile, для createProfile необходим второй экземпляр PreparedStatement, как это исправить?

Добавлено через 41 минуту
т.е. создать по полю для каждого метода, при вызове метода поле инициализировать, при последующих вызовах - использовать уже инициализированное значение, все поля закрыть в одном методе, в конце работы. как это реализовать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.06.2016, 12:58
Ответы с готовыми решениями:

DAO (PreparedStatement, DaoException)
Доброго времени суток, помогите пожалуйста разобраться, вопросы следующие были заданы: &quot;throws Exception, throws SQLException...

PreparedStatement
всем добрый день, есть код : package com.mysql; public class DaoAllSubjectsStudents implements...

PreparedStatement + MySQL
Коллеги, привет! Столкнулся с такой проблемкой. Хочу с помощью PreparedStatement создать схему на MySQL, собственно использую такой...

1
0 / 0 / 1
Регистрация: 11.05.2016
Сообщений: 31
10.06.2016, 14:57  [ТС]
переписал так, вроде ок

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
    public class ProfileDAOImpl implements ProfileDAO {
        private Connection connection = null;
        private Map<String, PreparedStatement> preparedStatements = new HashMap<String, PreparedStatement>();
     
        public void getConn() throws DAOException {
            try (FileReader reader = new FileReader("db.properties")) {
                Properties properties = new Properties();
                properties.load(reader);
                String user = properties.getProperty("user");
                String password = properties.getProperty("password");
                String dburl = properties.getProperty("dburl");
                String driver = properties.getProperty("driver");
                Class.forName(driver);
                if (connection == null) {
                    connection = DriverManager.getConnection(dburl, user, password);
                }
            } catch (IOException e) {
                throw new DAOException("file error ", e);
            } catch (ClassNotFoundException e) {
                throw new DAOException("class error ", e);
            } catch (SQLException e) {
                throw new DAOException("conn error ", e);
            }
        }
     
        private PreparedStatement getPreparedStatement(String sql) throws DAOException {
            PreparedStatement preparedStatement = preparedStatements.get(sql);
            if (preparedStatement == null) {
                try {
                    preparedStatement = connection.prepareStatement(sql);
                    preparedStatements.put(sql, preparedStatement);
                } catch (Exception e) {
                    throw new DAOException("create ps error ", e);
                }
            }
            return preparedStatement;
        }
     
        @Override
        public void updateProfile(Profile profile) throws DAOException {
            String sql = "UPDATE Profile SET user_name=?," +
                    " nick_name=?, user_mail=?, password=? WHERE id=?";
            try {
                PreparedStatement preparedStatement = getPreparedStatement(sql);
                preparedStatement.setString(1, profile.getUserName());
                preparedStatement.setString(2, profile.getNickName());
                preparedStatement.setString(3, profile.getUserMail());
                preparedStatement.setString(4, profile.getPassword());
                preparedStatement.setInt(5, profile.getId());
                preparedStatement.executeUpdate();
            } catch (Exception e) {
                throw new DAOException("update error ", e);
            }
        }
     
        @Override
        public void close() throws DAOException {
            for (PreparedStatement preparedStatement : preparedStatements.values()) {
                try {
                    if (preparedStatement != null) {
                        preparedStatement.close();
     
                    }
                } catch (Exception e) {
                    throw new DAOException("Close (ps) error ", e);
                }
            } preparedStatements = null;
            try {
                if (connection != null) {
                    connection.close();
                    connection = null;
                }
            } catch (Exception e) {
                throw new DAOException("Close (conn) error", e);
            }
        }
     
        @Override
        public void deleteProfile(Profile profile) throws DAOException {
            String sql = "DELETE FROM Profile WHERE id=?";
            try {
                PreparedStatement preparedStatement = getPreparedStatement(sql);
                preparedStatement.setInt(1, profile.getId());
                preparedStatement.executeUpdate();
     
            } catch (Exception e) {
                throw new DAOException("delete error ", e);
            }
        }
     
        @Override
        public void createProfile(Profile profile) throws DAOException {
            String sql = "INSERT INTO Profile (user_name, nick_name, user_mail, password) " +
                    "VALUES (?,?,?,?)";
            try {
                PreparedStatement preparedStatement = getPreparedStatement(sql);
                preparedStatement.setString(1, profile.getUserName());
                preparedStatement.setString(2, profile.getNickName());
                preparedStatement.setString(3, profile.getUserMail());
                preparedStatement.setString(4, profile.getPassword());
                preparedStatement.executeUpdate();
     
            } catch (Exception e) {
                throw new DAOException("create error ", e);
            }
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.06.2016, 14:57
Помогаю со студенческими работами здесь

PreparedStatement не работатет
Доброе время суток. Код public Users getLoginAndPassword(String login) throws SQLException { PreparedStatement...

JDBC: PreparedStatement
Возник вопрос: в каком месте я имею право ставить знак &quot;?&quot;? SELECT ? FROM some_table; SELECT * FROM some_table WHERE ? = 3; Нельзя ли...

Синхронизация PreparedStatement
Вызываются разные статические процедуры одного класса которые используют одни и те же статические PreparedStatement. Можно ли...

Про Connection и PreparedStatement
Добрый день уважаемые форумчане... Имеется подключение к базе... private Connection connection; private PreparedStatement...

PostgreSQL autoincrement PreparedStatement
Коллеги кто нибудь работал с PostgreSQL? B MySQL всё просто задаешь колонке параметер AUTO_INCREMENT и всем хорошо в PostgreSQL всё...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru