本文共 2024 字,大约阅读时间需要 6 分钟。
主要有,存储过程、函数、时间、触发器
优点:在代码中用Call调用。
比较适合做统计,而不适合日常的插入和查询,感觉跟事件配合起来做定时任务来 计算一些归档类的,统计类的内容比较合适在行操作的时候,提供一些触发点,可以定义被触发后执行sql语句。一般可以有一下的用法,或者需要注意的地方:
// 先做一DB_LINK ,link_nameCREATE OR REPLACE TRIGGER tg_nameBEFORE insertON t_sb_infoREFERENCING OLD AS OLD NEW AS NEWFOR EACH ROW BEGIN insert into t_table1@link_name select *from t_table1 where year=:new.year and month=:new.month; insert into t_table2@link_name select *from t_table2 where year=:new.year and month=:new.month;END;
这个就是Java里面的PreparedStatement了。
PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?");pstmt.setString(1, "Hi");for (int i = 0; i < 10; i++) { pstmt.setInt(2, i);int rowCount = pstmt.executeUpdate();}
这样一个更新的sql语句分成了两部,第一步是把带?的sql语句发送到服务器做预编译。第二步就是设置参数并且执行了。
这样做会有如下的好处:
使用绑定变量还能够额外获得一个好处,即能够防止SQL注入攻击。
比如登陆的时候我们的代码是这样的:String sql = "SELECT COUNT(*) FROM user WHERE username='"+ username+"' AND password ='"+ password +"';"// 如果password 传入 ' OR '1'='1这个时候sql就变成了:// SELECT COUNT(*) FROM user WHERE username='wzj' AND password = '' OR '1'='1'这个时候就是查询所有,就相当于永远为true了。
使用绑定变量就可以有效的避免这个问题。
转载地址:http://ikogx.baihongyu.com/