欢迎来到天天文库
浏览记录
ID:49265133
大小:199.50 KB
页数:18页
时间:2020-02-02
《TimesTen应用开发最佳实践.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、TimesTen应用开发最佳实践内容安排ODBC程序结构如何使用ODBC句柄实现SQLStatements异常捕捉性能方面考虑其他建议©2006OracleCorporation–ProprietaryandConfidentialODBC程序流程SQLFreeStmtSQLDisconnectSQLFreeConnectSQLFreeEnvSQLAllocEnvSQLAllocConnectSQLConnectSQLAllocStmtProcessSQLStatementsReceiveResultsCLOSEo
2、ptionDROPoption©2006OracleCorporation–ProprietaryandConfidentialODBC应用的句柄Environment句柄初始化ODBC调用接口ODBC方法:SQLAllocEnv()和SQLFreeEnv()Connection句柄存储数据源连接信息ODBC方法:SQLAllocConnect()和SQLFreeConnect()隐式分配一个特定的Environment句柄Statement句柄存储SQLstatement信息ODBC方法:SQLAllocStmt
3、()和SQLFreeStmt()隐式分配一个特定的Connection句柄©2006OracleCorporation–ProprietaryandConfidential使用ODBC应用句柄statement句柄只能在初始阶段分配一次,并在结束阶段释放.在使用多线程编程中,statement和connection句柄应该属于线程结构体内.句柄不能用于多线程并发运行,如果想实现在多个线程在不同的时间访问同一个句柄,那么应用必须通过一些信号量等方式的机制来实现。©2006OracleCorporation–Propr
4、ietaryandConfidentialSQLStatement执行流程SQLPrepareSQLBindParameterSQLExecuteYesInitializeTerminateIfmoreprocessingSQLFreeStmtIfrepeatNoSQLTransactRepeatableExecution?SQLBindParameterSQLExecDirect©2006OracleCorporation–ProprietaryandConfidential提高SQL性能只需要Prepare或者
5、编译SQLstatements及内建procedures一次,然后执行或者调用多次。尽量使用参数化statements,在运行期使用变量方式来应用SQLstatements和内建procedure。一旦statement被prepared,尽快绑定参数和列变量。在程序开始的时候申明/分配一次需要用到的变量。变量属于全局范围的。如果使用到多线程,变量申明在线程内部。©2006OracleCorporation–ProprietaryandConfidential绑定参数缓存使用prepare参数化SQLstateme
6、nts,并且使用不同的值执行多次使用通配符作为不同值的代替标志通常使用(?)或者:参数的值存储在应用程序的缓存区内使用SQLBindParameter()来将缓存绑定到参数如果需要赋值NULL到参数,将参数长度设置(SQLBindParameter()最后一个参数)为SQL_NULL_DATA每个参数必须有一个相应的C和SQL数据类型参数里面的值可以在执行SQLExecute()后获得。©2006OracleCorporation–ProprietaryandConfidenti
7、al查询通配符示例SELECTA,B,CFROMT1WHEREX=?ANDY=?ANDZ=?;SELECTA,B,CFROMT1WHEREX=:UserIdANDY=:LocationANDZ=:TimeStamp;SELECTA,B,CFROMT1WHEREX=:UserIdANDY=:LocationANDZ=:UserId;©2006OracleCorporation–ProprietaryandConfidential绑定参数缓存示例#defineCHARLEN20SQLINTEGERintBuf,null
8、Data=SQL_NULL_DATA;SQLCHARcharBuf[CHARLEN];SQLFLOATfloatBuf;rc=SQLPrepare(hStmt,(SQLCHAR*)“insertintostudent.tabvalues(?,?,?)”,SQL_NTS);rc=SQLBindParameter(hStmt,1,SQL_PARAM_INPUT,
此文档下载收益归作者所有