动态SQL 编程语言使用函数连接数据库服务器,在运行时以字符串的形式构建交互查询 如JDBC和ODBC
嵌入式SQL 嵌入式SQL必须在编译时全部确定,提交给预处理器,预处理器提交SQL到数据库系统进行预编译和优化
JDBC java database connectivity
预编译语句可以解决SQL注入的问题
public static void connectExample(String userId,String password){
try {
Class.forName("Oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("", userId, password);
Statement stmt = conn.createStatement();
stmt.executeUpdate("update student set name ='Harry' where id =1");
ResultSet rset = stmt.executeQuery("select id,name from student where id =1");
while(rset.next()){
System.out.println("id: "+rset.getString("id")+",name: "+rset.getString("name"));
}
}catch(Exception e){
e.printStackTrace();
}
}
函数和过程
存储过程可以将业务逻辑持久化,提供给其他的业务进行调用。
函数
https://www.cnblogs.com/mafeng/p/7121473.html
CREATE FUNCTION func_name ( [func_parameter] ) //括号是必须的,参数是可选的
RETURNS type
[ characteristic ...] routine_body
CREATE FUNCTION 用来创建函数的关键字;
func_name 表示函数的名称;
func_parameters为函数的参数列表,参数列表的形式为:[IN|OUT|INOUT] param_name type
IN:表示输入参数;
OUT:表示输出参数;
INOUT:表示既可以输入也可以输出;
param_name:表示参数的名称;
type:表示参数的类型,该类型可以是MySQL数据库中的任意类型;
RETURNS type:语句表示函数返回数据的类型;
characteristic: 指定存储函数的特性,取值与存储过程时相同
MYSQL
Expressions 可以使用列值,NULL,MYSQL内置函数,用户自定义函数来写,其可以在SELECT,UPDATE,DELETE,ORDER BY,HAVING语句中使用。
创建函数时mysql提示:
Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
解决方法:
SET GLOBAL log_bin_trust_function_creators = 1;
Error Code: 1054. Unknown column 'employee_id' in 'where clause'
触发器
触发器是一条语句,当对数据库做响应的修改时,其被系统自动执行。
触发器可以实现未被SQL约束机制指定的某些完整性约束(比如未使用外键时保证字段值的一致性)