下一节包含样本应用程序的 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(); } } }
相关概念
相关任务
相关参考