样本应用程序代码

下一节包含样本应用程序的 Java 和 C 代码。此代码需要一个连接字符串来表示 SQLConnect() 函数以连接至远程数据源。

连接字符串的格式为:

http://IPAddr:port/db2e/servlet/com.ibm.mobileservices.adapter.agent.AgentServlet?DB=mysample

as http://IPAddr:port/db2e/agent?DB=mysample 

其中 IPAddr:port 是服务器的 IP 地址和端口号。例如:

 http://192.168.0.11:8080/db2e/servlet/
 com.ibm.mobileservices.adapter.agent.AgentServlet?DB=mysample

int main(int argc, char * argv[])
{
	SQLHENV		henv;
	SQLHDBC		hdbc;
	SQLHSTMT	hstmt;
	SQLRETURN	rc;
	SQLCHAR		strSQL[] = "CALL db2e.MYPROC(?,?,?,?,?)";
	int			nInd4, nInd5;
	int			nSaving = 0, nChecking =0 ;
	int			nCmd =0, nAmount=0;
	SQLCHAR		strConnect[254];
 
	//****************************************************************
	//* Check input parameters
	//****************************************************************
	if ( argc < 4 ){
		printf("\nUsage : myClient AccountName Cmd Amount");
		printf("\n     cmd 1 : query balance");
		printf("\n     cmd 2 : Transfer from Saving to Checking");
		printf("\n     cmd 3 : Trnasfer from Checking to Saving");
		return (99);
	}
	nCmd = atoi(argv[2]);
	nAmount = atoi(argv[3]);
 
	//****************************************************************
	//* Allocate handles
	//****************************************************************
	rc = SQLAllocHandle( SQL_HANDLE_ENV, 
						SQL_NULL_HANDLE,
						&henv); //checkerror
	rc = SQLAllocHandle( SQL_HANDLE_DBC, 
						henv,
						&hdbc); //checkerror
	if (argc == 5){
		strcpy(strConnect,"http://");
		strcat(strConnect,argv[4]);
		strcat(strConnect,"/db2e/servlet/
             com.ibm.mobileservices.adapter.agent.AgentServlet?DB=mysample");
	}else{
		strcpy(strConnect,"http://127.0.0.1:8080/db2e/servlet/
             com.ibm.mobileservices.adapter.agent.AgentServlet?DB=mysample");
	}
 
	//****************************************************************
	//* Connect to remote database
	//****************************************************************
	rc = SQLConnect(hdbc,
		strConnect,
		SQL_NTS,
		"userex", SQL_NTS, 
		"userex", SQL_NTS  ); //checkerror
	rc = SQLAllocHandle( SQL_HANDLE_STMT,
						hdbc,
						&hstmt); //checkerror
	//****************************************************************
	//* Prepare, Bind , and Execute the statement
	//****************************************************************
	rc = SQLPrepare(hstmt,strSQL, SQL_NTS); //checkerror
	rc = SQLBindParameter(hstmt,
			1,
			SQL_PARAM_INPUT,
			SQL_C_CHAR,
			SQL_CHAR,
			0,
			0,
			(SQLPOINTER)argv[1],
			0,
			NULL ); //checkerror
	rc = SQLBindParameter(hstmt,
			2,
			SQL_PARAM_INPUT,
			SQL_C_LONG,
			SQL_INTEGER,
			0,
			0,
			(SQLPOINTER)&nCmd,
			sizeof(int),
			NULL); //checkerror
	rc = SQLBindParameter(hstmt,
			3,
			SQL_PARAM_INPUT,
			SQL_C_LONG,
			SQL_INTEGER,
			0,
			0,
			(SQLPOINTER)&nAmount,
			sizeof(int),
			NULL ); //checkerror
	rc = SQLBindParameter(hstmt,
			4,
			SQL_PARAM_OUTPUT,
			SQL_C_LONG,
			SQL_INTEGER,
			0,
			0,
			(SQLPOINTER)&nSaving,
			sizeof(int),
			&nInd4 ); //checkerror
	rc = SQLBindParameter(hstmt,
			5,
			SQL_PARAM_OUTPUT,
			SQL_C_LONG,
			SQL_INTEGER,
			0,
			0,
			(SQLPOINTER)&nChecking,
			sizeof(int),
			&nInd5 ); //checkerror
	rc = SQLExecute(hstmt); //checkerror
	//****************************************************************
	//* Print the balance
	//****************************************************************
	printf("\nSaving = %d",nSaving);
	printf("\nChecking = %d",nChecking);
 
	SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
	SQLDisconnect(hdbc);
	SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
	SQLFreeHandle(SQL_HANDLE_ENV, henv);
	return 0;
}
 

以 Java 编写的样本应用程序代码:

以下 Java 代码与 C 样本具有相同的功能。

import java.sql.*;
 
class MyClient{
   public static void main(String [] args){
 
   if (args.length != 3){
            System.out.println("Usage java MyClient AccountName Cmd Amount");
            System.out.println("  cmd 1 : Query balance.");
            System.out.println("  cmd 2 : Transfer from Saving to Checking.");
            System.out.println("  cmd 3 : Transfer from Checking to Saving.");
            System.exit(-1);
        }
 
        String driver = "com.ibm.db2e.jdbc.DB2eDriver";
        String url = "jdbc:db2e:http://9.30.40.21:8080/db2e/servlet/
             com.ibm.mobileservices.adapter.agent.AgentServlet?DB=mysample";
        String sql = "Call db2e.MYPROC(?,?,?,?,?)";
 
       try{
            Class.forName(driver); 
            //****************************************************************
	//* Connect to remote database
            //****************************************************************
            Connection con = DriverManager.getConnection(url,"userex","userex"); 
 
            CallableStatement cst =  con.prepareCall(sql);
 
            //****************************************************************
            //* Register the output parameters
            //****************************************************************
            cst.registerOutParameter (4, Types.INTEGER);
            cst.registerOutParameter (5, Types.INTEGER);
 
            //****************************************************************
            //* Set input parameters
            //****************************************************************
            cst.setString (1, args[0]);
            cst.setString (2, args[1]);
            cst.setString (3, args[2]);
 
            //****************************************************************
            //* Call the Remote Stored Procedure
            //****************************************************************
            cst.execute ();
 
            //****************************************************************
            //* Retrieve output
            //****************************************************************
            System.out.println("\nSaving = " + cst.getInt(4));
            System.out.println("\nChecking = " + cst.getInt(5));
 
            cst.close();
            con.close();
        }catch (SQLException sqlEx){
            while(sqlEx != null){
                System.out.println("SQLERROR: \n" + sqlEx.getErrorCode() + 
                        ", SQLState: " + sqlEx.getSQLState() + 
                        ", Message: " + sqlEx.getMessage() +
                        ", Vendor: " + sqlEx.getErrorCode() );
                sqlEx = sqlEx.getNextException();
            }
      }catch(Exception ex){
            ex.printStackTrace();
        }
    } 
}

相关概念

相关任务

相关参考