Есть ли лучший способ, чем мой kludge, обойти ленивую оценку, которая предотвращает присвоение имени БД перед попыткой подключения? - PullRequest
0 голосов
/ 07 января 2019

Я хочу, чтобы пользователь мог выбрать базу данных для подключения. Доступная пользователю информация находится в разных базах данных sqLite. Я мог бы жестко закодировать URL для конкретной базы данных, но я должен был бы предоставить полные программы для каждого небольшого модуля. Подача URL из пользовательского ввода в SqliteConnection () завершается неудачно на первой итерации из-за отложенной обработки.

Я хочу предоставить пользователям какой-то способ напрямую перейти к нужной программе для БД, к которой он / она должен получить доступ. Пропускная способность была бы огромной с участием нескольких десятков БД. Поэтому я создал начальный экран, который позволяет пользователю выбрать название темы и номер урока. Эта информация превращается в URL и отправляется в класс, который обрабатывает подключение к нужной БД. Но, как было изначально написано, была предпринята попытка подключиться к БД без указания правильного имени, поскольку предоставленная пользователем информация была пропущена. Необходимо повторно запустить процесс подключения, который теперь работает, поскольку ранее пропущенный материал был правильно оценен.

Итак, пользователь видит что-то вроде этого:

Пользователь: Load DB Physics3 Ответ компьютера: нет такой БД. Пользователь: Load DB Physics3 Компьютер: соединение с БД Physics3 успешно.

Вот класс, который я поместил. Есть ли лучший способ, как сказать "не пропустите копирование URL-адреса в URL-адрес в следующем коде?

import java.sql.*;
import javax.swing.*;
import java.sql.Connection;
public class SqliteConnection {
    static String renameDB = "";
    public static void simpleMessage(final String DBname) {
            renameDB = DBname;
/*KLUDGE*/  dbConnector(); //Force it to run dbConnector a second time.
    }               //For some reason, it does not calculate the value of 
                  //"renameDB" to use making the connection. It does the 
                  //connection housekeeping below, tries and fails to 
                  //connect to a DB. and then does he stuff above, So 
                  //I have to force it to to the seconde block again. 
                  //Then it is o.k.

    public static Connection dbConnector(){
        Connection conn = null; 
            try {
            Class.forName("org.sqlite.JDBC");
            conn = DriverManager.getConnection(renameDB);
            return conn;
        }catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }

}
//To demo this class just modify String renameDB to a URL of your        
chosing.

Этот код, включая kludge, попадает в правильную БД. Это просто кажется неуместным способом достижения моей цели. К счастью, пользователь избавлен от уродства.

...