/
Validating a MSSQL database connection
Validating a MSSQL database connection
Here is a very simple example for entering and validating a Microsoft SQL Server database connection (runnable as client on non-Windows OS also). Here are just the relevant parts without translations.
In the UserInputSpec.xml resource, define a panel containing the main input fields for a MSSQL database connection, containing several field validators to directly verify the user input of each single input field:
Resource userInputSpec.xml
<panel id="panel.mssql"> <field id="panel.mssql.title" txt="Microsoft SQL Server Connection" type="title"/> <field type="text" variable="mssql.host"> <spec id="panel.mssql.host" size="30" txt="DB host name:"/> <validator class="com.izforge.izpack.panels.userinput.validator.NotEmptyValidator" id="panel.mssql.host.error" txt="The host name must not be empty!"/> </field> <field type="space"/> <field type="rule" variable="mssql.port"> <spec id="panel.mssql.port" layout="N:5:5" txt="Port:"/> <validator class="com.izforge.izpack.panels.userinput.validator.NotEmptyValidator" id="panel.mssql.port.error" txt="The port must not be empty!"/> <validator class="com.izforge.izpack.panels.userinput.validator.IsPortValidator" id="panel.mssql.port.error.invalid" txt="The port is invalid!"/> </field> <field type="space"/> <field type="divider"/> <field type="space"/> <field type="text" variable="mssql.user"> <spec id="panel.mssql.user" size="20" txt="User name:"/> <validator class="com.izforge.izpack.panels.userinput.validator.RegularExpressionValidator" id="panel.mssql.user.error" txt="The user name is invalid!"> <param name="pattern" value="[a-zA-Z0-9._-]+"/> </validator> </field> <field type="space"/> <field type="password" variable="mssql.password"> <spec> <pwd id="panel.mssql.password" size="20" txt="Password:"/> </spec> <validator class="com.izforge.izpack.panels.userinput.validator.NotEmptyValidator" id="panel.mssql.password.error" txt="The password must not be empty!"/> </field> </panel>
The installer descriptor contains elements like this containing a panel validator verifying the connection assembled from the values of all user input fields in summary if he/she presses Next:
install.xml
<resources <res id="userInputSpec.xml" src="@{izpack.build.directory}/userInputSpec.xml"/> </resources> ... <!-- Maven dependency after invoking dependency:properties in the POM --> <jar src="@{net.sourceforge.jtds:jtds:jar}" stage="install"/> <jar src="@{com.mysoft:validators:jar}" stage="install"/> ... <panel classname="UserInputPanel" id="panel.mssql"> <validator classname="com.mysoft.izpack.validators.MssqlConnectionValidator"/> </panel>
Last but not least there is one custom panel validator MssqlConnectionValidator:
com/mysoft/izpack/validators/MssqlConnectionValidator.java
package com.mysoft.izpack.validators; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import com.izforge.izpack.api.data.InstallData; import com.izforge.izpack.api.installer.DataValidator; public class MssqlConnectionValidator implements DataValidator { private static final String STR_DEFAULT_ERROR_MESSAGE = "Cannot connect to the specified database."; protected InstallData installData; //Error and Warning Messages protected String str_errorMsg; protected String str_warningMsg = ""; @Override public boolean getDefaultAnswer() { return true; } @Override public String getErrorMessageId() { if (str_errorMsg != null) { return str_errorMsg; } else { return STR_DEFAULT_ERROR_MESSAGE; } } @Override public String getWarningMessageId() { return str_warningMsg; } @Override public Status validateData(InstallData installData) { this.installData = installData; try { Class.forName(getDriver()); } catch (ClassNotFoundException ex) { str_errorMsg = "Problem during loading db-driver."; return Status.ERROR; } //Test if Database is reachable try { Connection conn = null; conn = DriverManager.getConnection(getUrl(), getUser(), getPassword()); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(getQuery()); rs.close(); conn.close(); } catch (Throwable ex) { str_errorMsg = "Could not connect to database: \n\n" + ex.getLocalizedMessage(); return Status.ERROR; } return Status.OK; } public String getDriver() { return "net.sourceforge.jtds.jdbc.Driver"; } public String getUrl() { StringBuffer url = new StringBuffer("jdbc:jtds:sqlserver://" + getHost()); String port = getPort(); String instance = getInstance(); if (port != null && !port.isEmpty()) { url.append(":" + port); } if (instance != null && !instance.isEmpty()) { url.append(";instance=" + instance); } return url.toString(); } public String getHost() { return installData.getVariable("mssql.host"); } public String getPort() { return installData.getVariable("mssql.port"); } public String getInstance() { return installData.getVariable("mssql.instance"); } public String getQuery() { return "SELECT 1"; } public String getUser() { return installData.getVariable("mssql.user"); } public String getPassword() { return installData.getVariable("mssql.password"); } }
You must add the proper JDBC driver to the classpath/dependencies to get this compiled and running. For the above case it is the JTDS driver for MSSQL and Sybase
, multiple selections available,
Related content
DynamicInstallerRequirementValidator
DynamicInstallerRequirementValidator
More like this
Field Validators
Field Validators
More like this
ConditionDataValidator
ConditionDataValidator
More like this
Panel Validators
Panel Validators
More like this
Password Input Field
Password Input Field
More like this
Properties
Properties
Read with this