Giới thiệu và cách sử dụng

Giới thiệu

Bắt đầu sử dụng WAK đem đến cho lập trình viên nhiều thuận lợi trong đó có việc sinh ra các cú pháp để tác động đến cơ sở dữ liệu như tạo mới,sửa, xóa các bản ghi.Tuy nhiên lập trình viên cũng có thể tự viết các câu lệnh để tác động đến DB theo cú pháp theo cách thông thường bằng cách gọi đến các hàm (function) được viết trong bài viết sau.

Cách sử dụng

Ta có thể viết các câu lệnh gọi đến DB thông qua việc đặt các câu lệnh bên trong block

    Script=:
    :{
    // Viết các câu lệnh tác động đến DB
    :}

Danh sách các câu lệnh hay dùng

Các hàm này được cung cấp trong thư viện ftl_common, cụ thể là trong package: com.ftl.sql.Database.

  • Bạn cũng có thể tự xem thêm và thử chỉnh sửa các function sau khi decomplier thư viện và package đã nêu trên

Đóng các đối tượng liên quan đến DB sau khi dùng xong

Các hàm này tuy đơn giản nhưng nếu quên thì nó sẽ gây ra cho bạn và cả hệ thống của bạn rất nhiều rắc rối: lỗi tràn pool trong java.
Ví dụ như các thông báo lỗi dưới đây:

Exception: System.InvalidOperationException Message: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached. Source: System.Data at System.Data.SqlClient.SqlConnectionPoolManager.Get PooledConnection(SqlConnectionString options, Boolean& isInTransaction) at System.Data.SqlClient.SqlConnection.Open() ...
 
Exception: System.InvalidOperationException
 
Message: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
 
Source: System.Data
 
at System.Data.SqlClient.SqlConnectionPoolManager.Get PooledConnection(SqlConnectionString options, Boolean& isInTransaction)
 
at System.Data.SqlClient.SqlConnection.Open()

closeObject(Statement obj)

com.ftl.sql.DataBase.closeObject(Statement obj) : Đóng statement đã được gọi

    public static void closeObject(Statement obj) {
        try {
            if (obj != null) {
                obj.close();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

closeObject(ResultSet obj)

com.ftl.sql.DataBase.closeObject(ResultSet obj) : Đóng resultSet

    public static void closeObject(ResultSet obj) {
        try {
            if (obj != null) {
                obj.close();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

closeObject(Connection cn)

com.ftl.sql.Database.closeObject(Connection cn) : Đóng connection

    public static void closeObject(Connection obj) {
        try {
            if (obj != null && !obj.isClosed()) {
                if (!obj.getAutoCommit()) {
                    obj.rollback();
                }
                obj.close();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Nhóm các hàm để kết nối connection

getConnection(String url, String userName, String password)

    public static Connection getConnection(String url, String userName, String password) throws Exception {
        return Database.getConnection("oracle.jdbc.driver.OracleDriver", url, userName, password);
    }

getConnection(String driver, String url, String userName, String password)

    public static Connection getConnection(String driver, String url, String userName, String password) throws Exception {
        Properties prtConnect = new Properties();
        prtConnect.setProperty("user", userName);
        prtConnect.setProperty("password", password);
        Driver drv = (Driver)Class.forName(driver).newInstance();
        return drv.connect(url, prtConnect);
    }

Nhóm các hàm để lấy giá trị và update DB

executeQuery(Connection cn, String sql)

  • Connection cn : Tham số kết nối đến DB
  • String sql : Câu lệnh SQL
    public static List<List<String>> executeQuery(Connection cn, String sql) throws Exception {
        return Database.executeQuery(cn, sql, Integer.MAX_VALUE);
    }

executeQuery(Connection cn, String sql, int maxNumberOfRows

  • Connection cn: Tham số kết nối đến DB
  • String sql : Câu lệnh SQL
  • int maxNumberOfRows: lấy ra tối đa số hàng của kết quả
    public static List<List<String>> executeQuery(Connection cn, String sql, int maxNumberOfRows) throws Exception {
        Statement stmt = null;
        ResultSet rs = null;
        try {
            stmt = cn.createStatement();
            rs = stmt.executeQuery(sql);
            List<List<String>> list = Database.convertToVector(rs, maxNumberOfRows);
            return list;
        }
        catch (SQLException e) {
            logger.info(sql);
            throw e;
        }
        finally {
            Database.closeObject(rs);
            Database.closeObject(stmt);
        }
    }

executeQuery(Connection cn, String sql, List<String> params, int maxNumberOfRows)

  • Connection cn: Tham số kết nối đến DB
  • String sql : Câu lệnh SQL
  • List<String> params: tham số truyền vào để tránh bị injection SQL
  • int maxNumberOfRows: lấy ra tối đa số hàng của kết quả
  public static List<List<String>> executeQuery(Connection cn, String sql, List<String> params, int maxNumberOfRows) throws Exception {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            stmt = cn.prepareStatement(sql);
            for (int i2 = 0; i2 < params.size(); ++i2) {
                stmt.setString(i2 + 1, params.get(i2));
            }
            rs = stmt.executeQuery();
            List<List<String>> i2 = Database.convertToVector(rs, maxNumberOfRows);
            return i2;
        }
        catch (SQLException e) {
            logger.info(sql);
            throw e;
        }
        finally {
            Database.closeObject(rs);
            Database.closeObject(stmt);
        }
    }

Nhóm các hàm lấy giá trị

getValue(Connection cn, String sql)

  • Connection cn: Tham số kết nối đến DB
  • String sql : Câu lệnh SQL
 public static String getValue(Connection cn, String sql) throws Exception {
        Statement stmt = null;
        ResultSet rs = null;
        try {
            stmt = cn.createStatement();
            rs = stmt.executeQuery(sql);
            if (!rs.next()) {
                throw new Exception("No data found");
            }
            String string = rs.getString(1);
            return string;
        }
        catch (SQLException e) {
            logger.info(sql);
            throw e;
        }
        finally {
            Database.closeObject(rs);
            Database.closeObject(stmt);
        }
    }

getValue(Connection cn, String sql, String defaultValue)

  • Connection cn: Tham số kết nối đến DB
  • String sql : Câu lệnh SQL
  • String defaultValue: giá trị mặc định khi câu lệnh 'sql' không đưa ra được giá trị
    public static String getValue(Connection cn, String sql, String defaultValue) throws Exception {
        Statement stmt = null;
        ResultSet rs = null;
        try {
            stmt = cn.createStatement();
            rs = stmt.executeQuery(sql);
            if (!rs.next()) {
                String string = defaultValue;
                return string;
            }
            String string = rs.getString(1);
            return string;
        }
        catch (SQLException e) {
            logger.info(sql);
            throw e;
        }
        finally {
            Database.closeObject(rs);
            Database.closeObject(stmt);
        }
    }

getValue(Connection cn, String sql, List<String> params)

  • Connection cn: Tham số kết nối đến DB
  • String sql : Câu lệnh SQL
  • List<String> params: Danh sách các tham số truyền vào để tránh bị injection SQL
    public static String getValue(Connection cn, String sql, List<String> params) throws Exception {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            stmt = cn.prepareStatement(sql);
            for (int i2 = 0; i2 < params.size(); ++i2) {
                stmt.setString(i2 + 1, params.get(i2));
            }
            rs = stmt.executeQuery();
            if (!rs.next()) {
                throw new Exception("No data found");
            }
            String i2 = rs.getString(1);
            return i2;
        }
        catch (SQLException e) {
            logger.info(sql);
            throw e;
        }
        finally {
            Database.closeObject(rs);
            Database.closeObject(stmt);
        }
    }

getValue(Connection cn, String sql, List<String> params, String defaultValue)

  • Connection cn: Tham số kết nối đến DB
  • String sql : Câu lệnh SQL
  • List<String> params: Danh sách các tham số truyền vào để tránh bị injection SQL
  • String defaultValue: giá trị mặc định khi câu lệnh 'sql' không đưa ra được giá trị
    public static String getValue(Connection cn, String sql, List<String> params, String defaultValue) throws Exception {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            stmt = cn.prepareStatement(sql);
            for (int i2 = 0; i2 < params.size(); ++i2) {
                stmt.setString(i2 + 1, params.get(i2));
            }
            rs = stmt.executeQuery();
            if (!rs.next()) {
                String i2 = defaultValue;
                return i2;
            }
            String i2 = rs.getString(1);
            return i2;
        }
        catch (SQLException e) {
            logger.info(sql);
            throw e;
        }
        finally {
            Database.closeObject(rs);
            Database.closeObject(stmt);
        }
    }

getValue(Connection cn, String tableName, String fieldName, String condition)

    public static String getValue(Connection cn, String tableName, String fieldName, String condition) throws Exception {
        return Database.getValue(cn, "SELECT " + fieldName + " FROM " + tableName + " WHERE " + condition);
    }

Nhóm các câu lệnh update dữ liệu

executeUpdate(Connection cn, String sql)

  • Connection cn: Tham số kết nối đến DB
  • String sql : Câu lệnh SQL
    public static int executeUpdate(Connection cn, String sql) throws Exception {
        Statement stmt = null;
        try {
            stmt = cn.createStatement();
            int n = stmt.executeUpdate(sql);
            return n;
        }
        catch (SQLException e) {
            logger.info(sql);
            throw e;
        }
        finally {
            Database.closeObject(stmt);
        }
    }

executeUpdate(Connection cn, String sql, List<String> params)

  • Connection cn: Tham số kết nối đến DB
  • String sql : Câu lệnh SQL
  • List<String> params: Danh sách các tham số truyền vào để tránh bị injection SQL
    public static int executeUpdate(Connection cn, String sql, List<String> params) throws Exception {
        PreparedStatement stmt = null;
        try {
            int i;
            stmt = cn.prepareStatement(sql);
            for (i = 0; i < params.size(); ++i) {
                stmt.setString(i + 1, params.get(i));
            }
            i = stmt.executeUpdate();
            return i;
        }
        catch (SQLException e) {
            logger.info(sql);
            throw e;
        }
        finally {
            Database.closeObject(stmt);
        }
    }

Comment