数据库DB
回家心急,走的时候匆忙也没和大家打声招呼,
回来后琐事也多,还是没能及时给大家拜年。
在此,weiking恭祝大家春节吉祥,鼠年喜事多。
初用HIBERNATE的人也许都遇到过性能问题,实现同一功能,用HIBERNATE与用JDBC性能相差十几倍很正常,如果不及早调整,很可能影响整个项目的进度。
大体上,对于HIBERNATE性能调优的主要考虑点如下:
Ø 数据库设计调整
Ø HQL优化
Ø API的正确使用(如根据不同的业务类型选用不同的集合及查询API)
Ø 主配置参数(日志,查询缓存,fetch_size, batch_size等)
Ø 映射文件优化(ID生成策略,二级缓存,延迟加载,关联优化)
Ø 一级缓存的管理
Ø 针对二级缓存,还有许多特有的策略
Ø 事务控制策略。
1、 数据库设计
a) 降低关联的复杂性
继续阅读其余的 3618 字
选自<<精通Hibernate:Java对象持久化技术详解>> 作者:孙卫琴 来源:www.javathinker.org
批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。以下程序直接通过Hibernate API批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段:
tx = session.beginTransaction();
Iterator customers=session.find("from Customer c where c.age>0").iterator();
while(customers.hasNext()){
Customer customer=(Customer)customers.next();
customer.setAge(customer.getAge()+1);
}
tx.commit();
session.close();
如果CUSTOMERS表中有1万条年龄大于零的记录,那么Session的find()方法会一下子加载1万个Customer对象到内存。当执行tx.commit()方法时,会清理缓存,Hibernate执行1万条更新CUSTOMERS表的update语句:
update CUSTOMERS set AGE=? …. where ID=i;
update CUSTOMERS set AGE=? …. where ID=j;
…&h
继续阅读其余的 6124 字
1005:创建表失败
1006:创建数据库失败
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1009:不能删除数据库文件导致删除数据库失败
1010:不能删除数据目录导致删除数据库失败
1011:删除数据库文件失败
1012:不能读取系统表中的记录
1020:记录已被其他用户修改
1021:硬盘剩余空间不足,请加大硬盘可用空间
1022:关键字重复,更改记录失败
1023:关闭时发生错误
1024:读文件错误
1025:更改名字时发生错误
1026:写文件错误
1032:记录不存在
继续阅读其余的 1013 字
字段lottery_code表示彩票号码,
status字段表示是否中奖,0未中,1是一等奖,2是二等奖,依次类推,
现在摇奖的号码是123456(假定彩票号码是6位数),
怎么写sql语句??更新彩票数据。
如数据库中已有数据 A买的彩票数123457
B的111115
C的是888888
本期摇奖号123456
那么 A中了5个数 应把status字段更新为2
B只中了1个 status字段更新为1
C没有任何匹配数 status更新0
(假设只有6个数,6个数一一对应为一等奖,status为1。有5个数一一对应为二等奖,status为2,依次类推。
且有顺序之分,也就是说1、2、3 和2、1、3匹配数为1)
不用在java写代码,只用sql语句怎么实现??
--------------------------------------------------------------------------------
% 代表零个或者多个任意字符
_ 代表一个任意字符
[] 指定范围内的任意单个字符
[^] 不在指定范围内的任意单个字符
带有匹配符的字符串必须使用引号引起来,例如下面的示例:
LIKE 'BR%'返回以“BR”开始的任意字符串。
LIKE 'Br%'返回以“Br”开始的任意字符中。
LIKE '%een'返回以“een”结束的任意字符串。
LIKE '%en%'返回包含“en”的任意字符串。
liKE 'en'返回以“en”结束的三个字符的字符串。
LIKE '[CK]%'返回以“C”或者“K”开始的任意字符串。
LIKE '[S-V]lng'返回长为四个字符的字符串,结尾是“ing”,开始是从S到V
LIKE 'M[^c]%'返回以“M”开始且第二个字符不是“c”的任意字符串。 注意:
使用LIKE运算符通常会导致SQL Server不对给定的表使用与之联系的索引。它告诉SQL server比较所指定的字符串并且找到与所提供的匹配符相匹配的任何内容。由于这种原固,不推荐在大型表上使用这种类型的搜索或者比较,至少应该提醒用户,系统寻找满足搜索标准的数据行时所需的等待时间非常重要。
用以上sql语句可以实现:
select fieldname from table_1 group by fieldname having count(*) > 1 ;
将count()函数放在having计算出每一个组的记录个数,如果该组的记录个数大于 1,则说明fieldname存在重复情况 (可以同时查看多个字段重复记录)
说明:Having和Where子句意义差不多,都是在其中加入查询条件, 区别是where用于查询整张表的所有字段, 而having中的查询只能用到group by中出现的字段,并且条件的判断是其于组中的记录.所以以上having count(*) 是计算每个组的记录个数
再举一个特别例子:
select fieldname from table_1 group by fieldname having fieldname in ('a', 'b');
以上也是正确的,只要having后面出现的条件查询用到的字段属于group by中的就行.
以上是所有odbc标准支持的聚集函数:(根据后台所用数据库不同有可能有更多的增强函数)
sum() 求和
max() 最大值
min() 最小值
avg() 平均数
count() 求记录个数
一、经典漏洞
'or' '='
这样的漏洞解决起来也是比较容易的,过滤用户名和密码即可,不过也常常被忽视。
二、验证用户权限漏洞
cookies保存在本地机子上记录用户的一些信息,顾在本地可以进行恶意修改
session保存在服务器上,较占用服务器资源。
防止此类漏洞的办法是进行双重验证。
三、垮站攻击漏洞
例子:<script>alert("test only alert dialog box")</script>
这仅仅是弹出一对话框,可想而知,挂马或者跳转其他站点便很容易实现。
此类漏洞如被黑客利用,后果很严重,首先受害者是浏览网页的用户。
解决方案:过滤 < > % ASCⅡ码等,简单的也可以通过限制表单长度解决。
继续阅读其余的 1208 字
用,就用的漂亮点。文章嘛,借花献佛喽。
