This documentation is not maintained. Please refer to doc.castsoftware.com/technologies to find the latest updates.

Extension ID

com.castsoftware.java.sql

What's new?

See JDBC - 1.0 - Release Notes for more information.

Description

This extension provides support for the following APIs found in JDBC packages which are responsible for typical CRUD operations with the database (see https://docs.oracle.com/javase/7/docs/technotes/guides/jdbc/):

In what situation should you install this extension?

If your Java application uses JDBC API to access a relational database.

Technology support

The JDBC API is part of Java SE. Therefore, supported JDBC versions follow those supported by the JEE Analyzer - see Covered Technologies

Also, all overrides in vendor or custom JDBC extensions are supported. 

AIP Core compatibility

This extension is compatible with:

AIP Core release

Supported

8.3.x(tick)

Supported DBMS servers

This extension is compatible with the following DBMS server .

DBMSSupported
CSS/PostgreSQL      (tick)

Download and installation instructions

For JEE applications using JDBC, the extension will be automatically installed by CAST Console. This is in place since october 2023.

For upgrade, if the Extension Strategy is not set to Auto updateyou can manually install the new release using the Application - Extensions interface.

What results can you expect?

Once the analysis/snapshot generation has completed, the following objects and  links will be displayed in CAST Enlighten:

Objects

The following object is displayed in CAST Enlighten:

IconType DescriptionWhen is this object created ?

JDBC SQL Queryan objects is created for each SQL query found and resolved in a JDBC method call 

The following link types are created by the JDBC extension, or by other extensions.

Link TypeCaller typeCallee typeMethods Supported / comment
callLinkJava MethodJDBC SQL Query 
java.sql.Statement
  • java.sql.Statement.executeQuery
  • java.sql.Statement.executeUpdate
  • java.sql.Statement.execute
  • java.sql.Statement.executeBatch
  • java.sql.Statement.executeLargeUpdate
  • java.sql.Statement.executeLargeBatch
java.sql.PreparedStatement
  • java.sql.PreparedStatement.executeQuery
  • java.sql.PreparedStatement.executeUpdate
  • java.sql.PreparedStatement.execute
  • java.sql.PreparedStatement.executeBatch
  • java.sql.PreparedStatement.executeLargeUpdate
  • java.sql.PreparedStatement.executeLargeBatch
java.sql.CallableStatement
  • java.sql.CallableStatement.executeQuery
  • java.sql.CallableStatement.executeUpdate
  • java.sql.CallableStatement.execute
  • java.sql.CallableStatement.executeBatch
  • java.sql.CallableStatement.executeLargeUpdate
  • java.sql.CallableStatement.executeLargeBatch
javax.sql.RowSet
  • javax.sql.RowSet.execute
useLinkJDBC SQL QueryTable, ViewCreated by SQL Analyzer when DDL source files are analyzed
callLinkJDBC SQL QueryProcedure
useLinkJDBC SQL QueryMissing TableCreated by Missing tables and procedures for JEE extension when the object is not analyzed
callLinkJDBC SQL QueryMissing Procedure

Example code scenarios


CRUD Operation for statement/preparedStatement
    public static void deleteRecord(Connection con, String query) {
        try {
            Statement st1 = con.createStatement();
            int countQuery = st1.executeUpdate("delete from cars where id = 6");
            System.out.println(
                    "\n Output of executeUpdate() without PrepareStatement--> \nRow affected by Query  " + countQuery);

            int countQuery_1 = st1.executeUpdate(query);
            System.out.println(
                    "\n Output of executeUpdate() with PrepareStatement--> \nRow affected by Query  " + countQuery_1);
        } catch (Exception e) {
            System.out.println("\n Exception");
        }
    }

CRUD Operation for Callable Statement 
    public static void callStoredProcedure(Connection con, String stored_procedure) {
        try {
            CallableStatement csmt = con.prepareCall(stored_procedure);
            ResultSet rs_call = csmt.executeQuery();
            while (rs_call.next()) {
                System.out.println("Company_name is " + rs_call.getString("Company_name"));
            }
        } catch (Exception e) {
            System.out.println("\n Exception");
        }

    }

CRUD Operation for RowSet
    public static void JdbcRowSet_method(String query) {
        try {
            JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
            rowSet.setUrl("jdbc:mysql://localhost:3306/vehicle");
            rowSet.setUsername("root");
            rowSet.setCommand(query);
            rowSet.setPassword("mysql");
            rowSet.execute();
            System.out.println("JDBC RowSet ");
            while (rowSet.next()) {
                // Generating cursor Moved event
                System.out.println("Id: " + rowSet.getInt(1));
                System.out.println("Company Name : " + rowSet.getString(2));
                System.out.println("Model name: " + rowSet.getString(3));
                System.out.println("Launch year : " + rowSet.getInt(4));
            }
        } catch (Exception e) {
            System.out.println("\n Exception");
        }

    }

CRUD Operation with Db2 JDBC drivers
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;

public class IBM_Server {
    public static void main(String[] argv) {
        try {
            Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("Please include Classpath  Where your DB2 Driver is located");
            e.printStackTrace();
            return;
        }
        System.out.println("DB2 driver is loaded successfully");
        Connection conn = null;
        boolean found = false;
        try {
            conn = DriverManager.getConnection("jdbc:db2:vehicle", "root", "mysql");
            if (conn != null) {
                System.out.println("DB2 Database Connected");
            } else {
                System.out.println("Db2 connection Failed ");
            }
            PreparedStatement pstmt = conn.prepareStatement("Select * from cars");
            ResultSet rset = pstmt.executeQuery();
            if (rset != null) {
                while (rset.next()) {
                    found = true;
                    System.out.println("Class Code: " + rset.getString("clcode"));
                    System.out.println("Name: " + rset.getString("name"));
                }
            }
            if (found == false) {
                System.out.println("No Information Found");
            }
        } catch (SQLException e) {
            System.out.println("DB2 Database connection Failed");
            e.printStackTrace();
            return;
        }
    }

}

Limitations

  • Objects will not be created if evaluation fails to resolve the necessary parameter.