Oracle 11g Release 2 Pro*C/C++程序员指南

需积分: 5 0 下载量 10 浏览量 更新于2024-06-25 收藏 10.7MB PDF 举报
"Pro*C/C++ Programmer's Guide 11g Release 2 (11.2) 是一本关于Oracle Pro*C/C++编程的指南,适用于Oracle数据库11g第二版。该文档由Oracle公司及其关联公司在1996年至2009年期间创作,主要作者是Simon Watt,同时有多位贡献者参与编写。本书详细介绍了如何使用Pro*C/C++进行数据库应用开发,包括预编译器的使用、数据库接口的调用等技术内容。" 在Oracle的Pro*C/C++中,程序员可以使用C或C++语言来编写与数据库交互的应用程序。Pro*C/C++是一种预编译器,它将C或C++源代码中的SQL语句和PL/SQL块转换为标准的C或C++代码,然后可以进一步编译和链接,生成可以直接运行的程序。以下是Pro*C/C++的一些关键知识点: 1. **预编译器**:Pro*C/C++预编译器是整个过程的核心,它处理嵌入在C/C++源代码中的SQL和PL/SQL语句,将它们转化为C/C++函数调用,从而使得应用程序能够与数据库进行交互。 2. **SQL语法**:Pro*C/C++支持标准的SQL语法,允许开发者在C/C++代码中直接执行查询、插入、更新和删除等操作。 3. **绑定变量**:在Pro*C/C++中,可以使用绑定变量来动态传递SQL语句的参数,提高代码的可复用性和安全性。 4. **游标**:通过游标,开发者可以逐行处理查询结果,这在处理大量数据时非常有用。 5. **PL/SQL支持**:除了SQL,Pro*C/C++还支持Oracle的PL/SQL过程和函数的调用,使得在C/C++代码中可以利用PL/SQL的强大功能。 6. **错误处理**:Pro*C/C++提供了错误处理机制,如`EXEC SQL WHENEVER`语句,用于捕获和处理在执行SQL语句时可能出现的错误。 7. **内存管理**:由于Pro*C/C++与C/C++紧密结合,开发者需要理解如何正确地管理内存,特别是在处理数据库结果集时。 8. **连接管理**:连接到数据库通常通过`OCISessionPool`或`OCILogon`函数进行,这涉及到数据库连接池的概念,以优化资源利用率。 9. **事务管理**:在Pro*C/C++中,可以通过SQL的`COMMIT`和`ROLLBACK`语句,或者使用`OCITrans`系列函数来控制事务的提交和回滚。 10. **性能优化**:Pro*C/C++允许开发者通过设置编译选项和使用优化的API调用来提高应用程序的性能。 11. **代码移植性**:尽管Pro*C/C++与特定的数据库紧密关联,但通过遵循标准的C/C++编程实践,可以提高代码在不同平台上的可移植性。 "Pro*C/C++ Programmer's Guide 11g Release 2 (11.2)"是一本全面介绍如何使用Pro*C/C++进行Oracle数据库应用开发的权威指南,涵盖了从基本概念到高级特性的各个方面,对于希望在C/C++环境中开发高效、可靠数据库应用的开发者来说,是一份重要的参考资料。

package com.ischoolbar.programmer.controller; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import com.ischoolbar.programmer.entity.Clazz; import com.ischoolbar.programmer.entity.Grade; import com.ischoolbar.programmer.page.Page; import com.ischoolbar.programmer.service.ClazzService; import com.ischoolbar.programmer.service.GradeService; import com.ischoolbar.programmer.util.StringUtil; /** * 班级信息管理 * @author llq * */ @RequestMapping("/clazz") @Controller public class ClazzController { @Autowired private GradeService gradeService; @Autowired private ClazzService clazzService; /** * 班级列表页 * @param model * @return */ @RequestMapping(value="/list",method=RequestMethod.GET) public ModelAndView list(ModelAndView model){ model.setViewName("clazz/clazz_list"); List<Grade> findAll = gradeService.findAll(); model.addObject("gradeList",findAll ); model.addObject("gradeListJson",JSONArray.fromObject(findAll)); return model; }给这段代码加上注释

125 浏览量

package com.ischoolbar.programmer.interceptor; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import com.ischoolbar.programmer.entity.User; /** * 登录过滤拦截器 * @author llq * */ public class LoginInterceptor implements HandlerInterceptor{ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { // TODO Auto-generated method stub } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { // TODO Auto-generated method stub } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { // TODO Auto-generated method stub String url = request.getRequestURI(); //System.out.println("进入拦截器,url = " + url); Object user = request.getSession().getAttribute("user"); if(user == null){ //表示未登录或者登录状态失效 System.out.println("未登录或登录失效,url = " + url); if("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){ //ajax请求 Map<String, String> ret = new HashMap<String, String>(); ret.put("type", "error"); ret.put("msg", "登录状态已失效,请重新去登录!"); response.getWriter().write(JSONObject.fromObject(ret).toString()); return false; } response.sendRedirect(request.getContextPath() + "/system/login"); return false; } return true; } }给代码加上注释

137 浏览量