Overview
This reference documents all features available in the MySQL SQL Editor, including database connection management, query execution, result handling, and asynchronous operations.Core Features
Database Connection Management
Database Connection Management
Source: Supported Servers:
Controller.java:149-186, Model.java:53-59Connection Process
The application establishes connections using JDBC with the following parameters:Connection URL Format:localhost127.0.0.1- Custom server addresses (via combo box)
Validation
Pre-Connection Checks (Controller.java:84-101):- Username is not empty
- Password is not empty
- Database is selected (for connection)
- “El usuario es requerido” - Username required
- “La contraseña es requerida” - Password required
- “Debe seleccionar una base de datos” - Database selection required
Async Execution
Connection operations useSwingWorker to prevent UI freezing:Post-Connection Actions
After successful connection:- Database name is set in editor view (
SqlEditorView.java:291-299) - Table list is populated (
Controller.java:172-173) - Login view is hidden
- Editor view is displayed
Connection state is stored in
Model.conexion (Model.java:14) and reused for all subsequent queries.Database Discovery
Database Discovery
Source: System Database Filtering (
Controller.java:107-143, Model.java:26-42Fetching Available Databases
The “Actualizar” button retrieves all accessible databases from the MySQL server.SQL Query:Model.java:36-38):The following system databases are excluded from the list:information_schemamysqlperformance_schemasys
Empty Database Handling
If no user databases are found:- Error message: “No se encontraron bases de datos”
- Combo box remains empty
- User must create a database via external tools
Success Feedback
On successful retrieval:- Combo box is populated with database names
- Success dialog: “Bases de datos actualizadas correctamente”
SQL Query Execution
SQL Query Execution
Source: Process:
Controller.java:234-264, Model.java:101-154Query Types
The application handles two types of SQL queries:1. SELECT Queries
Detection:Model.java:106- Execute query using
Statement.executeQuery() - Extract metadata from
ResultSetMetaData - Create
DefaultTableModelwith column names - Iterate through result set and add rows
- Display results in
tblResultados
Model.java:108-113):2. Modification Queries
Types: INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, TRUNCATEProcess:- Execute using
Statement.executeUpdate() - Get affected row count
- Extract table name from query (
Model.java:163-191) - If table found, display updated table contents
- Otherwise, display affected row count
Model.java:163-191):Supports the following patterns:CREATE TABLE {table_name}INSERT INTO {table_name}UPDATE {table_name}DELETE FROM {table_name}TRUNCATE TABLE {table_name}
Pre-Execution Validation
Check: Query is not empty (Controller.java:235-239)Async Execution
All queries execute in background threads usingSwingWorker<DefaultTableModel, Void>:Result Display
Result Display
Source: Error Message:Modification Result:
SqlEditorView.java:263-268, Controller.java:250-253Table Model Update
Results are displayed using Swing’sDefaultTableModel:Column Width Adjustment
Default Width: 150 pixels per column (SqlEditorView.java:265-267)Row Data Handling
Null Values: Displayed as “null” (handled byResultSet.getObject())Data Types: All column types are preserved from the database:- Integers → Integer objects
- Strings → String objects
- Dates → Date/Timestamp objects
- Decimals → BigDecimal objects
System Messages
Success Message:The results table (
tblResultados) uses setFillsViewportHeight(true) to expand to fill available space, providing a better viewing experience for small result sets.Table Browsing
Table Browsing
Source: Exclusions: Views, system tables, and temporary tables are not includedUse Cases:Query Template:
Controller.java:192-212, Model.java:78-90Table List Population
Method:Model.obtenerTablasDeBaseDatos()Process:- Get database metadata using
Connection.getMetaData() - Get current catalog using
Connection.getCatalog() - Query metadata for tables of type “TABLE”
- Extract table names from result set
Model.java:81-87):Refresh Functionality
The “Refrescar tablas” button re-fetches the table list (Controller.java:192-212):- After creating new tables
- After dropping tables
- When schema changes are made externally
Double-Click Quick Query
Source:SqlEditorView.java:146-156When a table is double-clicked, a SELECT query is auto-generated:Empty Table List Handling
If no tables exist:- Tooltip: “No se encontraron tablas”
- List appears empty
- No error dialog is shown
Asynchronous Operations
Asynchronous Operations
Source: Benefits:
Controller.java (all async methods)SwingWorker Implementation
All long-running operations useSwingWorker to prevent UI freezing:1. Database List Loading
Worker Type:SwingWorker<List<String>, Void>Source: Controller.java:112-1422. Database Connection
Worker Type:SwingWorker<Boolean, Void>Source: Controller.java:152-1863. Query Execution
Worker Type:SwingWorker<DefaultTableModel, Void>Source: Controller.java:242-2644. Table Refresh
Worker Type:SwingWorker<List<String>, Void>Source: Controller.java:193-212UI Locking Pattern
All async operations follow this pattern:- Prevents concurrent operations
- Provides visual feedback (grayed-out controls)
- Prevents invalid input during processing
Error Handling in Workers
Alldone() methods use try-catch to handle exceptions:Error Handling
Error Handling
Source: Syntax Errors:
Controller.java (error handling blocks), Model.java (SQLException throws)Exception Types
SQLException
Thrown By:Model.obtenerTodasLasBasesDatos()- Invalid credentials, network errorsModel.conectar()- Connection failures, invalid databaseModel.ejecutarConsulta()- Syntax errors, constraint violationsModel.desconectar()- Connection closing errors
Error Display Methods
Login View Errors
Method:View.mostrarError(String mensaje)Display: Red label below input fields (View.java:223-225)Common Messages:- “El usuario es requerido”
- “La contraseña es requerida”
- “Debe seleccionar una base de datos”
- “Error: ”
- “Error de conexión: ”
- “No se encontraron bases de datos”
Editor View Errors
Method 1:SqlEditorView.setMensajeSistema(String mensaje)Display: Gray label above results tableMethod 2: JOptionPane.showMessageDialog()Display: Modal error dialogCommon Messages:- “Ingrese una consulta SQL” (Warning)
- “Error en la consulta: ” (Error)
- “Error al obtener tablas: ” (Error)
- “Error al desconectar: ” (Error)
Query Validation Errors
Empty Query:- Caught from
SQLExceptionduring execution - Displayed in both system message and error dialog
- Result table is not modified
The application does not perform client-side SQL validation. All syntax and semantic errors are caught at execution time when MySQL processes the query.
Database Disconnection
Database Disconnection
Source:
Controller.java:217-228, Model.java:66-70Disconnect Process
Triggered by the “Cambiar BD” button with confirmation dialog:Cleanup Steps
- Close JDBC connection (
Model.java:66-70):
- Reset editor view database status:
- Hide editor view, show login view:
State After Disconnection
- Connection object is null
- Editor view displays “Estado: No conectado”
- Table list is not cleared (but is stale)
- Query text is preserved
- Results table is preserved
UI State Management
UI State Management
Source:
View.java:239-252Interface Locking
Method:bloquearInterfaz(boolean bloquear)Purpose: Disable user input during async operationsAffected Components:- Server selector (
cmbServidores) - Username field (
txtUsuario) - Password field (
txtPassword) - Database selector (
cbBasesDatos) - Refresh button (
btnActualizarBases) - Connect button (
btnConectar)
bloquear = true):- All components disabled
- Background color changes to
#F0F0F0(light gray)
bloquear = false):- All components enabled
- Background color restored to white
State Clearing
Method:View.limpiarEstado()Source: View.java:230-232Clears the error message label before new operations:Editor Clearing
Method:SqlEditorView.limpiar()Source: SqlEditorView.java:281-285Resets all editor components:The “Limpiar” button only clears the editor content, not the connection state or table list.
Feature Matrix
| Feature | Login View | Editor View | Async | Source |
|---|---|---|---|---|
| Database Discovery | ✓ | ✓ | Controller.java:107-143 | |
| Database Connection | ✓ | ✓ | Controller.java:149-186 | |
| SQL Execution | ✓ | ✓ | Controller.java:234-264 | |
| Table Browsing | ✓ | ✓ | Controller.java:192-212 | |
| Result Display | ✓ | SqlEditorView.java:263-268 | ||
| Error Handling | ✓ | ✓ | Throughout | |
| UI Locking | ✓ | View.java:239-252 | ||
| Disconnection | ✓ | Controller.java:217-228 | ||
| Quick Query | ✓ | SqlEditorView.java:146-156 |
Connection String Reference
Format
Parameters
{host}- Server address (localhost, 127.0.0.1, or custom)3306- Default MySQL port (hardcoded){database}- Target database name (or empty for database discovery)useSSL=false- Disables SSL for local development