After configuring connection pooling (which will be discussed in the following section), you could use JNDI to retrieve an connection as follows.
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import org.zkoss.zul.Window;
public class MyWindows extends Window {
private Textbox name, email;
public void onCreate() {
//initial name and email
name = getFellow("name");
email = getFellow("email");
}
public void onOK() throws Exception {
DataSource ds = (DataSource)new InitialContext()
.lookup("java:comp/env/jdbc/MyDB");
//Assumes your database is configured and
//named as "java:comp/env/jdbc/MyDB"
Connection conn = null;
Statement stmt = null;
try {
conn = ds.getConnection();
stmt = conn.prepareStatement("INSERT INTO user values(?, ?)");
//insert what end user entered into database table
stmt.set(1, name.value);
stmt.set(2, email.value);
//execute the statement
stmt.executeUpdate();
stmt.close(); stmt = null;
//optional because the finally clause will close it
//However, it is a good habit to close it as soon as done, especially
//you might have to create a lot of statement to complete a job
} finally { //cleanup
if (stmt != null) {
try {
stmt.close();
} catch (SQLException ex) {
//(optional log and) ignore
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
//(optional log and) ignore
}
}
}
}
}
Notes:
It is important to close the statement and connection after use.
You could access multiple database at the same time by use of multiple connections. Depending on the configuration and J2EE/Web servers, these connections could even form a distributed transaction.