Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346

Не получается выполнить правильные команды SQL в программе:

14.10.2017, 14:37. Показов 707. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Начал учить БД, в данном случае - SQLite. В редакторе пишу команды, все создается, все работает.
Но вот пишу программу на Java, есть метод, который принимает строку с командой, открывает соединение с БД и отправляет туда команду. Ничего не выполняется. Вылет в Эксепшн. Не могу понять. Может я не верно открываю БД, не вовремя? Подскажите:

При инициализации БД, при запуске программы, идет такая проверка в методе:
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
private static void runDtaBase() {
        try {
            Class.forName("org.sqlite.JDBC");
            
            Out.Print("SQLab: runDtaBase:", 1, "Проверка базы данных и состояния таблиц...");
            
            executeCommand("CREATE TABLE IF NOT EXISTS s.shops (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, shop_name VARCHAR(64) UNIQUE NOT NULL);");
            executeCommand("CREATE TABLE IF NOT EXISTS s.firms (id INT UNIQUE PRIMARY KEY AUTOINCREMENT NOT NULL, akb_firm VARCHAR(64) UNIQUE NOT NULL);");
            executeCommand("CREATE TABLE IF NOT EXISTS s.polar (id INT UNIQUE PRIMARY KEY AUTOINCREMENT NOT NULL, akb_polarity VARCHAR(8) UNIQUE NOT NULL);");  
            
            executeCommand("CREATE TABLE base ("
                    + "id   INTEGER NOT NULL    PRIMARY KEY AUTOINCREMENT UNIQUE, "
                    + "shop INTEGER NOT NULL    REFERENCES shops (id) ON DELETE CASCADE, "
                    + "firm INTEGER NOT NULL    REFERENCES firms (id) ON DELETE CASCADE, "
                    + "ah       INTEGER NOT NULL, "
                    + "a        INTEGER NOT NULL, "
                    + "x      INTEGER    NOT NULL, "
                    + "z      INTEGER    NOT NULL, "
                    + "y      INTEGER   NOT NULL, "
                    + "polar    INTEGER NOT NULL    REFERENCES polar (id) ON DELETE CASCADE, "
                    + "price    NUMERIC (10, 2)     NOT NULL, "
                    + "count    INTEGER NOT NULL, "
                    + "comment VARCHAR (512));");
            
            new Desk();
        } catch (ClassNotFoundException e) {e.printStackTrace();}
ВСЕ эти 4 команды вылетают в эксепшн, но в редакторе SQLiteStudio проходят без каких-либо проблем. Пытался менять местами параметры - толк нет.

А вот и сам метод выполнения рядом:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void executeCommand(String command) {
        try {
            bd = DriverManager.getConnection("jdbc:sqlite:s.db3");
            st = bd.createStatement();
            
            try {st.execute("BEGIN;");}catch (SQLException e) {Out.Print("SQLab: executeCommand:", 3, "Проблемы с командой BEGIN...");}
            
            try {st.execute(command);
Ошибка здесь >   } catch (SQLException e) {
                Out.Print("SQLab: executeCommand:", 3, "Неверная команда: " + command);
                JOptionPane.showMessageDialog(null, "<html>SQLab: executeCommand:<br>Неверная команда:<br>" + command + "</html>", "Ошибка!", JOptionPane.ERROR_MESSAGE);
            } finally {
                try {st.execute("COMMIT;");}catch (SQLException e) {Out.Print("SQLab: executeCommand:", 3, "Проблемы с командой COMMIT...");}
            }
            
        } catch (SQLException e) {e.printStackTrace();} finally {prepareForExit();}
    }
Может в нем и что-то не так? Я новенький в этой сфере БД, потому еще не врубаюсь, где проблема..
В любой команде вылетает "Ошибка здесь >", где пометил. В этом блоке эксепшн.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.10.2017, 14:37
Ответы с готовыми решениями:

Не получается вывести ошибки и правильные/неправильные ответы
А завтра сдавать :cry: &lt;html&gt; html&gt; &lt;head&gt; &lt;title&gt;Тест&lt;/title&gt; &lt;/head&gt; &lt;h1 align=&quot;center&quot;&gt; &lt;font color=&quot;# #006400&quot;&gt; ...

Тестер. Как выделить правильные ответы зелёным, а не правильные красным?
Здравствуйте программисты!! у меня такая проблема. Как можно сделать в режиме обучения: 1. Чтобы правильные ответы как-нибудь выделялись...

Команды Пуск - Выполнить
Хочу найти список команд для Пуск-Выполнить, пробовал cmd-help - выдало список, но есть ощущения что неполный поскольку нет ping, tracert...

4
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
14.10.2017, 15:44
А саму ошибку приложить никак?
0
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
14.10.2017, 22:19  [ТС]
Цитата Сообщение от LeX Посмотреть сообщение
А саму ошибку приложить никак?
А нет никаких ошибок. Просто каждый раз вылетает в Эксепшн кэч. Всё. Ни одна команда не проходит, никто не ругается.
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
14.10.2017, 22:40
А exception не ошибка? Ты бы хотя бы написал в каком месте ловишь, а вообще сделай printStackTrace и выложи лог сюда
0
 Аватар для KiraLis39
9 / 10 / 1
Регистрация: 23.07.2014
Сообщений: 346
15.10.2017, 21:00  [ТС]
Цитата Сообщение от LeX Посмотреть сообщение
сделай printStackTrace и выложи лог сюда
ппц я тупой -_-
Честно, до этого момента, до меня даже не доходило, что там нет принтСтака.. кажется, надо передохнуть..

SQLab: runDtaBase: >>> Проверка базы данных и состояния таблиц...
org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (unknown database s)
at org.sqlite.core.DB.newSQLException(DB.ja va:909)
at org.sqlite.core.DB.newSQLException(DB.ja va:921)
at org.sqlite.core.DB.throwex(DB.java:886)
at org.sqlite.core.NativeDB.prepare_utf8(Na tive Method)
at org.sqlite.core.NativeDB.prepare(NativeD B.java:127)
at org.sqlite.core.DB.prepare(DB.java:227)
at org.sqlite.jdbc3.JDBC3Statement.execute( JDBC3Statement.java:60)
at door.SQLab.executeCommand(SQLab.java:72)
at door.SQLab.runDtaBase(SQLab.java:43)
at door.SQLab.<init>(SQLab.java:34)
at door.MainClass.checkFinalLoginAndPass(Ma inClass.java:196)
at door.MainClass.access$0(MainClass.java:1 90)
at door.MainClass$1.actionPerformed(MainCla ss.java:51)
at javax.swing.AbstractButton.fireActionPer formed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actio nPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActio nPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPresse d(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListen er.mouseReleased(BasicButtonListener.jav a:252)
at java.awt.Component.processMouseEvent(Com ponent.java:6533)
at javax.swing.JComponent.processMouseEvent (JComponent.java:3324)
at java.awt.Component.processEvent(Componen t.java:6298)
at java.awt.Container.processEvent(Containe r.java:2236)
at java.awt.Component.dispatchEventImpl(Com ponent.java:4889)
at java.awt.Container.dispatchEventImpl(Con tainer.java:2294)
at java.awt.Component.dispatchEvent(Compone nt.java:4711)
at java.awt.LightweightDispatcher.retargetM ouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMo useEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchE vent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Con tainer.java:2280)
at java.awt.Window.dispatchEventImpl(Window .java:2746)
at java.awt.Component.dispatchEvent(Compone nt.java:4711)
at java.awt.EventQueue.dispatchEventImpl(Ev entQueue.java:758)
at java.awt.EventQueue.access$500(EventQueu e.java:97)
at java.awt.EventQueue$3.run(EventQueue.jav a:709)
at java.awt.EventQueue$3.run(EventQueue.jav a:703)
at java.security.AccessController.doPrivile ged(Native Method)
at java.security.ProtectionDomain$JavaSecur ityAccessImpl.doIntersectionPrivilege(Pr otectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecur ityAccessImpl.doIntersectionPrivilege(Pr otectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.jav a:731)
at java.awt.EventQueue$4.run(EventQueue.jav a:729)
at java.security.AccessController.doPrivile ged(Native Method)
at java.security.ProtectionDomain$JavaSecur ityAccessImpl.doIntersectionPrivilege(Pr otectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQ ueue.java:728)
at java.awt.EventDispatchThread.pumpOneEven tForFilters(EventDispatchThread.java:201 )
at java.awt.EventDispatchThread.pumpEventsF orFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsF orHierarchy(EventDispatchThread.java:105 )
at java.awt.EventDispatchThread.pumpEvents( EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents( EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDi spatchThread.java:82)
SQLab: executeCommand: >>> Неверная команда: CREATE TABLE IF NOT EXISTS s.shops (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, shop_name VARCHAR(64) UNIQUE NOT NULL);

BD "s" у меня лежит в корне программы. Подключаю как видно в первом коде выше. Как обычно.

Кликните здесь для просмотра всего текста


Добавлено через 1 час 43 минуты
Я не знаю еще, может быть не стоит каждый раз открывать и закрывать стейтмент? Может один раз открыть при запуске и держать открытым лучше? Но если прога вылетит.. уф. Я хочу узнать, как НУЖНО делать. В среде уже умеющих людей.

Добавлено через 7 часов 27 минут
И да, я удалял из команд часть строки "s."
Тоже самое.

Добавлено через 1 минуту
Я не знаю. Сегодня всё заработало само. Я не знаю почему.. -_- вопрос закрыт. Пока что.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2017, 21:00
Помогаю со студенческими работами здесь

QT выполнить команды на bash
Всем привет! Работаю на QT в ОС Linux и появилась задача в которой нужно выполнить команды в bash через QT. А именно записать в файл через...

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

Запустить и выполнить 2 команды в cmd
Хочу перейти в католог с нужной мне программой и запустить ее, но программа может находится на разных дисках, а чтобы выполнить start надо...

Как последовательно выполнить команды?
Требуется перед открытием файла скопировать его в другую папку и после его закрытия, ещё раз его скопировать! + хотел к времени добавить...

Как выполнить такие команды в ОС Linux
Помогите сделать: 1. Создать личную директорию (согласно фамилии студента). 2. Установить права доступа к этой директории. 3....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru