Java对数据库进行操作的SQL字符串就是一个嵌入式的SQL语言,Java被称作宿主语言,即主语言。那么程序如何知道哪个是Java程序语言,哪个是SQL语言呢?
区分嵌入式SQL语言和主语言的方法是作语法标记,不同的主语言对嵌入式SQL语言有不同的语法格式。如何让程序识别呢?通过预编译方法进行处理,DBMS使用预处理程序对源程序进行扫描,识别出嵌入式SQL语句,编译成主语言的函数调用语句进行调用。
一般流程:预处理程序扫描出SQL语言----->转换为函数调用的主语言程序----->主语言编译程序编译处理------>目标程序。
经过以上过程,主语言中相关的SQL语句被封装到了一个函数内部,相当于一个主语言流程的一部分,那么主语言程序何时调用这个函数呢?主语言如何控制程序的逻辑流程?什么时候执行SQL,什么时候不执行呢?———-主语言与嵌入式SQL语言之间的通信。
通信解决三个问题:
1)什么时候调用SQL的函数?
SQL通信区发挥此作用,内部封装SQL的状态信息,并可将状态信息发出给主语言程序,使得主语言程序能准确控制流程。
2)Java中的PreparedStatement类如何设参数的?
嵌入式SQL语句通过主变量(SQL语句中使用的主语言程序变量)来输入和输出数据。所以有输入主变量和输出主变量;输入主变量即主语言程序用它来对SQL语句设定参数,SQL语句引用此参数(动态参数:用“?”占位);输出主变量即SQL语句用来将操作数据库后的数据传给主语言程序,由主语言程序引用数据,一般返回的数据是查询操作的结果。
3)查询数据的结果交给主语言程序处理?
SQL语句使用输出主变量进行输出,当输出的结果是多条时即结果集(例如Java中的ResultSet类),这时就要用到游标的概念。由于SQL查询是面向集合的,而主语言程序是面向记录的(例如Java用类来封装一条记录,多条记录需将对象用容器存储),所以游标还是作用很大的。
游标是指一个数据缓冲区,用来存放SQL语句的执行结果。每一个游标区都有一个名字,相当于一个查询结果。然后通过游标在一个游标区内逐一获取记录赋给输出主变量,交给主语言处理。
所以用嵌入式SQL语句和主语言程序进行编程的流程为(以Java为例):
1 声明SQL主变量
Java具体编程即设置动态参数
String sql=”insert into student values(?,?,?) where
id=?”;
2 准备SQL语句并给动态参数赋值
使用Statement的相关类,一般给动态参数赋值使用PrearedStatement类
PreparedStatement ps=con.prepareStatement(sql); //准备SQL语句
ps.setObject(1,”张三”); //给动态参数赋值
3 执行SQL语句
ps.executeUpdate(sql);
4 关闭连接
Connection Statement ResultSet(即关闭游标)
文章总结:了解Java操纵SQL语句的底层原理。