61阅读

材料力学习题详细解答-秦九韶算法与K进制练习题(含详细解答)

发布时间:2017-09-27 所属栏目:解方程练习题及答案

一 : 秦九韶算法与K进制练习题(含详细解答)

秦九韶与k进制练习题

一.选择题(共16小题)

1.把77化成四进制数的末位数字为( )

A.4 B.3 C.2 D.1

2.用秦九韶算法求多项式f(x)=x+2x+x﹣3x﹣1,当x=2时的值,则 v3=( )

A.4 B.9 C.15 D.29

3.把67化为二进制数为( )

A.110000 B.1011110 C.1100001 D.1000011

4.用秦九韶算法计算多项式f(x)=3x+4x+5x+6x+7x+8x+1当x=0.4时的值时,需要做乘法和加法的次数分别是( )

A.6,6 B.5,6 C.5,5 D.6,5

5.使用秦九韶算法计算x=2时f(x)=6x+4x﹣2x+5x﹣7x﹣2x+5的值,所要进行的乘法和加法的次数分别为( )

A.6,3 B.6,6 C.21,3 D.21,6

6.把27化为二进制数为( )

A.1011(2) B.11011(2)

56543265432432C.10110(2) 432D.10111(2) 7.用秦九韶算法计算多项式f(x)=5x+4x+3x﹣2x﹣x﹣1在x=﹣4时的值时,需要进行的乘法、加法的次数分

别是( )

A.14,5 B.5,5 C.6,5 D.7,5

8.二进制数11001001(2)对应的十进制数是( )

A.401 B.385 C.201 D.258

9.小明中午放学回家自己煮面条吃,有下面几道工序:①洗锅盛水2分钟;②洗菜6分钟;③准备面条及佐料2分钟;④用锅把水烧开10分钟;⑤煮面条和菜共3分钟.以上各道工序,除了④之外,一次只能进行一道工序.小明要将面条煮好,最少要用( )分钟.

A.13 B.14 C.15 D.23

10.用秦九韶算法在计算f(x)=2x+3x﹣2x+4x﹣6时,要用到的乘法和加法的次数分别为( )

A.4,3 B.6,4 C.4,4 D.3,4

11.用秦九韶算法求多项式f(x)=1+2x+x﹣3x+2x在x=﹣1时的值,v2的结果是( )

A.﹣4 B.﹣1 C.5 D.6

12.下列各数85(9)、210(6)、1000(4)、111111(2)中最大的数是( )

A.85(9) B.210(6) C.1000(4) D.111111(2) 234432

秦九韶 秦九韶算法与K进制练习题(含详细解答)

13.十进制数89化为二进制的数为( )

A.1001101(2) B.1011001(2) C.0011001(2) D.1001001(2)

14.烧水泡茶需要洗刷茶具(5min)、刷水壶(2min)、烧水(8min)、泡茶(2min)等个步骤、从下列选项中选最好的一种算法( )

A.第一步:洗刷茶具;第二步:刷水壶;第三步:烧水;第四步:泡茶 B.第一步:刷水壶;第二步:洗刷茶具;第三步:烧水;第四步:泡茶 C.第一步:烧水;第二步:刷水壶;第三步:洗刷茶具;第四步:泡茶 D.第一步:烧水;第二步:烧水的同时洗刷茶具和刷水壶;第三步:泡茶

15.在下列各数中,最大的数是( )

A.85(9) B.210(6)

16.把23化成二进制数是( )

A.00110 B.10111

二.填空题(共11小题) C.1000(4) D.11111(2) C.10101 D.11101

17.用秦九韶算法求多项式f(x)=12+35x﹣8x+79x+6x+5x+3x在x=﹣4的值时,其中V1的值= _________ .

18.把5进制的数412(5)化为7进制是 _________ .

19.用秦九韶算法计算多项式f(x)=8x+5x+3x+2x+1在x=2时的值时,v2=.

20.用秦九韶算法计算多项式f(x)=3x+4x+5x+6x+7x+8x+1当x=0.4时的值时,至多需要做乘法和加法的次数分别是 _________ 和 _________ .

21.军训基地购买苹果慰问学员,已知苹果总数用八进位制表示为abc,七进位制表示为cba,那么苹果的总数用十进位制表示为 _________ .

22.若六进制数Im05(6)(m为正整数)化为十进数为293,则m= _________ .

23.用秦九韶算法求多项式f(x)=5x+2x+3.5x﹣2.6x+1.7x﹣0.8当x=5时的值的过程中v3=.

24.完成下列进位制之间的转化:1234=(4).

25.把十进制数51化为二进制数的结果是

26.进制转化:403(6)= _________

(8)23456432654325432.

27.完成右边进制的转化:1011(2)= _________ (10)= _________ (8).

三.解答题(共3小题)

3228.将多项式x+2x+x﹣1用秦九韶算法求值时,其表达式应写成

29.写出将8进制数23760转化为7进制数的过程.

30.已知一个5次多项式为f(x)=4x﹣3x+2x+5x+1,用秦九韶算法求这个多项式当x=2时的值.

532

秦九韶 秦九韶算法与K进制练习题(含详细解答)

答案与评分标准

一.选择题(共16小题)

1.把77化成四进制数的末位数字为( )

A.4 B.3 C.2 D.1

考点:排序问题与算法的多样性。(www.61k.com]

专题:计算题。

分析:利用“除k取余法”是将十进制数除以5,然后将商继续除以4,直到商为0,然后将依次所得的余数倒序排列即可得到答案.

解答:解:∵77÷4=19…1

19÷4=4…3

4÷4=1…0

1÷4=0…1

故77(10)=1031(4)末位数字为1.

故选D.

点评:本题考查的知识点是十进制与其它进制之间的转化,其中熟练掌握“除k取余法”的方法步骤是解答本题的关键.

2.用秦九韶算法求多项式f(x)=x+2x+x﹣3x﹣1,当x=2时的值,则 v3=( )

A.4 B.9 C.15 D.29

考点:排序问题与算法的多样性。

分析:由秦九韶算法的规则对多项式变形,求出,再代入x=2计算出它的值,选出正确选项

432解答:解:由秦九韶算法的规则f(x)=x+2x+x﹣3x﹣1=(((x+2)x+1)x﹣3)x﹣1,

∴v3=((x+2)x+1)x﹣3

又x=2,可得v3=((2+2)2+1)2﹣3=15

故选C.

点评:本题考查秦九韶算法,解题的关键是理解秦九韶算法的原理,得出v3的表达式,秦九韶算法是求多项值的一个较简便易行的算法,在平时求多项式的值时加利用可以简单化计算

3.把67化为二进制数为( )

A.110000 B.1011110 C.1100001 D.1000011

考点:排序问题与算法的多样性。

专题:计算题。

分析:利用“除k取余法”是将十进制数除以2,然后将商继续除以2,直到商为0,然后将依次所得的余数倒序排列即可得到答案.

解答:解:67÷2=33…1

33÷2=16…1

16÷2=8…0

8÷2=4…0

4÷2=2…0

2÷2=1…0

1÷2=0…1

故67(10)=1000011(2)

故选D.

点评:本题考查的知识点是十进制与其它进制之间的转化,其中熟练掌握“除k取余法”的方法步骤是解答本题的关键.

4.用秦九韶算法计算多项式f(x)=3x+4x+5x+6x+7x+8x+1当x=0.4时的值时,需要做乘法和加法的次数分别是( )

65432432

秦九韶 秦九韶算法与K进制练习题(含详细解答)

A.6,6 B.5,6 C.5,5 D.6,5

考点:排序问题与算法的多样性。[www.61k.com)

专题:计算题。

分析:把所给的多项式写成关于x的一次函数的形式,依次写出,得到最后结果,从里到外进行运算,结果有6次乘法运算,有6次加法运算,本题也可以不分解,直接从最高次项的次数直接得到结果.

65432解答:解:∵f(x)=3x+4x+5x+6x+7x+8x+1

5432=(3x+4x+5x+6x+7x+8)x+1

432=[(3x+4x+5x+6x+7)x+8]+1

={{{[(3x+4)x+5]x+6}x+7}x+8}x+1

∴需要做6次加法运算,6次乘法运算,

故选A.

点评:本题考查用秦九韶算法进行求多项式的值的运算,不是求具体的运算值而是要我们观察乘法和加法的运算次数,本题是一个基础题.

5.使用秦九韶算法计算x=2时f(x)=6x+4x﹣2x+5x﹣7x﹣2x+5的值,所要进行的乘法和加法的次数分别为( )

A.6,3 B.6,6 C.21,3 D.21,6

考点:排序问题与算法的多样性。

专题:计算题。

分析:根据秦九韶算法求多项式的规则变化其形式,把(fx)=6x+4x﹣2x+5x﹣7x﹣2x+5等到价转化为(((((6x+5)x﹣2)x+5)x﹣7)x﹣2)x+5,就能求出结果.

解答:解:∵f(x)=6x+4x﹣2x+5x﹣7x﹣2x+5=(((((6x+5)x﹣2)x+5)x﹣7)x﹣2)x+5

∴需做加法与乘法的次数都是6次,

故选B.

点评:本题考查算法的多样性,正确理解秦九韶算法求多项式的原理是解题的关键,本题是一个比较简单的题目,运算量也不大,只要细心就能够做对.

6.把27化为二进制数为( )

A.1011(2) B.11011(2) C.10110(2) D.10111(2)

考点:排序问题与算法的多样性。

专题:计算题。

分析:利用“除k取余法”是将十进制数除以2,然后将商继续除以2,直到商为0,然后将依次所得的余数倒序排列即可得到答案.

解答:解:27÷2=13…1

13÷2=6…1

6÷2=3…0

3÷2=1…1

1÷2=0…1

故27(10)=11011(2)

故选B.

点评:本题考查的知识点是十进制与其它进制之间的转化,其中熟练掌握“除k取余法”的方法步骤是解答本题的关键.

7.用秦九韶算法计算多项式f(x)=5x+4x+3x﹣2x﹣x﹣1在x=﹣4时的值时,需要进行的乘法、加法的次数分别是( )

A.14,5 B.5,5 C.6,5 D.7,5

考点:排序问题与算法的多样性。

专题:计算题。

5432分析:由秦九韶算法的原理,可以把多项式f(x)=5x+4x+3x﹣2x﹣x﹣1变形计算出乘法与加法的运算次数.

5432654326543265432

秦九韶 秦九韶算法与K进制练习题(含详细解答)

解答:解:多项式f(x)=5x+4x+3x﹣2x﹣x﹣1=((((5x+4)x+3)x﹣2)x﹣1)x﹣1不难发现要经过5次乘法5次加法运算.

故需要做乘法和加法的次数分别为:5、5

故选B.

点评:本题考查秦九韶算法,考查在用秦九韶算法解题时一共会进行多少次加法和乘法运算,是一个基础题,解题时注意最后加还是不加常数项,可以直接看出结果.

8.二进制数11001001(2)对应的十进制数是( )

A.401 B.385 C.201 D.258

考点:排序问题与算法的多样性。(www.61k.com]

专题:计算题。

分析:根据二进制和十进制之间的互化原则,需要用二进制的最后一位乘以2的0次方,以此类推,写出一个代数式,得到结果.

解答:解:二进制数11001001(2)对应的十进制数是1×2+1×2+1×2+1×2=201

故选C.

点评:本题考查二进制和十进制之间的互化,本题解题的关键是理解两者之间的关系,不仅是这两种进位制之间的互化,既是还有其他的互化也可以用类似方法求解.

9.小明中午放学回家自己煮面条吃,有下面几道工序:①洗锅盛水2分钟;②洗菜6分钟;③准备面条及佐料2分钟;④用锅把水烧开10分钟;⑤煮面条和菜共3分钟.以上各道工序,除了④之外,一次只能进行一道工序.小明要将面条煮好,最少要用( )分钟.

A.13 B.14 C.15 D.23

考点:排序问题与算法的多样性。

专题:操作型。

分析:欲使得小明要将面条煮好,最少要用多少分钟,就是要考虑适当安排工序,既不影响结果又要时间最少即可. 解答:解:①洗锅盛水2分钟+④用锅把水烧开10分钟(同时②洗菜6分钟+③准备面条及佐料2分钟)+⑤煮面条和菜共3分钟

=15分钟.

故选C.

点评:本题主要考查了排序问题与算法的多样性、有效性及合理性,属于基础题.

10.用秦九韶算法在计算f(x)=2x+3x﹣2x+4x﹣6时,要用到的乘法和加法的次数分别为( )

A.4,3 B.6,4 C.4,4 D.3,4

考点:排序问题与算法的多样性。

专题:计算题。

432分析:由秦九韶算法能够得到f(x)=2x+3x﹣2x+4x﹣6=(((2x+3)x﹣2)x+4)x﹣6,由此能够求出结果.

432解答:解:∵f(x)=2x+3x﹣2x+4x﹣6

=(((2x+3)x﹣2)x+4)x﹣6,

∴用到的乘法的次数为4次,用到的加法的次数为4次.

故选C.

点评:本题考查秦九韶算法的应用,是基础题.解题时要认真审题,仔细解答.

11.用秦九韶算法求多项式f(x)=1+2x+x﹣3x+2x在x=﹣1时的值,v2的结果是( )

A.﹣4 B.﹣1 C.5 D.6

考点:排序问题与算法的多样性。

专题:计算题。

分析:本题考查秦九韶算法,考查在用秦九韶算法解题时进行的加法和乘法运算,是一个基础题,先计算v1=anx+an﹣1;再计算v2=v1x+an﹣2,即得.

解答:解:v1=2×(﹣1)﹣3=﹣5;

2344320367

秦九韶 秦九韶算法与K进制练习题(含详细解答)

∴v2=(﹣5)×(﹣1)+1=6,

故选D.

点评:秦九韶算法的设计思想:一般地对于一个n次多项式f(x)=anx+an﹣1x+an﹣2x+…+a1x+a0,首先改写成如下形式:f(x)=(…(anx+an﹣1)x+an﹣2)x+…+a1)x+a0,再计算最内层括号内一次多项式的值,即v1=anx+an﹣1;然后由内向外逐层计算一多项式的值,即v2=v1x+an﹣2,v3=v2x+an﹣3,…,vn=vn﹣1x+a0.

12.下列各数85(9)、210(6)、1000(4)、111111(2)中最大的数是( )

A.85(9) B.210(6) C.1000(4) D.111111(2)

考点:排序问题与算法的多样性。(www.61k.com)

专题:计算题。

分析:由题设条件,可以把这几个数化为十进制数,再比较它们的大小,选出正确选项

解答:解:85(9)=8×9+5×1=77;

210(6)=2×36+1×6=78;

31000(4)=1×4=64;

543210111111(2)=1×2+1×2+1×2+1×2+1×2+1×2=32+16+8+4+2+1=63

由上计算知最大的数是210(6),

故选B

点评:本题考查排序问题与算法的多样性,解题的关键是掌握住其它进位制数转化为十进制数的方法,统一进位制,再作比较

13.十进制数89化为二进制的数为( )

A.1001101(2) B.1011001(2) C.0011001(2) D.1001001(2)

考点:排序问题与算法的多样性。

专题:计算题。

分析:利用“除k取余法”是将十进制数除以2,然后将商继续除以2,直到商为0,然后将依次所得的余数倒序排列即可得到答案.

解答:解:89÷2=44…1

44÷2=22…0

22÷2=11…0

11÷2=5…1

5÷2=2…1

2÷2=1…0

1÷2=0…1

故89(10)=1011001(2)

故选B.

点评:本题考查的知识点是十进制与其它进制之间的转化,其中熟练掌握“除k取余法”的方法步骤是解答本题的关键.

14.烧水泡茶需要洗刷茶具(5min)、刷水壶(2min)、烧水(8min)、泡茶(2min)等个步骤、从下列选项中选最好的一种算法( )

A.第一步:洗刷茶具;第二步:刷水壶;第三步:烧水;第四步:泡茶 B.第一步:刷水壶;第二步:洗刷茶具;第三步:烧水;第四步:泡茶 C.第一步:烧水;第二步:刷水壶;第三步:洗刷茶具;第四步:泡茶 D.第一步:烧水;第二步:烧水的同时洗刷茶具和刷水壶;第三步:泡茶

考点:排序问题与算法的多样性。

专题:计算题。

分析:欲要选择选项中选最好的一种算法,就是要考虑适当安排工序,既不影响结果又要时间最少即可. 解答:解:烧水8分钟+(同时洗刷茶具和刷水壶泡茶共2分钟

=10分钟.用时最少.

故选D.

nn﹣1n﹣2

秦九韶 秦九韶算法与K进制练习题(含详细解答)

点评:本题主要考查了排序问题与算法的多样性、有效性及合理性,属于基础题.

15.在下列各数中,最大的数是( )

A.85(9) B.210(6) C.1000(4) D.11111(2)

考点:排序问题与算法的多样性。(www.61k.com)

专题:计算题。

分析:欲找四个中最大的数,先将它们分别化成十进制数,后再比较它们的大小即可.

解答:解:85(9)=8×+5=77;

2210(6)=2×6+1×6=78;

31000(4)=1×4=64;

4321011111(2)=2+2+2+2+2=31.

故210(6)最大,

故选B.

点评:本题考查的知识点是算法的概念,由n进制转化为十进制的方法,我们只要依次累加各位数字上的数×该数位的权重,即可得到结果.

16.把23化成二进制数是( )

A.00110 B.10111 C.10101 D.11101

考点:排序问题与算法的多样性。

专题:计算题。

分析:利用“除k取余法”是将十进制数除以2,然后将商继续除以2,直到商为0,然后将依次所得的余数倒序排列即可得到答案.

解答:解:23÷2=11…1

11÷2=5…1

5÷2=2…1

2÷2=1…0

1÷2=0…1

故23(10)=10111(2)

故选B

点评:本题考查的知识点是十进制与其它进制之间的转化,其中熟练掌握“除k取余法”的方法步骤是解答本题的关键.

二.填空题(共11小题)

2345617.用秦九韶算法求多项式f(x)=12+35x﹣8x+79x+6x+5x+3x在x=﹣4的值时,其中V1的值= ﹣7 .

考点:排序问题与算法的多样性。

专题:计算题。

分析:首先把一个n次多项式f(x)写成(…((a[n]x+a[n﹣1])x+a[n﹣2])x+…+a[1])x+a[0]的形式,然后化简,求n次多项式f(x)的值就转化为求n个一次多项式的值,求出V3的值.

(n﹣1)n解答:解:把一个n次多项式f(x)=a[n]x+a[n﹣1]x+…+a[1]x+a[0]改写成如下形式:

(n﹣1)nf(x)=a[n]x+a[n﹣1]x)+…+a[1]x+a[0]

(n﹣1)(n﹣2)=(a[n]x+a[n﹣1]x+…+a[1])x+a[0]

(n﹣2)(n﹣3)=((a[n]x+a[n﹣1]x+…+a[2])x+a[1])x+a[0]

=…

=(…((a[n]x+a[n﹣1])x+a[n﹣2])x+…+a[1])x+a[0].

求多项式的值时,首先计算最内层括号内一次多项式的值,即

v[1]=a[n]x+a[n﹣1]

然后由内向外逐层计算一次多项式的值,即

v[2]=v[1]x+a[n﹣2]

v[3]=v[2]x+a[n﹣3]

9

秦九韶 秦九韶算法与K进制练习题(含详细解答)

v[n]=v[n﹣1]x+a[0]

这样,求n次多项式f(x)的值就转化为求n个一次多项式的值.

∴V1的值为﹣7;

故答案为:﹣7.

点评:本题考查通过程序框图解决实际问题,把实际问题通过数学上的算法,写成程序,然后求解,属于中档题.

18.把5进制的数412(5)化为7进制是 212) .

考点:排序问题与算法的多样性。(www.61k.com]

专题:计算题。

分析:先把5进制的数412(5)化为十进制数再变为七进制数,用除k取余法.

012解答:解:412(5)=2×5+1×5+4×5=2+5+4×25=107

01 2∵107=2×7+1×7+2×7

∴把5进制的数412(5)化为7进制是212(7)

故答案为:212(7)

点评:本题考查进位制之间的换算,熟练掌握进行制的变化规律是正确解题的要诀.

19.用秦九韶算法计算多项式f(x)=8x+5x+3x+2x+1在x=2时的值时,v2=

考点:排序问题与算法的多样性。

专题:计算题。

分析:首先把一个n次多项式f(x)写成(…((anx+a n﹣1)x+an﹣2)x+…+a1)x+a0的形式,然后化简,求n次多项式f(x)的值就转化为求n个一次多项式的值,求出V2的值.

432解答:解:∵f(x)=8x+5x+3x+2x+1=(((8x+5)x+3)x+2)x+1

∴v0=8;

v1=8×2+5=21;

v2=21×2+3=45.

故答案为:45.

点评:本题考查秦九韶算法与算法的多样性,解答本题,关键是了解秦九韶算法的规则,求出v2的表达式

20.用秦九韶算法计算多项式f(x)=3x+4x+5x+6x+7x+8x+1当x=0.4时的值时,至多需要做乘法和加法的次数分别是 6 和 6 .

考点:排序问题与算法的多样性。

专题:规律型。

分析:把所给的多项式写成关于x的一次函数的形式,依次写出,得到最后结果,从里到外进行运算,结果有6次乘法运算,有6次加法运算,本题也可以不分解,直接从最高次项的次数直接得到结果.

65432解答:解:∵f(x)=3x+4x+5x+6x+7x+8x+1

={{{[(3x+4)x+5]x+6}x+7}x+8}x+1

∴需要做6次加法运算,6次乘法运算,

故答案为6,6

点评:本题考查秦九韶算法,考查在用秦九韶算法解题时一共会进行多少次加法和乘法运算,是一个基础题,解题时注意最后加还是不加常数项,可以直接看出结果.

21.军训基地购买苹果慰问学员,已知苹果总数用八进位制表示为abc,七进位制表示为cba,那么苹果的总数用十进位制表示为 220 .

考点:排序问题与算法的多样性。

专题:计算题。

分析:根据八进位制表示的数和七进位制表示的数是同一个十进位制数,依此等量关系根据其它进位制转化换为十进位制数的规律列出方程,再由a,b,c都是整数的性质求解即可判断出结果得出答案

解答:解:∵1≤a≤6,1≤b≤6,1≤c≤6,有:

65432432

秦九韶 秦九韶算法与K进制练习题(含详细解答)

a×8+b×8+c=c×7+b×7+a,

得:63a+b﹣48c=0,

b=3(16c﹣21a),

由此知b是三的倍数,且是整数

∴b=0,3,6,

又c,b是不小于0的整数,

当b=0时,可得c=

当b=3时,可得c=

当b=6时,可得c=

综上知b=3,c=4,a=3,

于是:a×8+b×8+c=220.

故答案为220

点评:考查了整数的十进制表示法,注意根据苹果总数作为等量关系列出方程是解题的关键

22.若六进制数Im05(6)(m为正整数)化为十进数为293,则m= 2 .

考点:排序问题与算法的多样性。[www.61k.com)

专题:计算题。

分析:首先对Im05(6)(m为正整数)化为10进制,然后由题意列出m的方程,最后即可求出m的值. 解答:解:先转化为10进制为:

1*216+m*36+0*6+5=293

∴m=2.

故答案为:2

点评:本题考查算法的概念,以及进位制的运算.通过把6进制转化为10进制即可求得参数m,本题为基础题.

23.用秦九韶算法求多项式f(x)=5x+2x+3.5x﹣2.6x+1.7x﹣0.8当x=5时的值的过程中v3= 考点:排序问题与算法的多样性。

专题:计算题。

5432分析:由秦九韶算法的规则将多项式f(x)=5x+2x+3.5x﹣2.6x+1.7x﹣0.8这形得出v3,再代入x=5求值

5432解答:解:∵f(x)=5x+2x+3.5x﹣2.6x+1.7x﹣0.8=((((5x+2)x+3.5)x﹣2.6)x+1.7)x﹣0.8

∴v3=((5x+2)x+3.5)x﹣2.6

将x=5代入得v3=((5×5+2)×5+3.5)×5﹣2.6=689.9

故答案为689.9

点评:本题考查排序问题与算法的多样性,解答本题,关键是了解秦九韶算法的规则,求出v3的表达式

24.完成下列进位制之间的转化:1234=4).

考点:排序问题与算法的多样性。

分析:将1235依次除以4,求余数,最后把余数从下到上连接起来即为4进制数.

解答:解:由题意,1234除以4,商为308,,余数为2,308除以4,商为77,,余数为0,77除以4,商为19,,余数为1,19除以4,商为4,,余数为3,

将余数从下到上连起来,即34102

故答案为:34102

点评:本题考查算法的概念,以及进位制的运算,属于基础题.基础题

25.把十进制数51化为二进制数的结果是 110011 .

考点:排序问题与算法的多样性。

专题:计算题。

54322,又1≤a≤6,可知,不存在符合条件的a使得c是整数, ,又1≤a≤6,逐一代入验证知,a=3时,c=4, ,又1≤a≤6,逐一代入验证知不存在符合条件a的值使得c为整数,

秦九韶 秦九韶算法与K进制练习题(含详细解答)

分析:利用“除k取余法”是将十进制数除以2,然后将商继续除以2,直到商为0,然后将依次所得的余数倒序排列即可得到答案.

解答:解:51÷2=25…1

25÷2=12…1

12÷2=6…0

6÷2=3…0

3÷2=1…1

1÷2=0…1

故51(10)=110011(2)

故答案为:110011.

点评:本题考查的知识点是十进制与其它进制之间的转化,其中熟练掌握“除k取余法”的方法步骤是解答本题的关键.

26.进制转化:403(6)= 223 (8).

考点:排序问题与算法的多样性;算法的概念。(www.61k.com)

专题:计算题。

分析:首先对403(6)化为10进制,然后依次除以8,求余数,最后把余数从下到上连接起来即为8进制数. 解答:解:先转化为10进制为:

4*36+0*6+3=147

147/8=18…3

18/8=2…2

2/8=0…2

将余数从下到上连起来,即223

故答案为:223

点评:本题考查算法的概念,以及进位制的运算.通过把3进制转化为10进制,再把10进制转化为8进制.其中10进制是一个过渡.

27.完成右边进制的转化:1011(2)= 11 10)= 13 (8).

考点:排序问题与算法的多样性。

专题:计算题。

分析:若二进制的数有n位,那么换成十进制,等于每一个数位上的数乘以2的(n﹣1)方,再相加即可; 而要将十进制的数转化为8进制,而要采用除8求余法;

32解答:解:(1011)2=1×2+0×2+1×2+1=11

∵11÷8=1…3,1÷8=0…1,

故1011(2)=11(10)=13(8),

故答案为11,13

点评:本题考查的知识点是不同进制之间的转换,熟练掌握K进制与十进制之间的转换方法﹣﹣“累加权重法”和“除k求余法”是解答本题的关键.

三.解答题(共3小题)

3228.将多项式x+2x+x﹣1用秦九韶算法求值时,其表达式应写成

考点:排序问题与算法的多样性。

专题:数学模型法。

分析:利用秦九韶算法解题,需要一层一层的提出x最后整理出关于x的一次函数的形式,提两次x得到结果.

322解答:解:x+2x+x﹣1=(x+2x+1)x﹣1

=((x+2)x+1)x﹣1,

故答案为:((x+2)x+1)x﹣1.

点评:本题考查排序问题与算法的多样性,本题解题的关键是整理出一系列的x的一次函数的形式,本题是一个基础题.

秦九韶 秦九韶算法与K进制练习题(含详细解答)

29.写出将8进制数23760转化为7进制数的过程.

考点:排序问题与算法的多样性。[www.61k.com)

专题:计算题。

分析:先将8进制数化为十进制数,再用除k取余法将十进制数化为七进制数

解答:解:23760(8)=2×8+3×8+7×8+6×8+0×8=10244

又故23760(8)=41544(7)

秦九韶 秦九韶算法与K进制练习题(含详细解答)

43210

点评:本题考查进位制的转换,解答本题的关键是熟练掌握除k取余法及其进位制的数转化为十进制数的方法.

30.已知一个5次多项式为f(x)=4x﹣3x+2x+5x+1,用秦九韶算法求这个多项式当x=2时的值.

考点:排序问题与算法的多样性。

专题:计算题。

分析:把所给的多项式写成关于x的一次函数的形式,依次写出,得到最后结果,从里到外进行运算,得到要求的值.

解答:解:由f(x)=((((4x+0)x﹣3)x+2)x+5)x+1

∴v0=4

v1=4×2+0=8

v2=8×2﹣3=13

v3=13×2+2=28

v4=28×2+5=61

v5=61×2+1=123

故这个多项式当x=2时的值为123.

点评:本题考查排序问题与算法的多样性,解答本题,关键是了解秦九韶算法的规则,求出多项式当x=2时的值. 532

秦九韶 秦九韶算法与K进制练习题(含详细解答)

菁优网 版权所有

仅限于学习使用,不得用于任何商业用途

二 : 土木工程材料习题集及答案详解

土木工程材料习题集

目录

0 绪论????????????????????????????2 1土木工程材料的基本性质???????????????????3 2气硬性胶凝材料???????????????????????10 3水泥????????????????????????????15 4混凝土???????????????????????????23 5建筑砂浆??????????????????????????43 6墙体材料??????????????????????????46 7天然石材??????????????????????????50 8金属材料??????????????????????????52 9合成高分子材料??????????????????????? 10木材???????????????????????????? 11沥青与防水材料??????????????????????? 12绝热材料与吸声材料????????????????????? 13建筑装饰材料???????????????????????? 习题解答

0 绪论习题解答???????????????????????? 1土木工程材料的基本性质习题解答??????????????? 2气硬性胶凝材料习题解答??????????????????? 3水泥习题解答???????????????????????? 1

水泥砂浆强度 土木工程材料习题集及答案详解

4混凝土习题解答??????????????????????? 5建筑砂浆习题解答?????????????????????? 6墙体材料习题解答?????????????????????? 7天然石材习题解答?????????????????????? 8金属材料习题解答?????????????????????? 9合成高分子材料习题解答??????????????????? 10木材习题解答???????????????????????? 11沥青与防水材料习题解答??????????????????? 12绝热材料与吸声材料习题解答???????????????? 13建筑装饰材料习题解答????????????????????

0 绪论

0.1学习指导

一、内容提要

本章主要介绍土木工程材料的定义、分类、作用、发展趋势与技术标准以及本课程的学习目的与任务。(www.61k.com)

二、基本要求

了解土木工程材料的定义、分类、与发展趋势,领会土木工程材料标准化的意义及表示方法。

三、重、难点提示

1、重点提示:土木工程材料的分类。

2、难点提示:土木工程材料的产品及应用的技术标准。

0.2习题

一、名词解释

1. 产品标准

2. 工程建设标准

二、填空题

2

水泥砂浆强度 土木工程材料习题集及答案详解

1、按照化学成分,土木工程材料可以分为、三类。[www.61k.com]

2、我国的技术标准分为和

三、简答题

1、简述土木工程材料的分类。

2、简述土木工程材料的发展趋势。

3、实行标准化的意义有哪些?

4、简述土木工程建设中控制材料质量的方法与过程。

5、简述土木工程材料课程学习的基本方法与要求以及实验课学习的意义。

1土木工程材料的基本性质

1.1学习指导

一、内容提要

本章介绍土木工程材料的各种基本性质及材料组成、结构、构造对材料性质的影响。主要包括:

1、材料的基本物理性质:包括材料与密度有关的性质;材料与水有关的性质;材料的热性质;材料的耐燃性等。

2、材料的基本力学性质:包括强度与比强度、弹性与塑性、脆性与韧性、硬度与耐磨性等。

3、材料的耐久性:材料耐久性的概念及影响材料耐久性的因素。

4、材料组成、结构与构造及其与材料性质的关系。

二、基本要求

1、了解建筑材料的基本组成、结构和构造,材料的结构和构造与材料的基本性质的关系。

2、熟练掌握建筑材料的基本力学性质。

3、掌握建筑材料的基本物理性质。

4、掌握建筑材料耐久性的基本概念。

通过材料基本性质的学习,要求了解材料科学的一些基本概念,掌握材料的各种性质的基本概念、表示方法、影响因素以及它们之间的相互关系和在工程实践中的意义。

三、重、难点提示

1、重点提示:理解材料密度、表观密度、体积密度、堆积密度及孔隙率的含义与表示方法。掌握材料各物理量之间的换算关系及推导过程。

2、难点提示:理解并掌握材料各物理量间的计算过程。

1.2习题

一.名词解释:

1.密度、表观密度、体积密度、堆积密度;2.亲水性、憎水性;3.吸水率、含水率;4.耐水性、软化系数;5.抗渗性;6.抗冻性;7.强度等级、比强度;8.弹性、塑性;9.脆性、韧性;10.热容量、导热性;11.耐燃性、耐火性;12.耐久性

二.填空题

1.材料的吸水性、耐水性、抗渗性、抗冻性、导热性分别用、、 、 、 和 表示。

2.当材料的孔隙率一定时,孔隙尺寸越小,,保温性能越,

3.选用墙体材料时,应选择导热系数较的材料,才能使室内尽可能冬暖夏凉。

4.材料受水作用,将会对其、、等性能产生不良影响。

3

水泥砂浆强度 土木工程材料习题集及答案详解

5.材料的孔隙率较大时(假定均为开口孔),则材料的表观密度、强度、吸水率 、抗渗性 、抗冻性 、导热性 、吸声性 。(www.61k.com)

6.材料的软化系数愈大表明材料的耐水性愈 。软化系数大于 的材料被认为是耐水的。

7.评价材料是否轻质高强的指标为 ,它等于 ,其值越大,表明材料 。

8.无机非金属材料一般均属于脆性材料,最宜承受

9.材料的弹性模量反映了材料 的能力。

10.材料的吸水率主要取决于 又 孔隙的材料其吸水率往往较大。

11.材料的耐燃性按耐火要求规定分为三大类。材料在高 温作用下会发生 和 两种性质的变化而影响其正常使用。

12.材料在使用环境中,除受荷载作用外,还会受到 、 和 等周围 自然因素的作用而影响其耐久性。

13.材料强度试验值要受试验时试件的、、和 等的影响。

14.对材料结构的研究,通常可分为三个结构层次。

三.选择题(单选或多选)

1.含水率4%的砂100克。

A. 96 B. 95.5 C. 96.15 D 97

2.建筑上为使温度稳定,并节约能源,应选用 的材料。

A.导热系数和热容量均小 B.导热系数和热容量均大

C.导热系数小而热容量大 D.导热系数大而热容量小

3.对于组成相同具有下列不同特性的材料一般应有怎样的孔隙结构(均同种材料):⑴强度较高的应是 ;⑵吸水率小的应是 ;⑶抗冻性好的应是 ;⑷保温隔热性好的应是 ;⑸吸声性能好的应是 。

A.孔隙率大 B.孔隙率小 C.连通孔 D.闭口孔 E.粗大孔 F.微细孔

4.某材料其含水率与大气平衡时的抗压强度为40.0MPa,干燥时抗压强度为42.0MPa,吸水饱和时抗压强度为38.0MPa,则材料的软化系数和耐水性 。

A.0.95,耐水 B.0.90,耐水 C.0.952,耐水 D..0.90,不耐水

5.对于某材料来说无论环境怎样变化,其都是一个定值。

A .体积密度 B.密度 C.导热系数 D.平衡含水率

6. 最能体现无机非金属材料是否经久耐用的性能指标是

A. 抗渗性 B. 抗冻性 C. 抗侵蚀性 D. 耐水性

7. 当材料的孔隙率增大时,

A. 密度 B. 表观密度 C. 体积密度 D. 堆积密度

8. 受水浸泡或处于潮湿环境中的重要建筑物所选用的材料,其软化系数不宜小于( )。

A. 7.5 B. 0.80 C. 0.85 D. 0.90

9. 下列有关材料强度和硬度的内容,哪一项是错误的?( )。

A 材料的抗弯强度与试件的受力情况 截面形状及支承条件等有关

B 比强度是衡量材料轻质高强的性能指标

C.石料可用刻痕法或磨耗来测定其硬度

D.金属、木材、混凝土及石英矿物可用压痕法测其硬度

10. 选择承受动荷载作用的结构材料时,要选择下述哪一类材料?( )

4

水泥砂浆强度 土木工程材料习题集及答案详解

A.具有良好塑性的材料 B.具有良好韧性的材料

C.具体良好弹性的材料 D.具有良好硬度的材料

11、建筑材料可分为脆性材料和韧性材料,其中脆性材料具有的特征是( )

A.破坏前没有明显变形 B.抗压强度是抗拉强度的2倍以上

C.抗冲击破坏时吸收的能量大 D.破坏前不产生任何变形

12、材料吸水后,将使材料的( )提高。(www.61k.com]

A.耐久性 B.强度和导热系数 C.密度 D.体积密度和导热系数

13、材料吸水后,将使材料的( )降低。

A.体积密度 B.体积密度和导热系数 C.强度和保温性 D.强度和热容量

14、同种材料,孔隙率较大者其抗渗性和抗冻性( )。

A.较差 B.较好 C.不一定 D.无关

15、下列关于材料的导热系数的说法,不正确的是( )。

A.体积密度越小,导热系数越小 B.固体材料比空气的导热系数大

C.材料含水率越高,导热系数越大 D.材料孔隙连通者,导热系数偏小

16、以下四种材料中属于憎水性材料的是( )。

A.天然石材 B.混凝土 C.钢材 D.石油沥青

四.判断题(正确的划“√”,错误的划“3”,并改正)

1.材料的孔隙率越大,吸水率越高。 ( )

2.具有粗大或封闭孔隙的材料,其吸水率较小,而具有细小且连通孔隙的材料,其吸水率较大。

( )

3.对于任何一种材料,其密度均大于其体积密度。 ( )

4.材料的孔隙率越大,其抗冻性就越差。

5.混凝土掺入引气剂,使混凝土的密实度降低,因而使其抗冻性降低。

6.耐燃性好的材料耐火性一定好。

7.材料的渗透系数越大,其抗渗性越好。 ( ( ( ( ) ) ) )

8.吸水率小的材料,其孔隙率一定小。 ( )

9.材料受潮或受冻后,其导热系数都降低。 ( )

10.材料的比强度越大,表明其越轻质高强。 ( )

11.材料的抗冻性仅与材料的孔隙率有关,与孔隙中的水饱和程度无关。 ( )

12.对于同种材料而言,其孔隙率越大,强度越低。 ( )

13.在进行材料抗压试验时,小试件测得的试验结果较大试件的偏大. ( )

14.测定材料强度时,加荷速度过快会使测定值偏大。 ( )

15.具有受力后同时产生弹性变形和塑性变形特征的材料称为弹塑性材料。 ( )

16.脆性材料只适合用于承受压力。 ( )

17.韧性材料既可用于承受压力,又可用于承受拉力、冲击和动荷载。 ( )

18.混凝土和砂浆的抗渗性常用抗渗等级表示。 ( )

19.无机非金属材料的硬度常用莫氏硬度表示。 ( )

20.材料的耐磨性常用磨损率表示。 ( )

五.简答题:

1.材料的质量吸水率和体积吸水率有何不同?什么情况下采用体积吸水率或质量吸水率来反映

其吸水性?

2.材料的强度与强度等级的关系如何?影响材料强度测试结果的试验条件有哪些?怎样影响?

3.材料的耐久性主要包含哪些内容?影响材料耐久性的破坏因素主要有哪几方面?提高材料耐

久性的措施主要有哪些?

5

水泥砂浆强度 土木工程材料习题集及答案详解

4.试证明:Wv = Wm?ρ0(Wv -体积吸水率;Wm -质量吸水率;ρ0-材料的干体积密度),并指出ρ

的单位。[www.61k.com)如果已知材料的孔隙率(P),并求得体积吸水率(Wv),试求材料的闭口孔隙率。

5. 评价材料热工性能的常用参数有哪几个?要保持建筑物室内温度的稳定性并减少热损失,应选用什么样的建筑材料?

6.为什么秋天新建成的房屋的墙体当年冬天保暖性能差? 0

7.材料的孔隙率和孔隙构造对材料的哪些性能有影响?如何影响?

六.计算题

1、某岩石在气干、绝干、水饱和状态下测得的抗压强度分别为172MPa、178MPa、168MPa。问该岩石是否可用于水下工程?

2、某岩石的密度为2.75 g/cm3,孔隙率为1.5﹪;今将该岩石破碎为碎石,测得碎石的堆密度为1560 kg/m.试求此岩石的体积密度和碎石的空隙率。

3、称取堆积密度为1400kg/m的干砂200g装入广口瓶中,然后瓶中加满水赶尽气泡,称其质量为500g。已知空瓶加满水的质量为377g。求砂的表观密度与空隙率。

4、称河砂500 g,烘干至恒重时质量为494 g,求此河砂的含水率。

5、某材料的极限抗压强度为21 MPa,弹性模量为3.0310 MPa,利用该材料制成的柱子横断面尺寸为400 mm3500 mm,长度为12m。若在该柱子的轴向上施加1800KN压力,在只考虑弹性变形的情况下,试计算分析该柱子受力后的尺寸变化。此荷载作用下该柱子是否已达到破坏状态?若没有达到破坏状态,要使该柱子达到受压破坏,须施加多大的压力荷载?

6、一块烧结普通砖的外形尺寸为240mm3115mm353mm,吸水饱和后重为2940 g,烘干至恒重为2580 g。今将该砖磨细并烘干后去取50 g,用李氏密度瓶测得其体积为18.58 cm3.试求该砖的密度、体积密度、孔隙率、质量吸水率、开口孔隙率及闭口孔隙率。

7、某材料的体积吸水率为10﹪,密度为3.0 g/cm3,绝干时的表观密度为1500 kg/m3.试求该材料的质量吸水率、开口孔隙率、闭口孔隙率,并估计该材料的抗冻性如何?

8、用容积为10L、质量为6.20kg的标准容器,用规定的方法装入卵石并刮平,称其质量为21.30kg,向容器内注水至平满,使卵石吸水饱和后,称其总质量为25.90kg,求该卵石的表观密度、堆积密度、空隙率。

33

2 气硬性胶凝材料

2.1学习指导

一、内容提要

本章主要介绍石灰、石膏、水玻璃三种气硬性胶凝材料如的制备、胶凝机理、技术性质及用途。主要学习思路是由各材料的组成和凝结硬化掌握各材料的特性,由材料的特性确定材料的应用。

二、基本要求

掌握石灰、石膏、及水玻璃的硬化机理、性质及使用要点,熟悉其主要用途。

三、重、难点提示

1、重点提示:气硬性胶凝材料的性能及应用要点。

2、难点提示:气硬性胶凝材料的胶凝机理。

2.2习题

一、名词解释

1、胶凝材料;2、气硬性胶凝材料;3、水硬性胶凝材料;4、建筑石膏;5、高强石膏; 6、 过火石灰;7、石灰的“陈伏”;8、石灰的熟化;9、水玻璃

二、填空题

1.石膏板不能用作外墙板的主要原因是由于它的 性差。

6

水泥砂浆强度 土木工程材料习题集及答案详解

2.建筑石膏是型的石膏,硬化后的石膏的化学成分是

3.的特性,故其适于制作模型、塑像等。[www.61k.com)

4.建筑石膏的孔隙率冬暖夏凉,吸声效果好。

5.石灰不可以单独应用是因为其硬化后大,而石膏可以单独应用是由于其硬化过程中具有 的特性。

6.石灰熟化时具有两个特点,一是 ,二是 。

7.石灰膏主要用于配制墙体的,消石灰粉主要用于拌制

8.石灰浆体的硬化包括 和 两个交叉进行的过程,而且 过程是一个由 及 的过程,其速度 。

9.在石灰应用中,常将石灰与纸筋、麻刀,砂等混合应用,其目的是防止生 。

10.在水泥砂浆中掺入石灰膏是利用了石灰膏具有好的特性,从而提高了水泥砂浆的 。

11.按消防要求我们尽可能用石膏板代替木质板材,是因为石膏板具有 好的特性。

12.水玻璃的分子式是模数同一浓度的水玻璃n越大,则其粘度愈 ,越 溶于水,强度越 。

13.水玻璃混凝土有璃 好的原因。

14、石灰熟化时放出大量 ,体积发生显著;石灰硬化时放出大量 ,体积产生 明显 。

15、建筑石膏凝结硬化速度,表观密 度 ,强度 ,保温性 ,吸声性能___,防火性能___等。

16、水玻璃的模数是指

17、石灰的特性有:可塑性___、硬化___、硬化时体积___和耐水性___等。

18、建筑石膏的技术要求包括___、___和___。

19、建筑生石灰的技术要求包括___、___、___和___4项。

三、选择题

1、 生石灰和消石灰的化学式分别为( )。

A. Ca(OH)2和CaCO3; B. CaO和CaCO3;C. CaO和Ca(OH)2; D. Ca(OH)2和CaO

2、在下列几种无机胶凝材料中,哪几种属于气硬性的无机胶凝材料?( )

A.石灰、水泥、建筑石膏 B.水玻璃、水泥、菱苦头

C.石灰、建筑石膏、菱苦头 D.沥青、石灰、建筑石膏

3、生石灰消解反应的特点是 ( )。

A.放出大量热且体积大大膨胀 B.吸收大量热且体积大大膨胀

C.放出大量热且体积收缩 D.吸收大量热且体积收缩

4、石膏制品具有较好的防火性能,其原因是( )。

(1)火灾时CaSO422H2O脱水,表面形成水膜;(2)石膏制品孔隙率大

(3)石膏硬化时约有1﹪的膨胀率;(4)石膏吸水率大;(5)石膏制品导热率低

A.(1)(2)(3);B.(1)(3)(5);C.(1)(2)(5);D.(1)(4)(5)

5、试分析下列哪些工程不适于选用石膏制品。( )

A.吊顶材料 B.影剧院穿孔贴面板 C. 冷库内的墙贴面 D. 非承重墙隔板

6、有关建筑石膏的性质,下列哪一项的叙述是不正确的?( )

7

水泥砂浆强度 土木工程材料习题集及答案详解

A.加水后凝结硬化快,且凝结时像石灰一样,出现明显的体积收缩

B.加水硬化后有很强的吸湿性,耐水性与抗冻性均较差

C.制品具有较好的抗火性能,但不宜长期用于靠近65℃以上的高温部位

D.适用于室内装饰、绝热、保温、吸声等

7、石灰膏在使用前应进行“陈伏”处理是为了( )

A.有利于硬化 B.消除过火石灰的危害 C.提高浆体的可塑性 D.降低发热量

8、水玻璃在空气中硬化很慢,通常要加入促硬剂才能正常硬化。(www.61k.com]

A.NaOH B. Na2SO4 C.NaHSO4 D. Na2SiF6

9、水玻璃不能用于涂刷或浸渍( ),以提高其抗风化性能。

A.粘土砖 B.硅酸盐制品 C.水泥混凝土 D.石膏制品

10、随着水玻璃模数增大,其( )

A.粘结性增大,溶解性增大,耐酸性降低

B.粘结性减小,溶解性减小,耐酸性增强

C.粘结性增大,溶解性减小,耐酸性降低

D.粘结性增大,溶解性减小,耐酸性增强

四、判断题

1、气硬性胶凝材料只能在空气中硬化,水硬性胶凝材料只能在水中硬化。 ( )

2、由于生石灰往往含有过火石灰,熟化很慢,所以石灰膏需要陈伏。 ( )

3、建筑石膏为α型半水石膏,高强石膏为β型半水石膏。 ( )

4、石灰是气硬性胶凝材料,因此所有加入了石灰的材料都只能在空气中硬化并保持和发展强度。

( )

5、石膏制品可调节室内湿度,具有“呼吸”功能。 ( )

6、石灰浆体的凝结硬化过程是由结晶作用与碳化作用共同来完成的。 ( )

7、水玻璃只能用于气硬性胶凝材料。。 ( )

8、石灰的强度比石膏、水玻璃等材料的强度要高。 ( )

9、石灰砂浆中掺入纸筋、麻刀等材料是为了提高其抗拉强度,防止收缩引起的开裂,

( )

10、虽然石灰是气硬性胶凝材料,但用其制备的石灰土生成了水硬性水化产物。 ( )

五、问答题

1、气硬性胶凝材料和水硬性胶凝材料有何区别?如何正确使用这两类胶凝材料?

2、建筑石膏的特性有哪些?为什么说建筑石膏及制品适用于室内,而不适用于室外?

3、石灰的特性有哪些?其主要用途是什么?

4、某民宅内墙抹灰时采用水泥石灰混合砂浆,可过了一段时间,墙面一些部位却出现起鼓凸出

并伴有放射状的及网状的裂纹,试分析其原因。

5、既然石灰不耐水,为什么有它配制的灰土或三合土却可以用于基础的垫层、道路的基层等潮

湿部位?

6、水玻璃具有哪些特性?其主要用途是什么?

3 水泥

3.1学习指导

一、内容提要

本章主要介绍通用水泥的组成、制备、胶凝机理、技术性质、特性及选用,特性水泥及专用水泥的组成及其性能特点。

二、基本要求

8

水泥砂浆强度 土木工程材料习题集及答案详解

1、熟悉通用水泥的矿物组成及其对性能的影响,了解硬化机理,熟练掌握其技术性质与检测方法、特性及选用原则,能根据工程要求正确选用水泥。(www.61k.com)

2、了解其它水泥品种及其性质和使用特点。

三、重、难点提示

1、重点提示:硅酸盐水泥的矿物组成及其特性、掺混合材料的硅酸盐水泥的特性、通用水泥的技术性质及选用。

2、难点提示:硅酸盐水泥的矿物组成及其特性、水化硬化机理、硅酸盐水泥的腐蚀、掺混合材料的硅酸盐水泥的特性、通用水泥的技术性质及选用。

3.2习题

一、名词解释

1、通用硅酸盐水泥;2、混合材料;3、活性混合材料;;4、水泥的初凝与终凝;5、体积安定性不良;6、水泥标准稠度用水量;7、碱含量;8、水化热;9、火山灰反应

二、判断题

1、硅酸盐水泥28天前的强度主要由C3S提供,而C2S的早期强度低,后期强度高。 ( )

2、用沸煮法可以全面检验通用硅酸盐水泥的体积安定性是否良好。 ( )

3、熟料中的游离CaO、游离MgO和掺入过多的石膏都会造成水泥的体积安定性不良。( )

4、硅酸盐水泥熟料矿物中,铝酸三钙水化热最大,抗化学侵蚀性最差。 ( )

5、体积安定性不良的水泥,重新加工后可以用于工程中。 ( )

6、水泥熟料中的氧化镁和三氧化硫采用化学方法控制。 ( )

7、氯离子会加速混凝土中钢筋的锈蚀作用,故国家标准对其含量提出了限制。 ( )

8、水泥中碱性氧化物过多有可能引起混凝土的碱骨料反应。 ( )

9、矿渣硅酸盐水泥的泌水性大,施工时应加强潮湿养护,以免出现裂纹。 ( )

10、有抗冻、耐磨要求的混凝土工程不宜使用火山灰水泥和粉煤灰水泥。 ( )

11、在浇筑大型基础的混凝土中,应优先选用硅酸盐水泥。 ( )

12、矿渣硅酸盐水泥的初凝时间不得小于45 min,终凝时间不得迟于6h30min。 ( )

13、有抗渗要求的混凝土,不宜选用矿渣硅酸盐水泥。 ( )

14、水泥越细,强度发展越快,对混凝土性能也越好。 ( )

15、水泥在运输和储存时要防止受潮,以免发生风化使强度降低。 ( )

三、填空题

1、通用硅酸盐水泥中,硅酸盐水泥代号为 、 ,普通水泥、矿渣水泥、火山灰水泥、粉煤灰水泥及复合水泥的代号分别为 、 、 、 、 。

2.硅酸盐水泥熟料的主要矿物是 、 、 、 ,简写为 、 、 、 。

3、生产硅酸盐水泥时,必须掺入适量的石膏,其目的是 ,当石膏掺量过多时会 导致 ,过少则会导致 。

4、引起硅酸盐水泥体积安定性不良的因素有 、 和 等过多。

5、引起硅酸盐水泥腐蚀的内因是其水化产物中存在 和 。

6、粉煤灰水泥与硅酸盐水泥相比,其早期强度___,后期强度___,水化热___,抗侵 蚀性___,抗冻性___。

7、矿渣水泥比硅酸盐水泥的抗侵蚀性___,其原因是矿渣水泥水化产物中___、___含 量少。

8、活性混合材料中均含有___和___成分。它们能和水泥水化产物___作用,生成___和___。

9、国家标准规定:硅酸盐水泥的初凝时间不得早于 ___,终凝时间不得迟于___。

9

水泥砂浆强度 土木工程材料习题集及答案详解

10、国家标准对通用硅酸盐水泥物理性质的技术要求主要有、、和项,对化学性质的技术要求有 、 、 、 、 、 6项。[www.61k.com]

11、硅酸盐水泥的主要水化产物是 和 凝胶、 、 及 晶体,其中 约占70%, 约占20%。

12改变硅酸盐水泥的矿物组成可制得具有不同特性的水泥,如提高 含量,可制得高强水泥; 提高 和 的含量,可制得快硬水泥;降低 和 的含量,提高 的含量,可制得中、低热水泥;提高 含量降低 含量可制得道路水泥;降低 含量可制得白水泥。

13、石膏在硅酸盐水泥中起到 的作用,在矿渣水泥中起到 和 的作用。 14常用的活性混合材为 、 、 ,活性混合材的主要化学成分是 和 ,这些活性成分能与引起水泥石腐蚀的水化产物 反应,生成 和 而参与水泥凝结硬化。

15、在水泥正常硬化过程中, 天强度增长幅度较大, 天以后强度增长率降低, 天 强度达到标准的规定,其后强度 。

16、硬化后的水泥石结构主要是由 、 、 、 等组成结构体。

17、引起水泥石腐蚀的内因是水泥结构本身存在 ,水化产物中存在 、 。水 泥石腐蚀的类型主要有 、 、 、 。防止腐蚀的措施有 、 、 三种方法。

18、硅酸盐水泥和普通硅酸盐水泥的细度用 表示,其它品种的通用硅酸盐水泥 用 表示。

19、水泥初凝时间是指自 起,到水泥浆 为止所需的时间。初凝的作 用是为了 。终凝时间是指自 起,至水泥浆 并开始产生强度所需的时间。终凝的作用是为了 。

20、水泥安定性不良是由于熟料中 、 或掺入的 过多引起的。其基 本检验方法为沸煮法,沸煮法又分为 法和 法两种。当两种方法测定结果发生争议时以 为准。沸煮法主要用于测试由于 引起的安定性不良。

21、通用硅酸盐水泥的强度等级是用标准尺寸为 的试件,在标准条件 即 养护,测定3d及28d的 和 来评定的。又根据3d强度分为 型和 型两种型号。

22、水泥的水化热多,有利于 施工,而不利于 工程。

23、掺活性混合材料的硅酸盐水泥与硅酸盐水泥相比,其具有早期强度 ,后期强度 , 水化热 ,抗淡水、酸性水及硫酸盐腐蚀性 ,其蒸汽养护效果 ,抗冻性 ,抗碳化能力 的特性。其中矿渣水泥具有 好,火山灰水泥具有在干燥条件下 大,在潮湿条件下 好,粉煤灰水泥具有 小的特性。

24、高铝水泥具有早期强度 、水化热 、耐蚀性 、耐热性 的特性,高铝水 泥由于晶型转化,不宜用于长期 结构,同时也不能与硅酸盐水泥等能析出 的材料混合使用,否则会出现 而无法施工,同时高铝水泥不适宜 养护,也不宜于 条件下施工,更不宜用于 混凝土工程。

25、水泥在储存与运输时应防止 ,储存过久(超过3个月)的水泥在使用前应 。 为了防止使用时水泥强度等级不符合标准,通常新出厂水泥28天抗压强度为标准规定值的 倍,称为水泥的 。

四、单项选择题

1、硅酸盐水泥凝结硬化与下列影响因素无关的是 ( )。

A 熟料矿物组成与水泥细度 B 环境温度与湿度 C石膏掺量 D 水泥的用量与体积

2、不宜用于大体积混凝土工程的水泥是( )。

A 硅酸盐水泥 B 矿渣硅酸盐水泥 C 粉煤灰水泥 D火山灰质水泥

3、配制有抗渗要求的混凝土时,不宜使用( )。

10

水泥砂浆强度 土木工程材料习题集及答案详解

A 硅酸盐水泥 B 普通硅酸盐水泥 C 矿渣水泥 D 火山灰水泥

4、对硅酸盐水泥28天前的强度贡献最大的熟料矿物是( )。[www.61k.com)

A.C3S B. C2S C. C3A D. C4AF

5、在硅酸盐水泥熟料矿物中水化速度最快,28d水化热最大的是( )。

A.C3S B.C2S C.C3A D.C4AF

6、处于干燥环境中的混凝土工程,应优先选用( )。

A 普通水泥 B 矿渣水泥 C 火山灰水泥 D 粉煤灰水泥

7、高层建筑的基础工程的混凝土宜优先选用( )。

A 硅酸盐水泥 B 普通硅酸盐水泥 C 矿渣硅酸盐水泥 D 火山灰硅酸盐水泥

8、道路工程混凝土宜优先选用 ( )。

A 普通硅酸盐水泥 B 矿渣硅酸盐水泥 C 火山灰硅酸盐水泥 D 粉煤灰硅酸盐水泥

9、不宜用来生产蒸汽养护混凝土构件的水泥是( )。

A 普通硅酸盐水泥 B 矿渣硅酸盐水泥 C 火山灰硅酸盐水泥 D 粉煤灰硅酸盐水泥

10、对出厂日期超过3个月的过期水泥的处理方法是( )

A 按原强度等级使用 B 降级使用 C 重新鉴定强度等级 D 判为废品

11、在江河桥梁建设中,不宜采用( )水泥拌制混凝土。

A 普通水泥 B 矿渣水泥 C 火山灰水泥 D 复合水泥

12、高铝水泥是一种 ( ) 的水泥。

A.快硬、早强 B.耐酸、耐水、耐盐类腐蚀 C. 耐高温 D. A+B+C

13、某工程用普通水泥配制的混凝土产生裂纹,试分析下述原因中那项不正确 ( )。

A 混凝土因水化后体积膨胀而开裂 B 因干缩变形而开裂

C 因水化热导致内外温差过大而开裂 D 水泥体积安定性不良

14、与硅酸盐水泥比较,铝酸盐水泥(CA)的下列性质中哪一项不正确?

A.水化热大,早期强度增长快,长期强度有降低趋势 B.抗硫酸盐侵蚀性强

C.硬化后有较高的耐热性 D.最适宜的硬化温度为30℃以上

15、下列有关白色和彩色硅酸盐水泥的内容,哪一项是错误的?

A.白水泥的白度应不低于87 B.白水泥的性质与硅酸盐水泥相同

C.彩色水泥中的颜料应为耐酸颜料 D.颜料一般在磨制水泥时加入

16、配制具有良好密实性与抗渗性的混凝土,不宜选用哪种水泥?

A.硅酸盐膨胀水泥 B. 硅酸盐自应力水泥 C. 铝酸盐自应力水泥 D.矿渣水泥

17、下列有关水泥的叙述,哪一项不正确?

A.道路水泥的抗折强度高、干缩性小、耐磨性好 B.喷射混凝土宜采用普通水泥

C. 快硬硫铝酸盐水泥特别适用于抢修工程 D.中热水泥不宜用于大体积混凝土

五、多项选择题

1、通用硅酸盐水泥下列哪些性质不符合国家标准规定,应作为不合格品?( )

A.不溶物、烧失量、MgO、SO3、氯离子等化学指标 B.强度 C.安定性 D.凝结时间

2、通用硅酸盐水泥的技术要求有( )。

A.凝结时间 B.体积安定性 C.强度 D.细度 E.不溶物、烧失量、MgO、SO3、氯离子、

碱含量等化学指标

3、生产通用硅酸盐水泥时掺加混合材料的目的是( )。

A.改善水泥性能 B.增加产量 C.降低成本 D.调节强度等级 E.废物利用

4、作为活性混合材料的激发剂,主要是指( )。

A.Ca(OH)2 B.CaCl2 C.CaCO3 D.MgO E.CaSO4

5、硅酸盐水泥适用于( )。

11

水泥砂浆强度 土木工程材料习题集及答案详解

A.早期强度要求较高的工程 B.大体积混凝土工程 C.海水侵蚀的过程 D.受冻融作用的工程 E.冬期施工的工程

6、下列水泥品种中不宜用于大体积混凝土工程的有( )。[www.61k.com]

A.硅酸盐水泥 B.普通硅酸盐水泥 C.火山灰质硅酸盐水泥 D.粉煤灰硅酸盐水泥 E.高铝水泥

7、硅酸盐水泥遭受化学侵蚀的基本原因是( )。

A.水泥石本身不密实 B.水泥石中存在氢氧化钙 C.水泥石中存在水化铝酸钙 D.水泥石中存在水化硅酸钙 E.腐蚀与通道的联合作用

8、矿渣水泥与硅酸盐水泥相比,具有的优点是( )。

A. 早期强度高 B.耐热性好 C.水化热小 D.抗冻性差 E.抗侵蚀性好

六、问答题

1、试说明以下各条的原因:(1)生产通用硅酸盐水泥时必须掺入适量的石膏;(2)水泥必须具有一定的细度;(3)水泥体积安定性必须合格;(4)测定水泥凝结时间、体积安定性及强度等级,均须采用规定的加水量。

2、现有甲乙两厂生产的硅酸盐水泥熟料,其矿物组成如下表所示。试估计和比较这两厂所生产的硅酸盐水泥的强度增长速度和水化热等性质有何差异?为什么?

3、某些体积安定性不合格的水泥,在存放一段时间后变为合格,这是为什么?

4、引起水泥体积安定性不良的原因及检验方法是什么?建筑工程使用安定性不良的水泥有何危害?水泥安定性不合格怎么办?

5、为什么生产硅酸盐水泥时掺适量的石膏对水泥不起破坏作用,而硬化的水泥石遇到硫酸盐溶液的环境时生成的石膏就有破坏作用?

6、水化热有何利弊?什么情况下配制混凝土选择水泥时要考虑水化热的影响?

7、试分析提高水泥强度的方法有哪些?

8、国家标准对通用硅酸盐水泥的化学性质有哪几项要求?其意义是什么?

9、试述硅酸盐水泥腐蚀的类型、机理及防止措施。

10、水泥储存中为何要严防受潮、过期和品种混乱?

11、某工地建筑材料仓库存有白色胶凝材料三桶,原分别标明为磨细生石灰、建筑石膏和白水泥,后因保管不善,标签脱落,问可用什么简易方法来加以辨认?

12、常用的活性混合材料有哪些?活性混合材料产生硬化的条件是什么?

13、掺大量活性混合材料的水泥水化反应有何特点?对水泥性质有何影响?

14、试述掺大量活性混合材料的硅酸盐水泥的共性与特性。

15、为什么矿渣硅酸盐水泥 火山灰质硅酸盐水泥和粉煤灰硅酸盐水泥不宜用于早期强度要求高或低温环境中施工的混凝土工程?

16、有下列混凝土构件和工程,试分别选用合适的水泥品种,并说明理由:

(1)现浇混凝土楼板、梁、柱;

(2)采用蒸汽养护的混凝土构件;

(3)厚大体积的混凝土工程;

(4)水下混凝土工程;

(5)高强度混凝土工程;

12

水泥砂浆强度 土木工程材料习题集及答案详解

(6)高温设备或窑炉的混凝土基础;

(7)严寒地区受冻融的混凝土工程;

(8)有抗渗性要求的混凝土工程;

(9)混凝土地面或道路工程;

(10)有硫酸盐腐蚀的地下工程;

(11)冬期施工的混凝土工程;

(12)与流动水接触的混凝土工程;

(13)水位变化区的混凝土工程;

(14)处于干燥环境中的混凝土工程;

(15)海港码头工程;

(16)紧急抢修的工程或紧急军事工程。[www.61k.com]

17、下列混凝土工程中不宜使用哪些水泥?说明理由。

(1)处于干燥环境中的混凝土工程;

(2)厚大体积的混凝土工程

(3)严寒地区经常与水接触的混凝土工程;

(4)有抗渗防水要求的混凝土工程;

(5)与流动水接触的混凝土工程;

(6)采用湿热养护的混凝土构件;

(7)冬期施工的混凝土工程;

(8)与硫酸盐介质接触的混凝土工程;

(9)处于高温高湿环境的混凝土工程;

(10)有耐磨要求的混凝土工程。

七、计算题

1、某普通硅酸盐水泥28d的检测结果为:抗折荷载分别是2.98kN、2.83kN、2.38kN,抗压荷载分别是60,3kN、68.5kN、69.3kN、72.8kN、74.4kN、74.6kN,若其3d强度已满足要求,试确定该水泥的强度等级。(注:抗折实验两支撑圆柱之间的中心距为100mm,抗压试验标准压板面积为40mm340mm)。

2、试验室对某施工单位的复合硅酸盐水泥来样进行强度测试,测得28d抗折荷载为3200N、3250N、4000N,28d抗压荷载分别为90kN、92kN、87kN、83kN、91kN、70kN,另假定已测得该水泥的3d抗折和抗压强度能满足32.5、42.5和52.5级复合硅酸盐水泥的强度要求,试评定该水泥的强度等级。(注:抗折实验两支撑圆柱之间的中心距为100mm,抗压试验标准压板面积为40mm340mm;国家标准中该水泥28d抗折强度要求为:32.5级水泥≥5.5 MPa ;42.5级水泥≥6.5MPa;52.5级水泥≥7.0 MPa)

4 混凝土

4.1学习指导

一、内容提要

本章主要讲述普通混凝土的组成材料,混凝土拌合物的性质,硬化混凝土的强度、变形性能及耐久性等性质,混凝土施工质量控制与强度评定,普通混凝土配合比设计,混凝土技术的新进展及其它种类混凝土简介等内容。

二、基本要求

学习内容的中心是围绕着如何采用满足质量要求的各种组成材料,配制成满足工程基本要求的混凝土来进行的。围绕此中心,一是要求掌握各种原材料的选择原则及质量要求,二是要求掌握工程对混凝土基本要求的内容、表示方法及影响因素,三是掌握如何用基本组成材料设计配制出满足工程要求的混凝土。

1、掌握普通混凝土组成材料的品种、技术要求及选用,熟练掌握各种组成材料各项性质的要求、 13

水泥砂浆强度 土木工程材料习题集及答案详解

测定方法及对混凝土性能的影响。[www.61k.com]

2、熟练掌握混凝土拌合物的性质及其测定和调整方法。

3、熟练掌握硬化混凝土的力学性质、变形性能和耐久性及其影响因素。

4、熟练掌握普通混凝土配合比设计方法。

5、了解混凝土技术的新进展及其发展趋势以及其它种类混凝土。

三、重、难点提示

1、重点提示:普通混凝土的组成材料及其要求、混凝土拌合物的性质及要求、硬化混凝土强度、变形性能及耐久性等性质、普通混凝土配合比设计等。

2、难点提示:骨料的粗细程度与颗粒级配、减水剂的作用原理及技术经济效果、外加剂对混凝土的影响及选用、掺合料的作用;混凝土拌合物的性质及其测定和调整方法;硬化混凝土的力学性质、变形性能和耐久性及其影响因素;混凝土强度质量的评定方法;普通混凝土配合比设计方法;高性能混凝土等混凝土技术的新进展。

4.2习题

一、名词解释

1、普通混凝土;2、细骨料;3、粗骨料;4、骨料的颗粒级配;5、砂的粗细程度;6、骨料的坚固性;7、粗骨料的最大粒径;8、饱和面干状态;9、.针状颗粒;10、片状颗粒;11、压碎指标;

12、外加剂;13、减水剂;14、引气剂;15、早强剂;16、.缓凝剂;17、.防冻剂;18、膨胀剂;19、掺合料;20、和易性;21、流动性;22、粘聚性;23、保水性;24、砂率;25、立方体抗压强度;

26、立方体抗压强度标准值;27、混凝土强度等级;28、水胶比;29、标准养护;30、自然养护;

31、蒸汽养护;32、.蒸压养护;33、化学收缩;34、徐变;35、混凝土的碳化;36、碱-骨料反应;

37、环箍效应;38、轻骨料混凝土;39、多孔混凝土;40、高性能混凝土

二、填空题

1、混凝土中的水泥浆在硬化前起_________作用,硬化后起_________作用;骨料一般不与水泥浆起化学反应,其作用是构成混凝土的_________,减小水泥硬化所产生的收缩并可降低造价。

2、混凝土按体积密度的大小可分为________________、_____________和_____________。

3、砂的粗细用 表示,颗粒级配用 或 来判定。骨料级配良好的标准为:空隙率 ,总表面积 。

4、对砂石骨料中杂质的含量要求包括而对骨料的 性和粗骨料中的 含量也需测定。

5、卵石多为 形,表面 ,与水泥粘结性 ,但拌制的混凝土拌合物 好。而碎石颗粒形状为 ,且表面 ,与水泥石粘结强度 ,但拌制的混凝土拌合物 差。

6、砂石含泥量大将严重降低混凝土的。

7、选用细骨料时应是级配好、颗粒大,这样骨料的 和 均较小,不仅节约 ,又有利于硬化后混凝土的性能。

8、选用粗骨料时粒径较大可节约 ,但最大粒径的确定要受到 、 及 的限制,规范规定,粗骨料最大粒径不得超过 的1/4,且不得大于 的3/4。对混凝土实心板,最大粒径不宜超过板厚的 ,且不得超过 mm。

9、石子的最大粒径是指 的上限,如5~31.5mm粒级的骨料其最大粒径为 。

10、粗骨料的强度可用岩石的 和 两种方法表示,而骨料的坚固性用 法来测定,它是用来检验 的能力。

11、混凝土拌合物的和易性包括__________、___________和__________三方面的含义,其中___________可采用坍落度和维勃稠度表示,___________和____________可以通过经验目测。

12、影响和易性的主要因素有 、 、 、 、 。在保证混凝土强度不变及水泥用量不增加的条件下,改善和易性最有效的方法是 、 、 。

13、混凝土立方体抗压强度是用边长 试件,在 条件下养护 天的 14

水泥砂浆强度 土木工程材料习题集及答案详解

来确定的。[www.61k.com]它与混凝土强度等级的差异在于混凝土强度等级是按立方体抗压强度的 来划分的。该值仅是抗压强度 中的一个值,低于该强度值的百分率不超过 。

14、影响混凝土强度的主要因素有________ 、 、___________、____________、和 ,其中____________ 是影响混凝土强度的决定因素。根据此建立的混凝土强度公式为 。

15、提高混凝土强度的措施主要有_______________ 、______________ 、 、 和 ______________ 。

16、混凝土的变形包括_____________、_____________、_____________和______________。

17、混凝土的耐久性主要包括_______________、______________ 、_________ 、 和 ______________ 。提高混凝土耐久性的主要措施是_______________ 、______________ 、_________ 、 和 ______________ 。

18、设计混凝土配合比应同时满足__________、_____________、____________和_________等四项基本要求。

19、设计混凝土配合比时,水胶比主要由 、 和 来确定,为保证混凝土的耐久性,在配合比设计中要控制 和 。

20、混凝土徐变对钢筋混凝土结构的有利作用是________________和_____________ ,不利作用是______________ 。

三、判断题

1、两种砂的细度模数相同,则二者的级配也一定相同。 ( )

2、级配相同的砂,细度模数一定相同。 ( )

3、混凝土中水泥用量越多,混凝土的密实度及强度越高。 ( )

4、碎石混凝土的强度高于卵石混凝土的强度,但其拌合物的流动性要小些。 ( )

5、骨料级配良好的标准是:空隙率小及总表面积也小,这样最省水泥。 ( )

6、用高强度等级水泥配制低强度混凝土时,可掺入适量掺合料来改善和易性,提高密实性。( )

7、流动性大的混凝土比流动小的混凝土的强度低。 ( )

8、对混凝土拌合物流动性大小起决定性作用的是加水量的多少。 ( )

9、在混凝土中掺入减水剂,可增大流动性,同时提高混凝土的强度,并可以节约水泥。( )

10、若混凝土拌合物的粘聚性和保水性不良,可采用适当增大砂率来进行调整。 ( )

11、混凝土中掺入引气剂由于孔隙率的增加使混凝土的抗渗性和抗冻性变差。 ( )

12、水泥用量过多时,将使混凝土的性能降低。 ( )

13、提高混凝土的养护温度,能使其早期强度和后期强度都提高。 ( )

14、混凝土的施工控制水平越高,其强度的标准差越大,则混凝土的水泥用量越少。 ( )

15、混凝土中水泥用量越多,其变形越大;而骨料越多,其变形越小。 ( )

16、影响混凝土耐久性的最主要的因素是混凝土的水胶比。水胶比越小,其耐久性越好。( )

17、混凝土的生产质量水平是根据混凝土的强度标准差和强度保证率来评价的。 ( )

18、混凝土的理论配合比设计还要经过实验室的试配和验证,才能进行施工应用。 ( )

19、混凝土试件尺寸越小,测得的强度越小;加荷速度越快,测得的强度越低。 ( )

20、掺矿物掺合料的混凝土由于水泥用量少,其强度和耐久性较低。 ( )

四、选择题 A. B. C. D.

1、下列有关普通水泥混凝土的叙述,下列那一项不正确?( )

A在混凝土中,除水泥以外,骨料与水的重量约占总用量的80%

B在钢混凝土结构中,混凝土承受压力,钢筋承受拉力

C混凝土与钢筋的热膨胀系数大致相同

D普通混凝土的干表观密度与烧结普通砖相同

15

水泥砂浆强度 土木工程材料习题集及答案详解

2、用高强度等级水泥配制低强度等级混凝土时,为满足技术经济要求,可采用什么措施?( )

A.提高砂率 B.掺适量的掺合料 C.适当提高粗骨料的粒径 D.提高配制强度

3、天然砂是由岩石风化等作用而形成,如要求砂粒与水泥间胶结力强,最佳选用下列哪种砂?( )

A 河沙 B 湖砂 C 海砂 D 山砂

4、配制混凝土时,所用砂、石应尽量使( )。[www.61k.com)

A总表面积大些、总空隙率小些 ; B总表面积大些、总空隙率大些

C总表面积小些、总空隙率小些 ; D总表面积小些、总空隙率大些

5、石子级配中,( )级配空隙率最小。

A连续 B间断 C单粒级 D没有一种

6、压碎指标是表示( )强度的指标。

A普通混凝土 B石子 C轻骨料混凝土 D轻骨料

7、测定混凝土强度时,如采用的是100mm3100mm3100mm的试件,如何确定其强度?( )

A. 必须用标准立方体试件重做; B. 取其所有小试块中的最大强度值

C. 试验结果应乘以换算系数0.95; D. 试验结果应乘以换算系数1.05

8、应该以什么强度来划分混凝土的强度等级?( )

A混凝土的立方体试件抗压强度;B混凝土的立方体抗压强度标准值

C混凝土的棱柱体抗压强度; D混凝土的抗拉强度

9、两种砂子,如果细度模数相同,则它们的级配( )。

A.必然相同 B.必然不同 C.不一定相同 D. 可能相同

10、坍落度是表示塑性混凝土( )的指标。

A.和易性 B.流动性 C.粘聚性 D保水性

11、( )反映混凝土拌和物的稳定性。

A.流动性 B.粘聚性 C.保水性 D.和易性

12、提高混凝土拌合物的流动性,但又不降低混凝土强度的措施为以下4条中的( )。

(1)加大用水量(2)采用合理砂率(3)掺加减水剂(4)保持水灰比不变,增加水泥浆用量。

A.(1)(2)(3);B.(2)(3)(4);C.(1)(3)(4);D.(1)(2)(3)(4)

13、在混凝土配合比设计中,选用合理砂率的主要目的是( )。

A提高混凝土的强度;B节省水泥;C节省粗骨料;D改善拌合物的和易性

14、在原材料一定时,影响混凝土强度的决定性因素是( )。

A.水泥强度等级 B.水泥用量 C.骨料种类 D.水胶比

15、现浇混凝土柱时,若用同一种混凝土一次浇筑到顶,则硬化后( )。

A柱顶的强度最高;B柱中间的强度最高;C柱底部的强度最高;D整条柱的强度是一样的

16、防止混凝土中钢筋锈蚀的主要措施是( )。

A.减小水胶比,提高密实度 B.设置足够的钢筋保护层厚度 C.加阻锈剂 D.A+B

17、大体积混凝土施工常采用的外加剂是( )。

A.缓凝剂 B.减水剂 C.引气剂 D.早强剂

18、大体积混凝土施工时内外温差不宜超过( )。

A 10℃ B 25℃ C 35℃ D 50℃

19、喷射混凝土必须加入的外加剂是( )。

A.早强剂 B.减水剂 C.引气剂 D.速凝剂

20、为配制高强度混凝土,掺入下列什么外加剂为宜?( )

A早强剂 B减水剂 C缓凝剂 D速凝剂

21、采用泵送混凝土施工时,首选的外加剂通常是( )。

A. 减水剂 B. 引气剂 C. 缓凝剂 D. 早强剂

16

水泥砂浆强度 土木工程材料习题集及答案详解

22、在下列因素中,影响混凝土耐久性最重要的是( )。[www.61k.com]

A水泥用量;B骨料级配;C混凝土的强度;D混凝土的密实度

23、寒冷地区室外混凝土工程,常采用的外加剂是( )。

A. 减水剂 B.早强剂 C. 引气剂 D.防冻剂

24、在混凝土用砂量相同时,砂的细度模数越小,说明( )。

A 该混凝土砂的总表面积减小,可节约水泥 B该混凝土砂的总表面积增大,水泥用量提高 C该混凝土用砂的级配不良 D该混凝土用砂的级配良好

25、当采用特细砂配制混凝土时,以下哪项措施不可取?( )

A采用较小砂率 ;B增加水泥用量 ;C采用较小的坍落度 ;D掺减水剂

26、高强混凝土、夏季大体积混凝土、负温施工混凝土、抗冻融混凝土宜选用的外加剂分别为( )

A聚羧酸减水剂、早强剂、木钙减水剂、引气剂

B木钙减水剂、聚羧酸减水剂、引气剂、早强剂

C聚羧酸减水剂、木钙减水剂、引气剂、早强剂

D聚羧酸减水剂、木钙减水剂、早强剂、引气剂

27、混凝土发生碱-骨料反应必须具备什么条件?( )

(1)混凝土中的总碱量超过安全含碱量;(2)使用了活性骨料;(3)混凝土在有水条件下使用;(4)混凝土在干燥条件下使用。

A. (1)(2)(3); B.(1)(2)(4); C.(1)(2); D.(2)(3)

28、下列有关防水混凝土(抗渗混凝土)内容中,哪一条是错误的?

A. 抗渗等级是根据其最大作用水头与混凝土最小壁厚之比确定的

B. 防水混凝土施工浇水养护至少要14d

C. 抗渗混凝土为抗渗等级等于或大于P6级的混凝土

D. 混凝土的抗渗等级是按圆台形标准试件在7d龄期所能承受的最大水压来确定的

29、混凝土配比设计的3个关键参数是( )。

A. 水胶比、砂率、石子用量 ; B. 水泥用量、砂率、单位用水量

C. 水胶比、砂子用量、单位用水量;D. 水胶比、砂率、单位用水量

30、进行混凝土配合比设计时,水胶比是根据混凝土哪一项性质确定的?( )

A 施工和易性 B 体积变形 C 耐久性 D 强度

31、目前常用防水混凝土的配制方法大体可分4种:骨料级配法防水混凝土、普通防水混凝土、 掺外加剂的防水混凝土以及采用特种水泥(如膨胀水泥等)的防水混凝土。其中普通防水混凝土采用的几项措施中,哪一项不正确?( )

A.采用较小的水灰比; B.采用较高的水泥用量(不小于320kg/m3)和砂率(宜为0.35~0.40)

C.掺减水剂; D.水泥强度等级不宜小于42.5,粗骨料最大粒径不宜大于40mm

五、问答题

1、普通混凝土由哪些材料组成?它们在混凝土中各起什么作用?

2、工程对所使用的混凝土有哪些基本要求?

3、两种砂的细度模数相同,级配是否相同?反之,如果级配相同,其细度是否相同?

4、对混凝土的骨料为什么要提出级配的要求?骨料级配良好的标准是什么?

5、影响混凝土拌合物的和易性的主要因素有哪些? 改善和易性的主要措施有哪些?

6、现场浇注混凝土时,为什么严禁施工人员随意向混凝土拌合物中加水?试分析随意加水对混凝土质量的危害。而混凝土成型后为什么又要浇水养护?

7、某工地施工人员拟采取下列方法提高混凝土拌和物的流动性,请判断是否可行?并解释原因:

(1)保持水灰比不变,增加用水量;(2)直接多加水;(3)调整砂率;(4)加入减水剂;(5)提高 17

水泥砂浆强度 土木工程材料习题集及答案详解

粗骨料最大粒径;(6)加强振搗。(www.61k.com]

8、在测定混凝土拌合物的和易性时,可能会出现以下4种情况,问应如何调整?(1)坍落度小于要求,且粘聚性、保水性尚好;(2)坍落度大于要求;(3)坍落度小于要求且粘聚性较好;(4)坍落度大于要求且粘聚性、保水性差,易产生崩塌现象。

9、影响混凝土强度的主要因素是什么?提高混凝土强度主要措施有哪些?

10、下列情况对混凝土抗压强度测定结果有什么影响?(1)试件尺寸加大;(2)试件高宽比加大;(3)试件受压表面加润滑剂;(4)试件位置偏离支座中心;(5)加荷速度加快。

11、混凝土的体积变形有哪些?它们对混凝土有何影响?减小混凝土变形的最主要的措施是什么?

12、当不得不采用普通硅酸盐水泥进行大体积混凝土施工时,可采取哪些措施来保证工程质量?

13、混凝土在下列情况下均能导致其产生裂缝,试解释原因,并指出防止措施。(1)水泥水化热过大;(2)大气温度变化较大;(4)混凝土早期受冻;(5)混凝土养护时缺水;(6)混凝土碳化。

14、何谓混凝土的耐久性?混凝土的耐久性包括哪些内容?如何提高其耐久性?

15、为什么说抗渗性是决定混凝土耐久性的最主要的因素?如何提高混凝土抗渗性?

16、何谓碱-骨料反应?混凝土发生碱-骨料反应的条件是什么?如何防止?

17、在混凝土配合比设计中为什么要控制混凝土的最大水胶比和最小胶凝材料用量?

18、什么叫“粉煤灰效应”? 粉煤灰掺入混凝土中可产生什么作用与效果?

19、掺粉煤灰的混凝土配合比设计有哪几种方法,其含义是什么?

20、高性能混凝土的特点是什么?混凝土达到高性能的技术途径有哪些?

六、计算题

1、用500g烘干砂进行筛分析试验,称得各号筛的筛余量如下表:

2、采用32.5级普通硅酸盐水泥、碎石和天然砂配制混凝土,制作尺寸为100mm>100mm 100mm试件3块,标准养护7d,测得破坏荷载分别为140KN、135KN、142KN。试求:(1)该混凝土7d标准立方体抗压强度;(2)估算该混凝土28d的标准立方体抗压强度;(3)估计该混凝土所用的水胶比。

3、某工程现场浇筑混凝土梁,梁断面为400mm3400mm,钢筋间最小净距为40mm,要求混凝土设计强度等级为C20,工地现存下列材料,试选用合适的水泥及石子。

水泥:32.5复合水泥;42.5复合水泥;52.5复合水泥。

石子:5~10mm;5~20mm;5~30mm;5~40mm。

4、某住宅楼工程构造柱用碎石混凝土的设计强度等级为C20,所用水泥的28d抗压强度实测值为35.0MPa,已知混凝土强度标准差为4.0MPa,试确定混凝土的配制强度fcu,o及满足强度要求的水

胶比。

5、某混凝土的实验室配合比为1︰2.2︰4.2,W/B=0.56,实测其体积密度为2380kg/m3。

(1)试求该混凝土1 m3中各种材料的用量;

(2)若所用水泥为42.5普通水泥,粗骨料为碎石,则该混凝土标准养护到28d其抗压强度可达多高?

6、某混凝土预制构件厂需生产钢筋混凝土大梁,混凝土设计强度等级为C30,现场施工用原材料如下:

42.5级普通硅酸盐水泥,ρc﹦3.10g/cm3,水泥强度富余6%;中砂,级配合格,ρs﹦2.65g/ cm3 ,

砂含水率为3%;5~20mm碎石,级配合格,ρg﹦2.70g/ cm3 ,石子含水率1%。已知混凝土施工

要求的坍落度为10~30mm,试求:(1)每M3 混凝土各材料的用量;(2)混凝土施工配合比;(3)每拌2包水泥时混凝土的各材料的用量;(4)若在混凝土中掺入0.5%FDN减水剂,并减水10%, 18

水泥砂浆强度 土木工程材料习题集及答案详解

减水泥5%,求该混凝土的试验室配合比。(www.61k.com]

7、某工程设计要求混凝土强度等级为C25,工地一个月内按施工配合比施工,先后取样制备了30组试件,测出28d抗压强度如下表,试计算该批混凝土强度的平均值、标准差、强度保证率,并

8、某工地混凝土施工配合比为水泥336kg、砂685kg、卵石1260kg、水129kg,砂含水率5%,石子含水率1%;若采用的是42.5级普通水泥,其实测强度为46.5MPa。求:(1)混凝土实验室配合比;(2)其配合比能否满足C30强度等级的要求?(σ=5.0MPa,αa=0.48,αb=0.33)?

9、试验室测定某工程混凝土抗压强度,采用的试件尺寸为100mm3100mm3100mm,标准养护28d所测得的抗压破坏荷载分别为356KN、285KN、304KN,计算该组试件标准立方体抗压强度值(精确到0.1MPa)。

10、已知某混凝土拌合物经试拌调整后,和易性满足要求,试拌材料用量为:水泥4.5kg,、水

2.7kg、砂9.9kg、碎石18.9kg。实测混凝土拌合物体积密度为2400kg/m3。

(1)试计算基准配合比每m3混凝土各项材料用量为多少?

(2)假定上述配合比可以作为试验室配合比,若施工现场砂含水率4%,石子含水率为1%,求施工配合比。

(3)如果不进行配合比换算,直接把试验室配合比用于施工现场,则实际的配合比如何?对混凝土强度将产生什么影响?

5 建筑砂浆

5.1学习指导

一、内容提要

本章讲述砌筑砂浆组成材料的要求、技术性质及配合比设计方法,介绍抹面砂浆和其它特种砂浆的主要品种、技术性能、配合方法及应用,并阐述了新型干混砂浆的优点。

二、基本要求

掌握砌筑砂浆的组成材料及要求、主要技术性质、测定方法以及配合比设计方法,掌握普通抹面砂浆的功能与特点、防水砂浆的组成,了解干混砂浆及其它类型砂浆。

三、重、难点提示

1、重点提示:砌筑砂浆的技术性质及配合比设计方法、砌筑砂浆的工程应用。

2、难点提示:砌筑砂浆的配合比设计。

5.2习题

一、名词解释

1、建筑砂浆;2、砌筑砂浆;3、抹灰砂浆;4、砂浆的和易性;5、砂浆的流动性;6、砂浆的 保水性;7、水泥砂浆;8、混合砂浆;9、干混砂浆;10、预拌砂浆

二、判断题

1、砂浆用砂的质量要求同普通混凝土用砂。 ( )

2、由于砂浆的强度要求不高,故砂中含泥量可不加以限制。 ( )

3、在配制砂浆时掺入掺合料主要是为了改善和易性和节约水泥。 ( )

4、水泥砂浆中掺入石灰膏会降低砂浆的强度。 ( )

5、砂浆中使用石灰膏掺合料可不必陈伏。 ( )

6、消石灰粉可直接用于砌筑砂浆和抹面砂浆。 ( ) 19

水泥砂浆强度 土木工程材料习题集及答案详解

7、粉煤灰掺入砂浆中不仅能够改善砂浆的和易性,还能提高砂浆的强度、节约水泥。(www.61k.com]( )

8、砂浆的和易性的含义与混凝土相同。 ( )

9、砂浆的流动性用分层度表示,保水性用沉入度表示。 ( )

10、砌筑砂浆的分层度越小,则砂浆的保水性越好。 ( )

11、用于多孔吸水基面上的砌筑砂浆,其强度主要决定于水泥强度和水泥用量,而与水灰比的大小无关。 ( )

12、砂浆施工中允许用调整用水量法来改变砂浆的稠度。 ( )

13、砂浆试块的养护允许采用标准养护或自然养护两种方式。 ( )

14、施工现场如砂浆强度等级或配合比变更时还应制作试件。 ( )

三、填空题

1、建筑砂浆由____、____和____等材料按适当比例配制而成,它和混凝土在组成 上的差别仅在于____。

2、 砂浆按其用途主要分为____ ____、____、____、____等。

3、 水泥强度等级应为砂浆强度等级的____倍。

4、 砌筑水泥是以____为主要原料,加入少量的____和____,经磨细而成的低强 度等级水泥。

5、 石灰膏或粉煤灰在砂浆中的主要作用是使砂浆具有良好的____,所以也称____。

6、 砌筑砂浆用细骨料的技术要求,基本上与混凝土相同,不同之处主要是对砂中的含泥量和 ____限制条件不同。

7、 砂浆的和易性包括____和____两方面的含义,它们分别用指标____和___ 表示。

8、 砂浆流动性的选择,应根据____、____和____来确定。夏天砌筑红砖墙体时, 砂浆流动性应选择____些;砌筑毛石柱时,流动性可选择____些。

9、 硬化后的砌筑砂浆将砖、石粘接成整体性的砌体,并在砌体中起____的作用。

10、在砂浆中渗入____、____等掺合料,可明显提高砂浆的保水性。

11、测定砂浆强度的试件尺寸是 mm的立方体,在 条件下养护 d,测定其 。

12、抹灰砂浆按其功能可分为____、____、____。

13、抹灰砂浆与砌筑砂浆不同,对它的主要技术要求不是____,而是 。

14、防水砂浆通常分为三种 、 和 。

15、由强度计算公式fm,o?C??Afce??B?知,砌石砂浆的强度主要取决于

?W?

和 ;而由fm,o??fceQc/1000??知,砌砖砂浆的强度主要取决于

四、选择题

1、砂浆的保水性用分层度试验测定,其分层度应以多少为宜?( )

A.<10mm B.10~30mm C.20~30mm D. >30mm

2、下列有关砌筑砂浆性质的叙述,哪一项不正确?( )

A.新拌砂浆的流动性用沉入度(稠度值,mm)表示,如用于烧结普通砖砌体,沉入度可选 70~90mm ;B.新拌砂浆的保水性用分层度表示,分层度不宜大于30mm,在砂浆中掺入引气剂主要 是为了提高保水性 ;C.测定砂浆抗压强度的标准试件尺寸是70.7mm370.7mm370.7mm,砂浆的强 度等级共有M2.5、M5、M7.5、M10、M15、M20等6个;

20

水泥砂浆强度 土木工程材料习题集及答案详解

D.用于吸水底面的水泥砂浆的强度主要取决与于水泥强度与水灰比

3、建筑砂浆试件的标准养护条件是( )。(www.61k.com)

A.温度20±3℃,相对湿度>90% B. 温度20±3℃,相对湿度60%~80%

C.温度20±2℃,相对湿度>80% D. 温度20±2℃,相对湿度>90%

4、下面有关抹面砂浆、防水砂浆的叙述,哪一条不正确?( )

A.抹面砂浆一般分为2层或3层进行施工,各层要求不同。在容易碰撞或潮湿的地方,应采 用水泥砂浆;B.外墙面的装饰砂浆常用工艺做法有拉毛、水刷石、水磨石、干粘石、斩假石(即剁 假石)、假面砖等,还可采取喷涂、弹涂、辊压等工艺方法;C.水磨石一般用普通水泥、白色

或彩色水泥拌和各种色彩的花岗岩石渣做面层;D.防水砂浆可用普通水泥砂浆制作,也可在水泥砂 浆中掺入防水剂(氯化物金属盐类及金属皂类防水剂等)来提高砂浆的抗渗能力

5、抹灰砂浆中掺入麻刀纤维材料是为了( )。

A.提高强度 B.提高保温性 C.节约水泥 D.减少收缩开裂

6、砌筑砂浆的配合比应采用下列何者?( )

A.质量比 B.体积比 C.水灰比 D.质量比或体积比

7、测定砂浆抗压强度的标准试件尺寸是( )。

A.70.7mm370.7mm370.7mm B.70mm370mm370mm

C.100mm3100mm3100mm C.40mm340mm340mm

8、在砂浆配合比设计中,当强度保证率为95%时,试配强度fm,o =fm,k–tσ,概率度t应为( )。

A.-1.645 B.-2.05 C.-0.645 D.0.645

9、镶贴外墙面砖、釉面砖所用的砂浆配比及厚度是( )。

A.1:2水泥砂浆,砂浆厚度6~10mm B.1:3水泥砂浆,砂浆厚度6~8mm

C.1:1:6混合砂浆,砂浆厚度15mm D.1:2水泥砂浆,砂浆厚度10~15mm

10、抹面砂浆通常分两层或三层施工,各层抹灰要求不同,因而选用的砂浆也不一样。以下那一种选用不当?

A.用于砖墙底层抹灰,多用石灰砂浆 B.用于混凝土墙底层抹灰,多用混合砂浆

C.用于面层抹灰,多用麻刀灰或纸筋灰灰浆 D.用于易碰撞或潮湿的地方,应采用混合砂浆

11、斩假石又称剁斧石,属于下列哪种材料?

A.装饰混凝土 B.抹面砂浆 C.装饰砂浆 D.合成石材

五、问答题

1、什么是新拌砂浆的和易性?它包括哪两方面的含义?如何测定与表示?砂浆的和易性对工程 质量有何影响?如何改善砂浆的和易性?

2、配制混合砂浆时,掺入石灰膏或粉煤灰对砂浆性能有何影响?

3、影响砂浆强度的主要因素有哪些?

4、工程中为什么常采用水泥混合砂浆?为什么要在抹面砂浆中掺入纤维材料?

5、预拌砂浆有何特点?

六、计算题

1、某工程需配制M10级水泥石灰混合砂浆,采用的原材料为:32.5级复合硅酸盐水泥,堆积 密度为1300 kg/m;含水率2%的中砂,堆积密度为1450kg/m;石灰膏稠度为100mm,堆积密度为 1350 kg/m3。施工水平一般。试求该砂浆的质量配合比与体积配合比。 33

6 墙体材料

6.1学习指导

21

水泥砂浆强度 土木工程材料习题集及答案详解

一、内容提要

本章讲述了砌墙砖、砌块及板材三大类墙体材料的技术性质和工程应用。[www.61k.com]

二、基本要求

掌握砌墙砖、砌块及板材的技术性质和应用特点。

三、重、难点提示

1、重点提示:常用墙体材料的种类及技术特点。

2、难点提示:烧结普通砖的技术性质、等级划分及应用。

6.2习题

一、名词解释

1、烧结普通砖;2、石灰爆裂;3、泛霜;4、抗风化性能;5、烧结多孔砖;6、烧结空心砖;7、蒸压灰砂砖;8、蒸压加气混凝土砌块;9、混凝土小型空心砌块;10、轻集(骨)料小型空心砌块;

11、粉煤灰硅酸盐砌块;12、泡沫混凝土砌块;13、纸面石膏板;14、玻璃纤维增强水泥板(GRC板);15、纤维增强硅酸钙板;16、植物纤维墙板

二、判断题

1、砖的强度等级就是质量等级。 ( )

2、烧砖时窑内为氧化气氛制得青砖,为还原气氛时制得红砖。 ( )

3、灰砂砖的强度等级测试是在砖干燥状态下进行的。 ( )

4、砂浆与灰砂砖的粘接性比与烧结砖的好。 ( )

5、灰砂砖可用于受热、有酸性介质侵蚀或有流水冲刷的部位。 ( )

三、填空题

1、墙体材料可分为 、 和 三大类。

2、烧结普通砖的外形尺寸是 3 3 ,1m3砌体需用砖 块。

3、强度和抗风化性能合格的烧结普通砖,根据 、 、 和 分为优等品、一等品、合格品三个质量等级。

4、烧结普通砖的抗风化性能用 试验或 和 试验来评定。

5、烧结普通砖的生产具有 与 的缺点,性能与施工方面具有 、 、 和 等缺点,。

6、空心砖因具有 和 等优点,故宜用作框架结构填充墙体材料。

四、选择题

1、烧结普通砖的产品质量等级是根据以下哪个确定的?( )

A. 尺寸偏差、外观质量 B. 尺寸偏差、外观质量、强度等级

C. 尺寸偏差、外观质量、强度等级及抗风化性能 D.尺寸偏差、外观质量、泛霜和石灰爆裂

2、烧结普通砖的强度等级划分的依据是( )。

A.抗压强度 B.抗压强度与抗折强度

C.抗压强度与抗折荷载 D.抗压强度平均值和标准值或最小值

3、砌筑有保温要求的非承重墙时,宜选用( )。

A 烧结普通砖 B 烧结多孔砖 C 烧结空心砖 D普通混凝土空心砌块

4、砌筑有保温要求的六层以下建筑物的承重墙宜选用( )。

A. 烧结普通砖 B. 烧结多孔砖 C.烧结空心砖 D. 普通混凝土空心砌块

5、蒸压灰砂砖和蒸压粉煤灰砖的性能与( )比较相近,基本上可以相互替代使用。

A烧结空心砖 B烧结多孔砖 C 烧结普通砖 D 加气混凝土砌块

6、烧结普通砖的致命缺点是( )。

A.自重大,强度低 B.隔声、绝热差 C.施工效率低 D.烧制耗能大,取土占农田 22

水泥砂浆强度 土木工程材料习题集及答案详解

7、保温要求高的非承重墙体应优先选用( )。[www.61k.com]

A 烧结多孔砖 B 烧结空心砖 C 膨胀珍珠岩板 D加气混凝土

8、下列建筑中,何者可以采用蒸压加气混凝土?

A.在地震设防烈度八度及以上地区的建筑 B.建筑物基础及地下建筑

C.经常处于室内相对湿度80%以上的建筑物 D.表面温度高于80℃的建筑物

9、红砖砌筑前,一定要浇水湿润其目的是( )。

A 把砖冲洗干净 B保证砌砖时,砌筑砂浆的稠度

C增加砂浆对砖的胶结力 D减小砌筑砂浆的用水量

10、加气混凝土具有轻质、绝热、不燃等优点,但不能用于下列( )工程。

A.非承重内外填充墙 B.屋面保温层 C.高温炉的保温层 D.三层及以下的结构墙

11、高层建筑安全通道的墙体(非承重墙)应选用的材料是( )。

A烧结普通砖 B烧结空心砖 C加气混凝土砌块 D石膏空心条板

五、问答题

1、烧结普通砖的技术要求主要有哪几项?

2、烧结普通转的强度等级与质量等级是如何划分的?

3、烧结多孔砖和烧结空心砖的强度等级是如何划分的?其用途是什么?

4、什么是红砖、青砖、内燃砖?如何鉴别欠火砖和过火砖

5、烧结普通砖的泛霜和石灰爆裂对砌筑工程有何影响?

6、试说明烧结普通砖耐久性的内容。

7、目前所用的墙体材料有那几类?为什么要进行墙体材料改革?墙体材料的发展方向是什么?

8、当往加气混凝土砌块砌筑的墙体上抹砂浆层时,若采用用于烧结普通砖墙体的方法往墙上浇水后即抹,则一般的砂浆往往被加气混凝土吸去水分而容易干裂或空鼓,请分析原因。

六、计算题

1、问10m2的240mm厚的砖墙需用烧结普通砖多少块?砌筑用砂浆需用多少?

2、有烧结普通砖一批,经抽样测得其10块砖样的抗压强度值分别为:23.5、18.5、17.5、19.4、16.4、19.6、20.2、14.8、18.8、19.0(MPa),试评定该批砖的强度等级。

7 天然石材

7.1学习指导

一、内容提要

本章讲述天然岩石的形成与分类、石材的主要技术性质、常用建筑装饰石材及其选用。

二、基本要求

了解天然岩石的形成与分类,掌握天然石材的主要技术性质,常用建筑装饰石材的品种、特点及其选用要点。

三、重、难点提示

1、重点提示:常用建筑装饰石材的品种、特点及合理选用。

2、难点提示:天然岩石的形成与分类。

7.2习题

一、判断题

1、岩石没有确定的化学组成和物理力学性质,同种岩石,产地不同,性能可能就不同。( )

2、黄铁矿、云母是岩石中的有害矿物。 ( )

3、云母具有极完全解理。 ( )

4、土木工程重要结构物使用的石材,软化系数应大于0.80。 ( ) 23

水泥砂浆强度 土木工程材料习题集及答案详解

5、石材属于典型的脆性材料。(www.61k.com) ( )

6、同种岩石体积密度越大,则孔隙率越低,强度、吸水率、耐久性越高。 ( )

7、岩石的吸水率越小,则岩石的强度与耐久性越高。 ( )

8、大理石主要由方解石组成,故耐酸性差,抗风化性弱,不宜用作室外饰面。 ( )

9、花岗岩主要由石英、长石组成,故耐酸性好,抗风化性强,耐火性差。 ( )

10、不同砂岩的性能差别较大,使用时需加以区别。 ( )

二、填空题

1、 的性质与含量决定岩石的性质。

2、岩石按地质形成条件分为和

3、岩浆岩按形成条件不同分为 、 、 三类。

4、沉积岩按生成条件不同分为、

5、变质岩按来源不同可分为

6、工程上一般主要对石材的 、 、 等物理性质有要求。

7、石材的耐久性主要包括有等。

8、岩石按加工形式主要有

9、料石按加工程度的粗细分为 、 、 、 四种。

10、装饰用板材按表面加工程度分为

11、建筑装饰用的石材主要是 和 两大类。

三、选择题

1、下列关于岩石的结构和构造的描述,何者不正确?

A.岩石的孔隙率越小强度越高 B.岩石中二氧化硅含量越高耐酸性越强

C.岩石有解理面的比无解理面的强度低 D.岩石晶粒越粗其强度越高

2、建筑常用的下列天然石材,按其耐久使用年限由短到长的正确排序应该是( )。

A.石灰石→大理石→花岗石→板石 B.石灰石→板石→大理石→花岗石

C.大理石→石灰石→板石→花岗石 D.板石→石灰石→大理石→花岗石

3、大理岩主要矿物成分是( )。

A.石英 B.方解石 C.长石 D.石灰石

4、下面四种岩石中,耐火性最差的是( )。

A.石灰岩 B.大理岩 C.玄武岩 D.花岗岩

5、花岗岩是一种高级的建筑结构及装饰材料,下列关于花岗岩性能的描述何者不正确?

A.吸水率低 B.耐磨性好 C.能抗火 D.耐酸性好

6、入口处外墙及阶梯拟用石材贴面,下列何者适宜?( )

A.白云石 B.大理石 C.花岗石 D.砂岩

7、制作水磨石用的色石渣,宜选用下列什么石材破碎加工而成?( )

A.花岗岩 B.大理石 C.片麻石 D.石英岩

8、大理岩较耐以下何种腐蚀介质?

A.硫酸 B.盐酸 C.醋酸 D.碱

9、下列四种岩石中,耐久性最好的是( )。

A.石灰岩 B.硅质砂岩 C.花岗岩 D.石英岩

10、大理石饰面板宜使用在( )。

A.室内墙、地面 B.室外墙、地面 C.屋面 D.室内及室外装饰工程

11、下列岩石中,抗压强度最高的是( )。

A.大理石 B.玄武岩 C.花岗岩 D.石英岩

12、下列三种材料按抗拉强度由低到高依次排列正确的是( )。

24

水泥砂浆强度 土木工程材料习题集及答案详解

A.松木(顺纹)、建筑钢材、花岗岩 B.松木(顺纹)、花岗岩、建筑钢材

C.花岗岩、松木(顺纹)、建筑钢材 D.建筑钢材、花岗岩、松木(顺纹)

四、问答题

1、岩石按地质成因是如何分类的?各具有什么特性?

2、什么是矿物和岩石?岩石的结构与构造有什么区别?

3、为什么大多数大理石不宜用于建筑物的室外装饰?

4、在土木工程设计和施工中选择天然石材时,应考虑哪些原则?

5、某城市拟修建一座大型纪念性建筑,室内墙面及地面、室外墙面与墙面浮雕以及广场地面的饰面均采用天然石材,请选用合适的石材品种,并加以分析。[www.61k.com)

6、某学校用石材作校门外贴面,使用一年后,发现表面失光,多年后表面出现裂纹及剥落。请问可能是什么原因?

8 金属材料

8.1学习指导

一、内容提要

本章介绍钢的冶炼与分类;建筑钢材的主要技术性能3、钢的组织与化学成分对其性能的影响;钢材的强化机理及强化方法;建筑钢材的分类、标准与选用;钢材的防护;铝合金与铜合金。

二、基本要求

熟练掌握建筑钢材的力学性能;熟悉建筑钢材的强化机理及强化方法;掌握土木工程中常用建筑钢材的分类及其选用原则;了解建筑钢材的微观结构及其与性质的关系。

三、重、难点提示

1、重点提示:建筑钢材的主要技术性能:抗拉性能、冲击韧性、冷弯性能;化学成分对其性能的影响;钢材的强化机理及强化方法;建筑钢材的分类、标准与选用。

2、难点提示:钢材的强化机理及强化方法;化学成分对其性能的影响。

8.2习题

一、名词解释

1、沸腾钢;2、镇静钢;3、化学偏析;4、屈服点;5、抗拉强度;6、屈强比;7、伸长率;8、冲击韧性;9、冷脆性及脆性临界温度;10、时效与时效敏感性;11、疲劳破坏;12、冷弯性能;13、冷加工强化;14、时效处理;

二、判断题

1、钢材的抗拉强度是钢结构设计时强度取值的依据。 ( )

2、屈强比越小,表明钢材使用时的安全度越高。 ( )

3、钢材的韧性随温度的降低而下降。 ( )

4、对于同种钢材,其伸长率δ10 >δ5。 ( )

5、脆性临界温度越低,钢材的低温冲击性能越好。 ( )

6、负温下使用的钢结构应选用脆性临界温度较使用温度低的钢材。( )

7、时效敏感性越大的钢材,经时效后,其冲击韧性降低越显著。( )

8、相对于拉伸试验,冷弯试验是对钢材的塑性与焊接质量的较为严格的检验。 ( )

9、钢材的疲劳极限与其抗拉强度有关,一般抗拉强度高,其疲劳极限也较高。( )

10、钢材冷加工强化后可以提高屈服强度和抗拉强度,而冷加工强化再经时效处理后只能提高屈服强度。 ( )

11、钢中含磷较多时呈热脆性,含硫较多时呈冷脆性。 ( )

12、钢中含碳量高,珠光体随之增多,故强度、硬度随之相应提高。 ( )

13、钢的含碳量增大使可焊性降低,增加冷脆性和时效敏感性,降低耐大气腐蚀性。( )

14、碳素钢中含碳量越高,则强度越高,塑性越小。 ( ) 25

水泥砂浆强度 土木工程材料习题集及答案详解

15、冷加工强化使钢的弹性模量降低,再经时效处理则得以恢复。(www.61k.com] ( )

三、填空题

1、碳素钢按含碳量的多少分为_______、________和________。建筑上多采用_________。

2、合金钢按按合金元素的含量多少分为_______、________和________。建筑上多采用_________。

3、按冶炼时脱氧程度由低到高,钢可分为_______、________和________三种。

4、低碳钢受拉直至破坏,经历了 、 、 和 四个阶段。

5、钢材抗拉性能的三项主要指标是、、,结构设计中一般以作为强度取值的依据。

6、钢材的力学性能包括 、 、 、 等,工艺性能包括 、 、 和 等。

7、随着时间的延长,钢材的强度、硬度提高,塑性、韧性下降的现象称为钢材的 。

8、对承受振动冲击荷载的重要结构(如吊车梁、桥梁等),应选用冲击韧性较 、时效敏感性较 的钢材。

9、钢中有害元素主要有 、 、 、 、 。P常使钢材的 性增大,而S的增加使钢材产生 性。

10、在钢的组织中,含碳量等于0.8%时的钢称为 ,建筑钢材的含碳量一般不大于0.8%,其基本组织为 和 ,含碳量增大时, 含量增大, 则相应减少,因而 、 随之提高,但 、 则相应下降。

11、碳素结构钢按 划分牌号, 、 随牌号增大而提高, 、 、 随牌号增大而降低。

12、碳素结构钢随着牌号的增大,其拉伸试验三个指标中 和 提高, 降低。

13、普通碳素结构钢Q235-A2F表示 , 普通低合金结构钢Q345-D表示 。

14、钢材的锈蚀主要有两种 、 ,防腐方法有 、 、 。

15、钢材的耐火性较 ,防火方法有 、 、 。

四、选择题A. B. C. D.

1、钢与生铁的区别在于其含碳量应小于( )。

A.4.0% B.3.5% C.2.5% D.2.06%

2、在下列所述的钢材特点中,哪些是正确的?( )

A.抗拉强度与抗压强度基本相等 B.冷拉后使钢材的技术性能大大提高

C.所有的钢材都可以焊接 D.耐火性能好

3、低碳钢的含碳量为( )。

A.小于0.25% B.0.25%~0.60% C.0.60% ~2.06% D.2.06% ~2.50%

4、伸长率是反映钢材( )的指标。

A.弹性 B.塑性 C.脆性 D.韧性

5、下列关于钢材性质的叙述,哪一项不正确?( )

A.使钢材产生热脆性的有害元素是硫;使钢材产生冷脆性的有害元素是磷

B.钢结构设计时,碳素结构钢以屈服强度作为设计计算的依据

C.碳素结构钢分为四个牌号:Q195、Q215、Q235、Q275,牌号越大含碳量越多,钢的强度与硬度越高,但塑性和韧性越低

D.检测碳素结构钢时,必须做拉伸、冲击、冷弯及硬度试验

6、钢材抵抗冲击荷载的能力称为( )。

A.塑性 B.弹性 C.冲击韧性 D.硬度

26

水泥砂浆强度 土木工程材料习题集及答案详解

7、既能揭示钢材内部组织缺陷又能反映钢材在静载下的塑性的试验是( )

A. 拉伸试验 B.冲击试验 C.冷弯试验 D.硬度试验

8、钢材经冷加工强化及时效处理后,其性能会产生下列何种变化?()

A.弹性模量提高 B. 冲击韧性提高 C.塑性提高 D.屈服点大幅度提高

9、有关低结构合金钢及合金元素的内容,下列哪一项是错误的?()

A. 锰是我国低合金结构钢的主加合金元素,可提高钢的强度并消除脆性

B. 低合金高强度结构钢中加入的合金元素总量小于15%

C. 低合金高强度结构钢具有较高的强度,较好的塑性、韧性和可焊性,在大跨度、承受动荷载和冲击荷载的结构物中更为适用

D. 硅是我国合金钢的主加合金元素

10、工程使用钢筋时不必检测的项目是( )。(www.61k.com]

A.屈服点 B.抗拉强度 C.冷弯 D.冲击韧性

11、含碳量直接影响钢材的可焊性,为使碳素结构钢具有良好的可焊性,其含碳量应( )。

A.小于0.50% B.小于0.25% C.在0.25%~0.60% 之间 D.在0.60% ~2.06%之间

12、钢材的疲劳破坏是( )断裂 。

A.弹性 B.塑性 C.韧性 D.脆性

13、对于建筑用碳素钢,其主要强化的晶体组织是( )。

A.铁素体 B.奥氏体 C.渗碳体 D.珠光体

14、对于承受冲击及振动荷载的结构不允许使用( )。

A. 冷拉钢筋 B. 热轧钢筋 C. 热处理钢筋 D.冷轧带肋钢筋

15、要防止钢筋混凝土结构中的钢筋生锈,不能采用下列什么措施?( )

A. 严格控制钢筋、钢丝的质量 B. 设置足够的钢筋保护层厚度

C.掺入重铬酸盐防锈剂 D. 加入氯盐外加剂

16、热轧钢筋按其力学性能分为四级,随级别增大,则钢材的( )。

A. 强度增大,塑性降低 B. 强度增大,塑性增大

C. 强度增大,韧性增大 D. 强度增大,可焊性增大

17、在计算温度为-20°C以下的严寒地区使用的承受动荷载的焊接钢结构宜用( )钢。

A. Q235-A B. Q235-B C. Q235-C D. Q235-D

18、钢材经冷加工(冷拉、冷拔、冷轧)强化处理后,性能将发生显著改变,主要是( )。 Ⅰ强度提高;Ⅱ塑性、韧性增大;Ⅲ变硬;Ⅳ变脆

A.Ⅰ、Ⅱ、Ⅲ B.Ⅰ、Ⅱ、Ⅳ C.Ⅱ、Ⅲ、Ⅳ D.Ⅰ、Ⅲ、Ⅳ

19、在配制大跨度或重荷载的预应力钢筋混凝土结构时,其预应力钢筋宜选用( )。

A.冷拉热轧钢筋 B.冷轧带肋钢筋 C.热处理钢筋 D.钢绞线

20、钢结构防止锈蚀的方法通常是表面刷漆。下列哪种是正确的做法?( )

A.刷调和漆 B.刷沥青漆 C. 用沥青漆打底,机油抹面 D.用红丹做底漆,灰铅漆作面漆

五、问答题

1、沸腾钢与镇静钢在性能上有何差别?

2、钢结构设计中为什么以屈服点作为强度取值的依据?

3、钢材的屈强比的大小对其使用性能有何影响?

4、钢材经冷加工强化及时效处理后,其力学性能有何变化?工程中对钢筋进行冷加工及时效处理的主要目的是什么?

5、工地上为何常对强度偏低而塑性偏大的低碳盘条钢筋进行冷拉?

6、含碳量对建筑钢材的性质有何影响?

7、建筑钢材的主要检验项目有哪些?反映钢材的什么性质?

8、碳素结构钢随着牌号的增大,其主要技术性质有何变化?

27

水泥砂浆强度 土木工程材料习题集及答案详解

9、为什么Q235号碳素结构钢被广泛应用于建筑工程?

10、低合金高强度结构钢与碳素结构钢相比有哪些优点?

11、热轧钢筋按什么指标划分牌号?各牌号钢筋的适用范围是什么?

六、计算题

1、某建筑公司从新进货的一批热轧钢筋中抽样,并截取钢筋做拉伸试验,测得如下结果:屈服点荷载为42.4KN和41.5KN;抗拉极限荷载为62.0kN和61.6KN,钢筋公称直径为12mm,标距为60mm,拉断后长度分别为71.1mm和72.0mm。[www.61k.com]问该批钢筋属于何牌号?该钢材的安全可靠程度和有效利用率如何?

9 合成高分子材料

9.1学习指导

一、内容提要

本章介绍合成高分子材料的组成、结构与性能的关系;介绍常用建筑塑料、涂料及胶粘剂的组成、主要品种及性能特点。

二、基本要求

1、熟悉合成高分子材料的性能特点及主要高分子材料的品种。

2、熟悉土木工程中合成高分子材料的主要制品及应用(包括塑料及其型材、涂料、粘结剂等)。

三、重、难点提示

1、重点提示:常用建筑塑料、涂料及胶粘剂的基本性能与选用。

2、难点提示:合成高分子材料的结构及其与性能的关系。

9.2习题

一、名词解释

1、聚合度;2、加聚反应及加聚物;3、均聚物与共聚物;4、缩聚反应及缩聚物;5、热塑性聚合物;6、热固性聚合物;7、聚合物的老化;8玻璃钢;9、土工合成材料

二、判断题

1、热塑性树脂的耐热性比热固性树脂差。 ( )

2、塑料的缺点是刚度差、耐热性低、易燃及易老化等。 ( )

3、体型聚合物的化学稳定性比线型聚合物高。 ( )

4、聚苯乙烯泡沫塑料是保温性能很好的材料。 ( )

5、热固性塑料与热塑性塑料相比,强度、硬度及耐热性较高,但塑性较低。( )

6、外墙涂料的耐水性与耐候性要求比内墙涂料高。 ( )

三、填空题

1、加聚物的结构大多为 分子,它属于 性聚合物,缩聚物的结构可为 或 分子,其取决于反应的程度和反应的阶段,其中大部分缩合物属于 性聚合物。

2、线型结构聚合物可以 在一定溶剂中,加热可 。体型聚合物加热时一般只能 ,同时不 有机溶剂。

3、在塑料中合成树脂起 作用,固化剂的作用是使聚合物中的 分子交联成 分子。

4、塑料在使用条件即 、 、 等作用下,其聚合物的 和 发生变化,致使塑料性质恶化,此现象即为塑料的老化。

5、塑料的老化包括两种主要反应,一是分子链的交联,它是使聚合物的分子从 结构转变为 结构的过程,此过程会使塑料出现 现象,二是分子链的降(裂)解,它是使分子链产生 ,但并不改变其化学组成的过程,此过程会使塑料出现 等现象。

四、选择题

1、不属于合成高分子材料的特点是( )。

A.比强度高 B.耐热性差 C.耐腐蚀性好 D.弹性模量高

28

水泥砂浆强度 土木工程材料习题集及答案详解

2、热塑性聚合物的性能特点是( )。[www.61k.com]

A.体型结构 B.只能塑制一次 C.加热即可软化 D.由单体缩聚反应形成

3、热固性塑料的性能特点是( )。

A.线型结构 B.弹、塑性较好 C.加热后可反复塑制 D.溶、熔过程是不可逆的

4、下述聚合物中不属于热塑性的是( )。

A.聚氯乙烯 B.环氧树脂 C.聚丙烯 D.聚苯乙烯

5、下列塑料中,属于热固性塑料的是( )。

A.聚乙烯塑料 B.聚丙烯塑料 C.有机硅塑料 D.ABS塑料

6、塑料的耐寒温度(即脆化温度)是( )。

A.-10℃ B -20℃ C -30℃ D-40℃

7、硬质聚氯乙烯使用温度是( )。

A.低于50℃ B 低于60℃ C 低于80℃ D低于100℃

8、在火中较难燃烧、离火后自熄的塑料是( )。

A.聚氯乙烯 B 聚乙烯 C 聚丙烯 D 聚苯乙烯

9、下面树脂为建筑中常用的树脂,它们之中属于热塑性的是( )。

I 聚氯乙烯;II 聚乙烯;III 聚苯乙烯;IV 聚甲基丙烯酸甲酯;V 酚醛树脂;VI 聚氨酯;VII ABS塑料;VIII 脲醛树脂;IX 玻璃钢;X 不饱和聚脂树脂。

A I、II、III、IV、VI ;B I、II、III、IV、VII;C I、II、III、VI、X; D I、II、III、VI、VII

10、在下面4种塑料中,常用来制作建筑用给排水管及卫生洁具的塑料是( )。 I.聚氯乙烯(PVC) II.聚乙希(PE) III.聚丙烯(PP) IV.聚苯乙烯(PS)

A.I、II B.I、IV C.II、III D.II、IV

11、塑料的性质中说明塑料是一种有毒性物质,但经卫生部门检测后, 我们仍将用于装饰或供水用设备的原因是( )。

A 掺入防毒掺料;B 加做了保护层;C毒性非常小,对人体无害; D 固化后的塑料无毒

12、聚合物在加工使用过程中,需要加入硬化剂才能硬化的是( )。

A.聚氯乙烯 B 环氧树脂 C聚苯乙烯 D 不饱和聚脂

13、与钢、木及铝合金门窗相比,塑料门窗具有很多优点,但它不足的是( )。

A.耐水、耐腐蚀 B 隔热、隔声性好 C气密性、水密性好 D刚度差

14、常见地面装饰品(地面卷材、地面砖)主要使用( )塑料制作。

A. 聚氯乙烯 B 聚丙烯 C 氯化聚乙烯 D 尼龙

15、下列涂料中只宜用于室内的是( )。

A.苯-丙涂料 B丙烯酸酯涂料 C氯化橡胶涂料 D聚醋酸乙烯乳胶漆

16、下列四种外墙涂料中,哪一种不属于溶剂型的涂料( )

A.苯乙烯焦油涂料 B.丙烯酸乳液涂料 C.过氯乙烯涂料 D.聚乙烯醇缩丁醛涂料

17、胶粘剂可将两种材料粘结在一起,因此它必须具有的性能是( )。

I粘结强度大;II不易老化,膨胀收缩变形小;III具有足够的流动性; IV防火性能好。

A.I、II、III B.I、II、IV C.III、III、IV D.I、III、IV

18、下面四种胶粘剂中,不能作结构胶的是( )。

A.环氧树脂 B.聚氨酯 C.有机硅 D.酚醛树脂

五、问答题

1、建筑塑料的优缺点是什么?

2、热塑性塑料与热固性塑料各有何特点?

3、建筑上对内墙涂料与外墙涂料的性能要求有何不同?

29

水泥砂浆强度 土木工程材料习题集及答案详解

4、土木工程中常用的胶粘剂有哪些?其特性和用途如何?

5、土工合成材料主要有哪几类?它们在使用过程中发挥哪些功能?

10 木材

10.1学习指导

一、内容提要

本章介绍木材的分类与构造,木材的物理力学性质,木材的防腐、防火及综合利用。(www.61k.com]

二、基本要求

了解木材的分类与构造,掌握木材的物理力学性质,了解木材的防腐、防火及综合利用。

三、重、难点提示

1、重点提示:木材的物理力学性质。

2、难点提示:纤维饱和点对木材物理力学性质的影响。

10.2习题

一、名词解释

二、判断题

三、填空题

四、选择题

5、为了便于比较各种木材在不同含水率时的强度,我国规定以含水率为()的强度作为标准。

A.10% B.15% C.20% D .30%

6、木材的持久强度约为木材极限强度的()。

A . 50%~60% B. 70%~80% C.80%~90% D.90%~100%

7、在木结构设计使用中,木材不能长期处于()的温度中使用。

A.50°C以上 B.60°C以上 C.65°C以上 D .70°C以上

8、为防止木结构腐蚀虫蛀,应采取的措施是()。

A.将木材干燥至20%以上的含水率 B.木屋架山墙通风,设老虎窗

C.刷油漆 D .用防腐剂浸渍木材

9、木材胶合板的特点是()。

A.各向异性 B.横纹抗拉强度高 C.浸湿后变形较大 D .材质均匀

10、原木的径级是检查原木的哪个部位()。

A.大头 B.小头 C.大小头平均 D .中间部位

11、有关我国木材资源的下列描述哪条不对?()

A.森林储蓄量世界第5,乔木树种2000种B.森林资源地理分布较为均匀

C.全国用木材年均净增量2.2亿m,而消耗3.2亿m D.森林资源及人工林质量下降

12、影响木材强度的下列诸多因素,哪一个并不重要?()

A.含水率 B.温度、负荷时间 C.容重 D.疵点、节疤

13、当木材中没有自由水,而细胞壁内充满吸附水,并达到饱和状态时的含水率,成为纤维饱和点。一般木材的纤维饱和点为多少?()

A . 12% B. 15% C.15%~25% D.25%~35%

14、阔叶林木材不适合于做下列哪种用途?()

30 33

水泥砂浆强度 土木工程材料习题集及答案详解

A.承重结构 B.室内装修 C.家具 D.胶合板

五、问答题

1、木材含水率的变化对木材性质有何影响?

2、试说明木材腐朽的原因。[www.61k.com)有哪些方法可防止木材腐朽?说明其原理。

3、影响木材强度的主要因素有哪些?怎样影响?

4、木材为何是各向异性材料?

是较多的用于抗弯和承受顺纹抗压?

11、试述木材的优缺点。工程中使用木材时的原则是什么?

13、工程中可采取哪些措施消除含水的不利影响?

6)计算题

1、某地产红松含水率10%时顺纹抗压强度为44.5MPa,求该红松在标准含水率时的顺纹抗压强度值。

2、一块松木试件长期置于相对湿度为60%,温度为20°C的空气中,测得其顺纹抗压强度为49.4MPa,问此木材在标准含水率情况下抗压强度为多少?

3、已知松木标准含水率时的抗弯强度为64.8 MPa,求(1)含水率分别为12%、28%和36%时的抗弯强度;(2)由计算结果绘出木材强度与其含水率的关系曲线;(3)依据所作曲线讨论木材强度与含水率的关系。

11 沥青与防水材料

11.1学习指导

一、内容提要

本章介绍石油沥青的技术性质及工程应用,常用防水材料的类型、技术性质及工程应用。

二、基本要求

掌握石油沥青的组分、技术性质、标准与选用以及沥青的掺配,了解沥青的改性。掌握防水材料的主要类型、性能特点及选用要领。

三、重、难点提示

石油沥青的技术性质、选用以及沥青的掺配;防水材料的主要类型、性能特点及选用要领。 11.2习题

一、名词解释

1、沥青的塑性;2、温度敏感性;3、粘滞性;4、大气稳定性;5、溶解度;6、闪点

二、判断题

1、石油沥青的组分是油分、树脂和地沥青质,它们都是随时间的延长而逐渐减少的。( )

2、石油沥青的粘滞性用针入度表示,针入度值的单位是“mm”。 ( )

3、当温度在一定范围内变化时,石油沥青的粘性和塑性变化较小时,则为温度敏感性较大。( )

4、石油沥青的牌号越高,其温度敏感性越大。 ( )

5、石油沥青的软化点越低,则其温度敏感性越小。 ( )

6、为了提高沥青的粘结能力和增加温度敏感性,常常加入一定数量的矿物填充料。 ( )

7、石油沥青中的有害成分包括蜡、沥青质和树脂。 ( )

三、填空题

1、石油沥青确定其牌号的三大技术指标是 、 和 ,它们分别表示石油沥青的 、 和 性。

2、石油沥青的牌号越高,其粘性;塑性。

3、石油沥青的温度敏感性是沥青的性和性随温度变化而改变的性能。当温度升高时,沥青的 性增大, 性减小。

31

水泥砂浆强度 土木工程材料习题集及答案详解

4、冷底子油是由和

5、沥青胶是由

四、选择题

1、石油沥青的牌号是由3个指标组成的,在下列指标中的哪个指标与划分牌号无关?( )

A.针入度 B.延度 C.塑性 D.软化点

2、以下关于沥青的说法,何者是错误的?( )

A.沥青的牌号越大,则其针入度值越大 B.沥青的针入度值越大,则其粘性越大

C.沥青的延度越大,则其塑性越大 D.沥青的软化点越低,则其温度稳定性越差

3、石油沥青的主要技术性质包括以下哪些?( )

I.稠度 II.塑性 III.闪点 IV.大气稳定 V.温度稳定性

A.I、II、III B.IV、V C.I、II、III、V D.I、II、IV、V

4、沥青的软化点表示沥青的何种性质?( )

A.粘性 B.塑性 C.温度敏感性 D.大气稳定性

5、下列有关石油沥青改性的叙述,哪一项不正确?( )

A.常用橡胶、树脂和矿物填料等来改善石油沥青的某些性质

B.橡胶是沥青的重要改性材料,它和沥青有较好的混溶性,并能使沥青具有橡胶的很多优点,如高温变形性小、低温柔性好等。[www.61k.com]橡胶在-30~120℃范围内具有极为优越的弹性。

C.在沥青掺入矿物填料能改善沥青的粘结能力和耐热性,减小沥青的温度敏感性

D.用某些树脂(如古马隆树脂、聚乙烯等)可以改进沥青的耐寒性、耐热性、粘结性和不透气性。

6、有关粘稠石油沥青三大指标的内容中,下列哪一项是错误的?( )

A.石油沥青的粘滞性(粘性)可用针入度(1/10mm)表示,针入度属相对粘度(即条件粘度),它反映沥青抵抗剪切变形的能力 B.延度(伸长度,cm)表示沥青的塑性

C.软化点(%)表示沥青的温度敏感性

D.软化点高,表示沥青的耐热性好、温度敏感性小(温度稳定性好)

7、沥青是一种有机胶凝材料,以下哪个性能是不属于它的?( )

A.粘结性 B.塑性 C.憎水性 D.导电性

8、用有机溶剂和沥青融合,可制成一种沥青涂料,称为冷底子油。冷底子油应涂刷在干燥的基层上,通常要求水泥砂浆找平层的含水率应不大于多少?( )

A.5% B .8% C.10% D.15%

9、冷底子油主要是用作下列何种用途?( )

A.做屋面防水层 B.涂刷防水工程的底层 C.粘贴防水卷材 D.嵌缝材料

10、沥青胶的技术性能包括3方面的指标,下列何者除外?( )

A.气密性 B.柔韧性 C.耐热度 D.粘结力

11、国标中规定,用于层面及底下防水作用的沥青软化点应选用比本地区屋面表面可达到的最高温度(或防水层面周围介质可能达到的最高温度)高多少度?( )

A.20℃ B.20~25℃ C.25~40℃ D.40℃

12、石油沥青中加入再生的废橡胶粉,并进行混炼,主要是为了提高沥青的何种性能?( )

A.沥青的粘性 B.沥青的抗拉强度 C.沥青的耐热性 D.沥青的低温柔韧性

13、下列防水材料标号(牌号)的确定,哪一项是错误的?( )

A.粘稠石油沥青按针入度指标划分牌号,每个牌号还应保证相应的延度和软化点等

B.沥青胶(沥青玛蹄脂)的标号主要以耐热度划分,柔韧性、粘结力等也要满足要求

C.沥青油毡的牌号主要以油毡每平方米重量划分

D.APP及SBS改性沥青防水卷材以10m2卷材的标称重量(kg)作为卷材的标号

32

水泥砂浆强度 土木工程材料习题集及答案详解

14、在铺设屋面油毡防水层之前,在基层上涂刷冷底子油。(www.61k.com)关于冷底子油的作用,下列何者是正确的?( )

A.封闭基层的气孔 B.加强油毡防水层和基层的粘结力

C.防止水分进入基层 D.防止水分进入防水层

15、改性沥青油毡是用多种高分子材料分别以沥青和纸胎进行改性,沥青油毡的哪些性能改变了?( )

I.断裂延伸率高 II.低温柔韧性好 II.有较好的耐高温性 IV.改善了纸胎的粘结力

A.II、III B.I、II、III C.II、III、IV D.I、II、III、IV

16、下列有关防水材料的叙述,哪一项是错误的?( )

A.聚氯乙烯胶泥是以煤焦油、PVC树脂为基料,加入适量增塑剂(苯二甲酸二丁酯等)、稳定剂(硬脂酸钙等)及填料等在140℃下塑化而成,为热施工防水接缝材料

B.聚氯乙烯油膏是用废旧PVC塑料代替PVC树脂粉加工而成,成本较低,热用,也可冷用(加溶剂稀释)

C.目前我国防水卷材每卷长度大多为30m

D.三元乙丙防水卷材属高档合成高分子防水卷材,性能好,使用寿命长,在-48~120℃下可长期使用。

17、三元乙丙防水卷材施工点及注意事项不包括以下哪项?( )

A.基层需用水泥砂浆找平、干燥 B.复杂部位、铺贴前须加一层

C.铺贴卷材时,应从流水坡最上坡开始 D.卷材长边搭接5mm、短边搭接7mm

18、沥青胶(玛蹄脂)的标号是根据什么来划分的?( )

A.耐热度 B.延度 C.针入度 D.软化点

19、建筑石油沥青的牌号越大,则其( )

A.粘性越大 B塑性越小 C.软化点越高 D.使用年限越长

20、沥青防水卷材是我国常用的传统防水材料,它与改性沥青防水卷材相比,主要缺点有以下哪些?( )

I.耐热度差 II.低温柔韧性差 III.耐久性差 IV.施工及材料成本高

A.I、II、III B.I、II、IV C.II、III、IV D.I、III、IV

五、问答题

1、石油沥青的主要技术性质是什么?各用什么指标表示?影响这些性质的因素主要有哪些?

2、与传统的沥青防水卷村相比较,合成高分子防水卷材有什么突出的优点?

3、为满足防水要求,防水卷材应具有哪些技术性能?

4、防水涂料应满足的基本性能有哪些?

5、密封膏的性能要求有哪些?

6、怎样划分石油沥青的牌号?牌号大小与沥青主要技术性质之间的关系怎样?

7、沥青为什么会老化?

8、石油沥青的老化与组分有何关系?老化过程中性质有哪些变化?沥青老化对工程有何影响?

9、在建筑屋面防水工程中,选用石油沥青的原则是什么?

10、为什么说沥青防水卷材是低档防水卷材?

11、什么是乳化沥青和冷底子油?它们的特点是什么?

12、沥青胶是如何配制的?试述其特性和用途。

13、试述橡胶基和树脂基防水卷材的主要品种、特性和应用。

14、对石油沥青进行改性的意义和目的是什么?

15、主要有哪两类石油沥青改性剂?它们改善了沥青的哪些性能?

六、计算题

33

水泥砂浆强度 土木工程材料习题集及答案详解

1、某建筑工程屋面防水,需用软化点为75℃的石油沥青,但工地仅有软化点为95℃和25℃的两种沥青,问应如何掺配?

2、某工地需要使用软化点为85℃的石油沥青5t,现有10号石油沥青3.5t,30号石油沥青1t和50号石油沥青3t。(www.61k.com)试通过计算确定出3种牌号沥青各需用多少t?

12绝热材料与吸声材料

12.1学习指导

一、内容提要

本章介绍绝热材料与吸声材料的性能要求、构造特点及选用。

二、基本要求

了解绝热材料的主要类型及性能特点,吸声材料的主要类型及性能特点。

12.2习题

一、判断题

1、加气混凝土砌块多孔,故其吸声性能好。 ( )

2、材料吸水后导热系数增加,但材料中的水结冰成为固体后,导热系数降低。( )

3、材料吸湿性越好,其绝热性也越好。 ( )

4、屋面工程中一般将防水层设置在保温层的下层。 ( )

5、材料孔隙率越高,吸声性能也越好。 ( )

6、绝热材料与吸声材料一样,都需要孔隙结构为封闭孔隙。 ( )

7、材料的吸声效果越好,其隔声效果也越好。 ( )

8、材料吸湿后,会降低其吸声性能。 ( )

二、填空题

1、隔声主要是指隔绝

2、材料孔隙率,吸声性能较好。

三、选择题

1、保温隔热材料的导热系数与下列因素的关系,以下哪个叙述不正确?( )

A.容重较小的材料,其导热系数也较小B.材料吸湿受潮后,其导热系数就减小

C.材料的温度升高以后,其导热系数就增大

D.对于各向导性的材料,当热流平行于纤维方向时,其导热系数就增大。

2、为了保证绝热材料的绝热效果,工程上常在可能出现冷凝的界面上设置隔气层,用作隔气层的材料下列何者应除外?( )

A.沥青 B.塑料 C.岩棉毡 D.铝箔

3、膨胀珍珠岩在建筑工程上的用途不包括以下哪项?( )

A.用做保温材料 B.用做隔热材料 C.用做吸声材料 D.用做防水材料

4、下述关于绝热材料特征的叙述,何时者是错误的?( )

A.几乎所有的绝热材料都有较小的体积密度和较大的孔隙率

B.优良的绝热材料应具有开通、细小的孔隙特征

C.绝大多数绝热材料具有吸湿性 D.有机材料导热系数小于无机材料

5、为了保温及隔热,经常用于管道保温的材料不包括以下哪项?( )

A.石棉 B.岩棉 C.矿棉 D.玻璃棉

6、以下4种保温隔热材料,哪一种不适合用于钢筋混凝土屋顶屋面上?( )

A.膨胀珍珠岩 B.岩棉 C.加气混凝土 D.水泥膨胀蛭石

7、材料对不同频率的声波的吸声能力不同,通常把对125、250、500、1000、2000、4000Hz6个频率的平均吸声系数大于多少的材料,称为吸声材料?( )

34

水泥砂浆强度 土木工程材料习题集及答案详解

A.>0.2 B.>0.5 C.>0.8 D.>1

8、关于吸声材料的特征,下列何种说法是正确的?( )

A.材料厚度增加可能提高低频吸声效果 B.开口孔隙率大的材料,往往吸声系数小

C.较为密实的材料吸收高频声波的能力强 D.材料背后有空气层,其吸声系数将降低

9、影响多孔性吸声材料的吸声效果,以下那一条叙述是错误的?( )

A.材料的重量 B.材料的厚度 C.材料的形状 D.空隙的特征

10、根据吸声材料的作用原理选择吸声材料时,以下哪一条叙述是错误的?( )

A.多孔性吸声材料对高频和中频的声音吸声效果较好 B.薄板共振吸声结构主要是吸收低频声音

C.穿孔板或空气共振吸声结构,对中频的吸收能力强 D.帘幕吸声体对低频的吸收能力强

11、大中型冷库维护结构所用的隔热材料,应为不易变质、变形,不散发异味的难燃或非燃烧材料。[www.61k.com)目前常用的有( )

Ⅰ稻壳 Ⅱ岩棉 Ⅲ聚苯乙烯泡沫塑料 Ⅳ沥青珍珠岩

A.Ⅰ、Ⅱ B、Ⅱ、Ⅲ C、Ⅲ、Ⅳ D、ⅡⅣ

12、某礼堂内壁采用多孔吸声材料,并对内壁表面做如下装修,问何种做法是正确的?( )

A 表面刷油漆 B 表面加贴墙纸 C表面贴装饰板 D 表面喷涂透气水性色浆

13、用多孔吸声材料来提高吸声与隔声效果,下列哪条属不当措施?

A、增大容重 B、增加厚度 C、增多空隙 D、适度湿润

四、问答题

1、何为绝热材料?建筑上使用隔热材料有何意义?

2、绝热材料为什么总是轻质的?使用时为什么一定要防潮?

3、试述含水量对绝热材料性能的影响?

4、材料的吸声性能用什么指标表示?何谓吸声材料?

5、影响绝热材料绝热性能的因素有哪些?

6、吸声材料与绝热材料在结构上的区别是什么?为什么?

7、影响多孔吸声材料吸声效果的因素有哪些?

8、为什么不能简单地将一些吸声材料作为隔热材料来用?

13 建筑装饰材料

13.1学习指导

一、内容提要

本章介绍建筑装饰材料的基本要求,常用建筑装饰材料的性能特点与应用(包括装饰石材、装饰混凝土、建筑陶瓷、建筑玻璃、金属装饰材料、建筑装饰塑料制品、装饰涂料等)。

二、基本要求

了解装饰材料的主要类型及性能特点。

13.2习题

一、判断题

1、大理石易用于室外装饰。 ( )

2、釉面砖常用于室外装饰。

3、钢化玻璃的优点之一就是在施工现场加工容易。

4、建筑石膏可以用于浴室装饰。

5、琉璃制品是玻璃制品的一种。 ( ) ( ) ( ) ( )

二、填空题

1、普通水泥呈现青灰色的原因主要与 含量有关。

2、天然石材中钍、镭等放射性元素衰变后释放出 。

35

水泥砂浆强度 土木工程材料习题集及答案详解

三、选择题

1、选择寒冷地区外墙面砖时,在面砖的多项指标中,必须考虑以下2项指标。(www.61k.com]( )

Ⅰ、面砖厚度 Ⅱ吸水率 Ⅲ抗冻性能 Ⅳ面砖的平面尺寸

A、Ⅰ、Ⅱ B、Ⅱ、Ⅲ C、Ⅲ、Ⅳ D、Ⅰ、Ⅳ

2、建筑饰面用的外墙面砖和地面砖属于何种陶瓷制品?

A、粗陶 B、精陶 C、粗炻器 D、瓷器

3、在下列玻璃的品种中,哪一种属于装饰玻璃?﹙﹚

A、中空玻璃 B、夹层玻璃 C、钢化玻璃 D、磨光玻璃

4、在我国目前生产的4种建筑陶瓷面砖中,以下哪项不用于室外墙面装饰?﹙﹚

A、陶瓷面砖 B、防滑面砖 C、陶瓷锦砖 D、釉面砖

5、镀膜玻璃具有很多优点,因此在建筑中得到广泛应用,但以下何项不属于它的优点?﹙ ﹚

A、对太阳辐射热有较高的反射能力可以节能

B、有单项透射性,视线透过玻璃可看清光强一面的景物

C、耐火、耐高温,提高了玻璃的耐火极限 D、可调节室内可见光量,使室内光线柔和舒适

6、下列玻璃中,哪种是防火玻璃,可起到隔绝火热的作用?﹙﹚

A、吸热玻璃 B、夹丝玻璃 C、热反射玻璃 D、钢化玻璃

7、在建筑玻璃中,下述那种玻璃不适用于保温、隔热要求的场合?﹙﹚

A、镀膜玻璃 B、中空玻璃 C、钢化玻璃 D、泡沫玻璃

8、以下几种玻璃中,何者不具备透光不透视的特点?﹙ ﹚

A、压花玻璃 B、磨砂玻璃 C、玻璃砖 D、镀膜玻璃

9、在建筑玻璃中,以下哪个不属于用于防火和安全使用的安全玻璃?﹙﹚

A、镀膜玻璃 B、夹层玻璃 C、夹丝玻璃 D、钢化玻璃

四、问答题

1、对装饰材料在外观上有哪些基本要求?

2、如何选用装饰材料?

3、建筑陶瓷常用的品种有哪些?各有哪些特点?

4、浮法玻璃的主要特点是什么?

0 绪论习题解答

一、名词解释

1、产品标准:是为保证产品的适用性,对产品必须达到的某些或全部要求所指定的标准。其范 围包括:品种、规格、技术性能、试验方法、检验规则、包装、储藏、运输等。建筑材料产品,如各种水泥、陶瓷、钢材等均有各自的产品标准。

2、工程建设标准:是对基本建设中各类的勘察、规划设计、施工、安装、验收等需要协调统一 的事项所指定的标准。与选择和使用建筑材料有关的标准,有各种结构设计规范、施工及验收规范等。

二、填空题

1有机材料 无机材料 复合材料;2、国家标准 行业标准 地方标准与企业标准

三、简答题

1、土木工程材料可从不同角度加以分类,如按化学成分,可分为无机材料、有机材料和复合材料;如按材料的功能,可分为结构材料与功能材料两类;如按材料在建筑物中的部位,可分为承重构件(梁、板、柱)、屋面、墙体、地面等材料。

2、土木工程材料有下列发展趋势:

(1)高性能化。例如研制轻质、高强、高耐久、优异装饰性和多功能的材料,以及充分利用和 36

水泥砂浆强度 土木工程材料习题集及答案详解

发挥各种材料的特性,采用复合技术,制造出具有特殊功能的复合材料。(www.61k.com]

(2)多功能化。具有多种功能或智能的土木工程材料。

(3)工业规模化。土木工程材料的生产要实现现代化、工业化,而且为了降低成本、控制质量、便于机械化施工,生产要标准化、大型化、商品化等。

(4)生态化。为了降低环境污染、节约资源、维护生态平衡,生产节能型、利废型、环保型和保健型的生态建材,产品可再生循环和回收利用。

3、实行标准化对经济、技术、科学及管理等社会实践有着重要意义,这样就能对重复性事物和概念达到统一认识。以建筑材料性能的试验方法为例,如果不实行标准化,不同部门或单位采用不同的试验方法。则所得的试验结果就无可比性,其获得的数据将毫无意义。所以,没有标准化,则工程的设计、产品的生产及质量的检验就失去了共同依据和准则。由此可见,标准化为生产技术和科学发展建立了最佳秩序,并带来了社会效益。

1通过对材料有关质量文件的书面检验初步4、工程实际中对材料进行质量控制的方法主要有:○

2对工程拟采用的材料进行抽样验证试验。根据检验所得的技术指标确定其来源及基本质量状况;○

3来判断其实际质量状况,只有相关指标达到相应技术标准规定的要求时,才允许其在工程中使用;○

在使用过程中,通过检测材料的使用功能、成品或半成品的技术性能,从而评定材料在工程中的实

4在使用过程中,材料技术性能出现异常时,应根据材料的有关知识判定其原因,际技术性能表现;○

并采取措施避免其对于工程质量的不良影响。

5、土木工程材料课程具有内容繁杂、涉及面广、理论体系不够完善等特点,因此学习时应在首先掌握材料基本性质和相关理论的基础上,再熟悉常用材料的主要性能、技术标准及应用方法;同时还应了解典型材料的生产工艺原理和技术性能特点,较清楚地认识材料的组成、结构、构造及性能;必须熟悉掌握常用土木工程材料的主要品种和规格、选择及应用、储运与管理等方面的知识,掌握这些材料在工程使用中的基本规律。

材料试验是检验土木工程材料性能、鉴别其质量水平的主要手段,也是土木工程建设中质量控制的重要措施之一。通过实验课的学习,可以加深对理论知识的理解,掌握材料基本性能的试验和质量评定方法,培养实践技能。

1土木工程材料的基本性质习题解答

一、名词解释

1.密度、表观密度、体积密度、堆积密度

密度:材料在绝对密实状态下单位体积的质量。

表观密度:材料在包含内部闭口孔隙体积在内的单位体积的质量。

体积密度:材料在自然状态下单位体积的质量。

堆积密度:散粒状或粉状材料在堆积状态下单位体积的质量。

2.亲水性材料、憎水性材料

亲水性材料:当润湿角θ≤90°时,水分子之间的内聚力小于水分子与材料分子之间的相互吸引力,此种材料称为亲水性材料。

憎水性材料:当润湿边θ<90°时,水分子之间的内聚力大于水分子与材料分子之间的相互吸引力,此种材料称为憎水性材料。

3.吸水率、含水率

吸水率:当材料吸水饱和时,材料中所含水的质量与干燥状态下的质量比称为吸水率。 含水率:材料中所含水的质量与干燥状态下的质量之比,称为材料的含水率。

4.耐水性、软化系数

耐水性:材料抵抗水破坏作用的性质称为耐水性,用软化系数表示。

软化系数:材料在吸水饱和状态下的抗压强度与材料在干燥状态下的抗压强度之比。

37

水泥砂浆强度 土木工程材料习题集及答案详解

5.抗渗性:材料抵抗压力水渗透的性质称为抗渗透性,用用渗透系数或抗渗等级表示。(www.61k.com]

6.抗冻性:材料在水饱和状态下,经过多次冻融循环作用,能保持强度和外观完整性的能力。

7.强度等级、比强度

强度等级:指按材料强度值的大小划分的若干等级。

比强度:按材料单位质量计算的强度,其值等于材料的强度值与其体积密度之比。

8.弹性、塑性

弹性:材料在外力作用下产生变形,当外力取消后,变形能完全消失的性质

塑性:材料在外力作用下产生变形,当取消外力后,仍保持变形后的形状,并不产生裂缝的性质。

9.脆性、韧性

脆性:材料在外力作用下,当外力达到一定限度后,材料突然破坏,而破坏时无明显的塑性变形的性质。

韧性:材料在冲击、振动荷载作用下,能过吸收较大的能量,同时也能产生一定的变形而不被破坏的性质。

10.热容量、导热性

热容量:指材料受热时蓄存热量或冷却时放出热量的性能,其大小等于比热容与质量的乘积。 导热性:反映材料传递热量的能力。其大小用导热系数表示。

11. 耐燃性、耐火性

耐燃性:指材料能够经受火焰和高温作用而不破坏,强度也不显著降低的性能。根据耐燃性不同,可分为易燃材料、难燃材料和不燃材料三类。

耐火性:指材料长期在高温作用下,保持其结构和工作性能基本稳定而不破坏的性质,用耐火度表示。根据耐火度不同,可分为易熔材料、难熔材料和耐火材料三类。

12..耐久性:是材料在使用过程中抵抗其自身及环境因素的长期破坏作用,保持其原有性能而不变质、不破坏的能力,即材料保持工作性能直到极限状态的性质。

二、填空:

1.吸水率,软化系数,抗渗等级或渗透系数,抗冻等级,导热系数;2.高,好,愈好;3.小,大;4.质量,强度,保温性能,抗冻性能,体积;5.较小,较低,较大,较差,较差,较大,较好;

6. 好,0.85;7.比强度,材料的强度与体积密度之比,越轻质高强;8.静压力;9.抵抗变形;10.孔隙率,孔隙特征,孔隙率,细小开口,连通;11不燃材料,难燃材料,易燃材料,热变质,热变形;12.物理作用,化学作用,生物作用;13.形状,尺寸,表面状态,含水率,加荷速度,温度;

14.微观,亚微观(细观),宏观

三、选择题:

1.C 提示:由含水率公式可求得干砂的质量为96.15克。

2.C 提示:材料的导热系数越小,保温隔热性越好,热容量大对保持室内温度的稳定有良好的作用。

3.(1)BDF;(2)BD;(3)BDF;(4)ADF;(5)ACF 提示:一般来说,材料的孔隙率小、开口连通孔少且为微细孔时,其强度较高(材料承受荷载的截面增大,内部产生缺陷的几率减小),抗渗性与抗冻性较好(材料孔隙内的充水程度较低,对结冰产生的体积膨胀的缓冲能力较大);含有大量封闭微孔的材料导热性较低,保温隔热性较好(静态空气的导热系数很小);含有大量连通开口微孔的材料吸声性能较好(声波可深入材料内部,与孔壁摩擦转化成热能而消耗掉)。

4.B 提示:根据计算,材料的软化系数为0.90,大于0.85,为耐水。

5.B 提示:材料的密度是一定值,不随环境的变化而改变。

6.B 提示:无机非金属材料的抗冻性反映了其抗风化性的好坏,与耐久性关系密切。一般而言,无机非金属材料的抗冻性越高,则材料的其它的耐久性也越高。

7.A 提示:除了密度外,其它性质均与孔隙率有关。

8.C提示:软化系数为材料在吸水饱和状态下的抗压强度与材料在干燥状态下的抗压强度之比,该值越小,说明材料吸水饱和后强度降低越多,耐水性越差,通常软化系数大于0.85的材料可以认 38

水泥砂浆强度 土木工程材料习题集及答案详解

为是耐水的。(www.61k.com)

9.D 提示:石英矿物的硬度应用刻划法测定。

10.B提示:韧性材料在冲击、振动荷载作用下,能够吸收较大的能量,同时也能产生一定的变形而不破坏,因为韧性材料的变形值越大,而抗拉强度越接近或高于抗压强度,所以承受冲击和振动荷载的能力强。如钢材、木材、沥青混凝土等。

11、A 提示:脆性材料在外力作用下,直至断裂前只发生很小的弹性变形,不出现塑性变形而突然破坏。这是脆性材料的一个特征。而这类材料的抗压强度比抗拉强度大得多,可达几倍到几十倍。因此,其抗冲击和振动荷载的能力较差。大部分无机非金属材料如石材、砖、水泥、混凝土、砂浆、陶瓷及玻璃等属于这类材料。

12、D 提示:材料吸水后,将使材料的体积密度和导热系数提高,因为材料的体积密度是指材料在自然状态下单位体积的质量。材料吸水后,其质量加入了含水的质量,这样总质量提高了,虽然体积也增加,但增幅小,故体积密度提高。而材料导热是通过材料实体与孔隙内的空气,而吸水后传热介质变成了材料实体及水和空气(水占有了部分或全部空气的体积),而水的导热系数(λ=0.58W/m2K)是空气的导热系数(λ=0.023W/m2K)的25倍左右,故材料的导热系数提高了。

13、C 提示:材料吸水后,将使材料的强度和保温性降低。由于水会以不同方式使材料软化,破坏材料内部结构的结合力,因此材料吸水后会使其强度降低;另外,材料吸水后导热系数将明显提高,使材料的保温性降低。

14、C 提示:材料的抗渗性和抗冻性的好坏与材料的孔隙率及孔隙特征有关。一般来说,孔隙率大且为开口连通孔时材料的抗渗性与抗冻性较差;密实的以及具有闭口孔(不论孔隙率大小)的材料抗渗性与抗冻性较好。如在混凝土工程中常掺入引气剂改善混凝土的孔结构,以提高其抗渗性和抗冻性。

15、D 提示:通常,固体物质比液态物质导热系数大,液态比气态导热系数大。当材料的孔隙率约大即体积密度约小时,由于孔隙中空气传热较差,因此导热系数越小。当孔隙率相同时,若孔隙间连通也会使孔中空气流通而传热,使材料的导热系数增大。

16、D 提示:建筑材料中,各种胶凝材料、混凝土、天然石材、砖瓦、钢材、木材等均为亲水性材料。而沥青、油漆、塑料等为憎水性材料,它们常用作防潮、防水和防腐材料,也可以对亲水性材料进行表面处理,用以降低吸水性。

四、判断题:

132√3343536373839310√11312√13√14√15√16√17√18√19√20√

五、简答题:

1.答:质量吸水率和体积吸水率都是反映材料吸水性能的指标,但含义不同。质量吸水率是指材料在吸水饱和状态下所吸入水的质量占材料干燥质量的百分率;而体积吸水率是指材料在吸水饱和状态下所吸入水的体积占干燥材料在自然状态下体积的百分率。前者适宜于表示具有封闭孔隙或极大开口孔隙的材料的吸水性;后者适宜于表示具有很多微小开口孔隙的轻质材料(如加气混凝土、软木等)的吸水性。

2. 答:材料在外力作用下抵抗破坏的能力,称为材料的强度;按其强度值的大小划分为若干个等级,则是材料的强度等级。材料的强度与材料的含水率状态及温度有关,含有水分的材料其强度较干燥时低;一般温度高时材料的强度降低。材料的强度还与其测试的所用的试件形状、尺寸有关,与实验时的加荷速度、试件的表面性状有关,相同材料采用小试件测得的强度较大,试件高,加荷速度快者强度偏高,试件表面不平或表面涂润滑剂时所测得的强度偏低。

3.答:材料的耐久性是材料的一种综合性质,诸如:抗渗性、抗冻性、抗风化性、抗老化性、抗化学侵蚀性、耐热性、耐火性及耐磨性等均属于耐久性的范围。对不同的材料有不同的耐久性要求。

影响材料耐久性的破坏因素主要有物理因素、化学因素、物理化学因素、机械因素及生物因素等几方面。

不同的材料或相同的材料使用在不同的环境中,所受到的破坏作用有可能不同。为提高材料的耐久性,以利于延长土木工程结构物的使用寿命和减少维修费用,可根据工程环境和材料特点从以下方面采取相应的措施;

39

水泥砂浆强度 土木工程材料习题集及答案详解

(1)提高材料自身对环境破坏因素的抵抗性(如提高材料的物理力学及化学性能等);

(2)设法减轻环境介质对材料的破坏作用(如排除或降低破坏因素对材料的作用等);

(3)用其它材料保护主体材料免受破坏(如覆面、抹灰、刷涂料等)。(www.61k.com]

4.答:

(1)证明:设材料在干燥状态下的自然体积为V0;材料在干燥和吸水饱和时的质量分别为m1和m2,则有:

Wv?m2?m1V0

m2?m1

m1?1?100% ① ?wWm??100% 则m2?m1?Wm?m1100% ② 将②代入①得:Wv?

m1

V0Wm?m1V0?1?w?m1V0?Wm?1?w 而??0,?w =1,故有:Wv =Wm2ρ0

(2)公式Wv?Wm??0中的?0的单位为g/cm3。

(3)若材料的孔隙率为P,体积吸水率为Wv,则材料的闭口孔隙率PB?P?Pk?P?Wv。

5.答:评价材料热工性能的常用参数有材料的导热系数、热容量与比热,材料的导热系数和热容量是设计建筑物围护结构进行热工计算时的重要参数,要保持建筑物室内温度的稳定性并减少热损失,应选用导热系数小而热容量较大的建筑材料。

6.答:干燥墙体由于其孔隙被空气所填充,而空气的导热系数很小,只有0.023W/(m2K)。因而干墙具有良好的保暖性能。而新建房屋的墙体由于未完全干燥,其内部孔隙中含有较多的水分,而水的导热系数为0.58W/(m2K),是空气导热系数的近25倍,因而传热速度较快,保暖性较差。尤其在冬季。一旦湿墙中孔隙水结冰后,传导热量的能力更加提高,冰的导热系数为2.3W/(m2K).是空气导热系数的100倍,保暖性就更差。

7.答:材料的孔隙率和孔隙构造对材料的体积密度、强度、吸水性、吸湿性、抗渗性、抗冻性、导热性及吸音性等性质均会产生影响,其影响如下:(1)孔隙率越大,其体积密度越小;(2)孔隙率越大其强度越低;(3)密实材料及具有闭口孔的材料是不吸水和不吸湿的;具有粗大孔的材料因其水分不易存留,其吸水率常小于孔隙率;而那些孔隙率较大 且具有开口连通孔的亲水性材料具有较大的吸水与吸湿能力;(4)密实的或具有闭口孔的材料是不会发生透水现象的。具有较大孔隙率且为开口连通大孔的亲水性材料往往抗渗性较差;(5)密实材料及具有闭口孔的材料具有较好的抗冻性;(6)孔隙率越大,导热系数越小,导热性越小,绝热性越好;孔隙率相同时,具有较大孔径或连通孔的材料,导热系数偏大,导热性较大,绝热性较差;(7)孔隙率较大且为细小连通孔时,材料的吸音性较好。

六.计算题

1、解:该岩石的软化系数为:KR = 168/178 = 0.94>0.85

答:此岩石可用于水下工程。

3'3 2、 解:已知:??2.75g/cm,P?1.5%,?0?1560kg/m

33 则:?0??1?0.015??2.75g/cm?2.71g/cm

40

水泥砂浆强度 土木工程材料习题集及答案详解

P'??1?1.560/2.71??100%?42.4%

答:此岩石的体积密度为2.71g/cm3和碎石的空隙率为42.4%。[www.61k.com] 3、

解:砂包含内部闭口孔在内的体积为瓶装满水后排出水的体积,即

V'

s?Vw?200?500)g3w?m??(377

3?77cm w1g/cm

表观密度:?'?ms

V'?200g3?2.60g/cm3

s77cm

'

空隙率: P'?(1??0

?')?100%?(1?1.402.60)?100%?46%

4、

解:河沙的含水率:W=500-494

494 ?100%=1.2%

5、解:柱子所受应力σ=1800kN 3 103/(4003500)= 9 MPa

应变??1800?103/?400?500?3.0?104??3?10?4

该柱子受力后被压缩3?10?4?12000mm?3.6mm

此荷载作用下该柱子未达到破坏状态。若要使其破坏,须施加的压力荷载为 F=21MPa3400mm3500mm=4200KN

答:要使该柱子达到受压破坏,须施加4200KN的压力荷载。

6、

解:密度: ??m2580

V?18.58?2.69(g/cm3)

体积密度: ?mg2580

0?V?

024?11.5?5.3?1.76(g/cm3)

孔隙率: P?(1??01.76

?)?100%?(1?2.69)?100%?34.6% 质量吸水率:Wmb?mg

m?m?100%?258014.0%

g24?11.5?5.3?100%?

开口孔隙率:PK?Wv?Wm??0?14.0%?1.76?24.6%

闭口孔隙率: PB?P?PK?34.6%?24.6%?10%

7、

41

水泥砂浆强度 土木工程材料习题集及答案详解

解:质量吸水率:由Wv?Wm??0,Wm?

Wv

?0

?

4.5%1.5

?3.0%

孔隙率: P?(1-

?0?

)?100%?(1?

1.53.0

)?100%?50%

开口孔隙率: PK?Wv?4.5%

闭口孔隙率: PB?P?PK?50%?4.5%?45.5% 孔隙水饱和度 KB?

VwV孔

?WVP?

4.5%

?0.09<0.,因此该材料的抗冻性良好。[www.61k.com]80 50%

8、解:

卵石质量为 m?21.30?6.20?15.1(kg) 卵石包含闭口孔在内的体积v,?V0'?Vw?V0'?表观密度: ??堆积密度: ?0'?

''

mw

?w

?10?

25.90?21.30

1

?5.4(L)

mV

m

'

?

15.1

V0

'

?

5.415.1

?2.8(g/cm)

3

10

''

?1.51(kg/L)?1510(kg/m)

3

空隙率: P?(1?

?0?

)?100%?(1?

1.512.8

)?100%?46%

2 气硬性胶凝材料习题解答

一、名词解释

1、凡是经过一系列的物理、化学作用,能将散粒状或块状材料粘接成整体的材料。

2、只能在空气中硬化,且只能在空气中保持或发展期强度的胶凝材料。

3、不仅在空气中,而且能更好的在水中硬化。并保持、发展期强度的胶凝材料 4、将二水石膏在非密闭的窑炉中加热脱水,得到的β型半水石膏,称为建筑石膏。

5、若将二水石膏在0.13MPa,124°C的过饱和蒸汽条件下蒸炼脱水,得到的α型半水石膏,晶粒较粗,加水硬化后,具有较高的密实度和强度,将之称为高强石膏。

6、生石灰中,一些石灰在烧制过程中由于矿石品质的不均匀及温度的不均匀,生成的生石灰中有可能含有欠火石灰和过水石灰。对于欠火石灰,降低了石灰的利用率,而对于过火石灰,由于其表面常被粘土类杂质融化形成的玻璃釉状物包裹,熟化很慢,就有可能在实际工程应用中,石灰已经硬化,而过火石灰才开始熟化,熟石灰体积比生石灰体积大1~2.5倍,引起隆起和开裂。

7、为了消除过火石灰的危害,将石灰浆在储灰坑中存放2周以上的过程即为“陈伏”。 8、生石灰加水与之反应生成氢氧化钠的过程称为石灰的熟化或消解。

9、水玻璃,又称泡花碱,是由碱金属氧化物和二氧化硅结合而成的能溶解于水的硅酸盐材料。 二、填空题

1.耐水;2.β,半水,CaSO42H2O ;3.微膨胀;4.大,小,保温隔热,吸声;5.体积收缩,体积微膨胀;6.放热大,体积膨胀;7.砌筑砂浆,抹面砂浆,石灰土,三合土;8.干燥,碳化,碳化,表,里,缓慢;9.硬化后的收缩,收缩裂缝;10.保水性,和易性;11.防火性;12.Na2OnSiO2, SiO2和Na2O的分子比,大,难,高;13.很强的, SiO2,耐热性;14、热量 膨胀 游离水 收缩;15、快 略微膨胀 大 小

42

水泥砂浆强度 土木工程材料习题集及答案详解

好 好 好 ;16、氧化硅 碱金属氧化物;17、好 缓慢 收缩 差;18、强度 细度 凝结时间;19、CaO+MgO含量 CO?含量 未消化残渣含量 产浆量

三.选择题

1、(C);2、(C); 3、(A)

4、(C)提示:石膏在遇火时,二水石膏的结晶水蒸发,吸收热量,表面生成的无水石膏是良好的绝热体,因而在一定的时间内可防止火势蔓延,起到防火作用。(www.61k.com)

5 (C) 提示:因为冷库是冷冻食物的,内部湿度大,而石膏的吸湿性大,又是气硬性胶凝材料,耐水性差,软化系数仅为0.2-0.3,吸水后再经冷冻,会使结构破坏。同时石膏吸入大量水后,其保温隔热性能急剧降低,故不能用于冷库内墙贴面。

6(A)提示:建筑石膏加水凝固时体积不收缩,且略有膨胀(约0.5%-1%)。因此制品表面不开裂。建筑石膏实际加水量(60%~80%)比理论吸水量(18.6%)多,因此制品孔隙率大(可达50%~60%),表观密度小,导热系数小,吸声性强,吸湿性强。吸收水分后易使石膏晶体溶解,制品强度下降,抗冻性较差。可加入适量水硬性或活性混合材料(如水泥、磨细矿渣、粉煤灰等)或有机高分子聚合物改善石膏制品的耐水性,并可提高其强度。

建筑石膏加水硬化后主要成分为CaSO4.2H2O,遇火灾时制品中的二水石膏中的结晶水蒸发,吸收热量,并在表面形成水蒸气帘幕和脱水物隔热层,因此制品抗火性好。但制品长期靠近高温部位,二水石膏会脱水分解而使制品失去强度。

7(B);8(D)

9 (D)提示:用水玻璃浸渍或涂刷粘土砖或硅酸盐制品时,水玻璃与二氧化碳作用生成硅胶,与材料中的氢氧化钙作用生成硅酸胶体,填充空隙中,使材料致密,但若涂刷在石膏制品上时,因为硅酸钠与硫酸钙反应生成硫酸钠,在制品中结晶,体积显著膨胀,会导致制品破坏。

10 (D)提示:水玻璃模数即二氧化硅与碱金属氧化物的摩尔比一般在1.5~3.5。随模数的增加,水玻璃中的晶体组分减少,胶体组分相对增多,粘结能力增大,同时SiO2含量增加,水玻璃溶解性减小,耐酸性增强。

四、判断题

1 3; 2 √;3 3;4 3; 5 √; 6 √; 7 3;8 3; 9 √; 10 √

五、问答题

1、气硬性胶凝材料只能在空气中硬化,也只能在空气中保持或继续发展其强度。水硬性胶凝材料不仅能在空气中硬化,而且能更好的在水中硬化,并保持和继续发展其强度。

所以气硬性胶凝材料只适用于地上或干燥环境,不宜用于潮湿环境,更不能用于水中,而水硬性胶凝材料既适用于地上,也可以用于地下或水中。

2、建筑石膏的特性有:(1)凝结硬化快,凝结硬化时体积微膨胀;(2)孔隙率大、体积密度小强度低;(3)保温隔热性和吸声性好;(4)防火性能好;(5)具有一定的调温、调湿性;(6)耐水性和抗冻性差;(7)装饰性好。根据建筑石膏的以上技术特性可知,建筑石膏及其制品是一种性能优良的室内建筑装饰材料。而在室外使用建筑石膏制品时,必然要受到雨水冰冻的作用,而建筑石膏制品的耐水性、吸水率高、抗渗性差、抗冻性差,所以不适用于室外。

3、石灰的特性为:(1)可塑性好,保水性好;(2)凝结硬化慢、强度低;(3)硬化过程中体积收缩大;(4)耐水性差。其主要用途有:(1)制作石灰乳涂料;(2)配制石灰砂浆和混合砂浆;(3)配制灰土和三合土;(4)生产硅酸盐制品;(5)制作碳化石灰板。

4、墙面一些部位出现起鼓凸出并伴有放射状的及网状的裂纹,是由于配制水泥石灰混合砂浆采用的石灰膏中有过火石灰,这部分过火石灰在消解、陈伏阶段未完全熟化,以至于在砂浆硬化后,过火石灰吸收空气中的水分继续熟化,产生体积膨胀而导致的。

5、灰土或三合土是由消石灰粉和粘土等按比例配制而成的,经碾压或夯实后,密实度提高,并且在潮湿环境中石灰与粘土表面的活性氧化硅和氧化铝反应,生成水硬性的水化硅酸钙或水化铝酸钙,所以灰土或三合土的强度和耐水性会随时间的延长而逐渐提高,可以在潮湿环境中使用。

43

水泥砂浆强度 土木工程材料习题集及答案详解

6、水玻璃的特性为:(1)胶结能力强,硬化时析出的硅酸凝胶有堵塞毛细孔而防止水渗透的作用。[www.61k.com]水玻璃混凝土的抗压强度可达15-40MPa;(2)耐酸性好。水玻璃具有很强的耐酸能力,能抵抗大多数无机酸和有机酸的作用;(3)耐热性好。水玻璃不燃烧,在高温下硅酸凝胶干燥的很快,强度并不降低,甚至有所增加。

水玻璃在建筑工程中的用途如下:(1)涂刷建筑材料表面,提高密实性和抗风化性能;(2)用于加固地基;(3)配制耐酸混凝土和耐酸砂浆;(4)配制耐热混凝土和耐热砂浆;(5)配制快凝防水剂。

3 水泥习题解答

一、名词解释

1、以硅酸盐水泥熟料和适量的石膏及规定的混合材料制成的水硬性胶凝材料。

2、在水泥生产过程中,为改善水泥性能、调节水泥强度等级而加入的矿物质材料。

3、具有火山灰性或潜在水硬性的混合材料。火山灰性是指一种材料磨成细粉,单独不具有水硬性,但在常温下与石灰混合后能形成具有水硬性化合物的性能。

4、水泥的凝结时间分为初凝和终凝,初凝是指水泥加水拌和至标准稠度净浆开始失去可塑性所需的时间;终凝是指水泥加水拌和至标准稠度净浆完全失去可塑性并开始产生强度所需时间。

5、水泥在凝结硬化过程中产生了不均匀的体积变化,会导致水泥石膨胀开裂,降低建筑物质量,甚至引起严重事故,此即体积安定性不良。

6、将水泥与水拌成标准稠度状态下的加水量为水泥标准稠度用水量。

7、水泥中的氧化钠和氧化钾等碱性氧化物的含量。

8、水泥与水发生水化反应放出的热量。

9、又叫二次反应。活性混合材料中均含有活性SiO2和活性Al2O3成分,他们能和水泥水化产生的Ca(OH)2作用,生成水化硅酸钙和水化铝酸钙。这一反应即“火山灰反应”。

二、判断题

1√; 23;3 √;4 √; 5 3; 6 √;7 √;8 √; 9 √; 10 √ ;113;123;13√;143;15√

三、填空题

1、P2Ⅰ,P2Ⅱ,P2O,P2S,P2P,P2F,P2C ;

2、硅酸三钙,硅酸二钙,铝酸三钙,铁铝酸四钙,C3S,C2S,C3A,C4AF;

3、调节水泥凝结时间,体积安定性不良,凝结速度过快(瞬凝);

4、CaO ,MgO,SO4;

5、Ca(OH)2 ;水化铝酸钙;

6、低;高;低;好;差;

7、好;Ca(OH)2 ;水化铝酸钙;

8、活性二氧化硅;活性氧化铝;Ca(OH)2 ;水化硅酸钙;水化铝酸钙;

9、45min ;6h30min;

10、细度;凝结时间;安定性;强度;不溶物;烧失量;三氧化硫;氧化镁;氯离子;碱含量

11、水化硅酸钙,水化铁酸钙,氢氧化钙,水化铝酸钙,水化硫铝酸钙, 水化硅酸钙, 氢氧化钙

12、C3S,C3S, C3A, C3S, C3A, C2S, C4AF, C3A, C4AF

13、缓凝, 缓凝,激发活性

14、粒化高炉矿渣,火山灰质材料,粉煤灰, SiO2,Al2O3,Ca(OH)2,水化硅酸钙;水化铝酸钙

15、1~3,3,28,继续缓慢增长

16、凝胶体,晶体,未水化水泥颗粒,毛细孔

17、毛细孔, Ca(OH)2 ,水化铝酸三钙,软水腐蚀,盐类腐蚀,酸类腐蚀,碱类腐蚀,合理选用 44 2-

水泥砂浆强度 土木工程材料习题集及答案详解

水泥品种,提高密实度,加做保护层

18、比表面积,筛析法

19、水泥加水,开始失去可塑性,保证搅拌、运输、浇注、振捣等施工过程,水泥加水,完全失去可塑性,保证下一步施工及施工工期

20、游离氧化钙(f-CaO),游离氧化镁(f-MgO),石膏,雷氏夹法,饼法,雷氏夹法,f-CaO 21、403403160mm,20±1℃的水中,抗折强度,抗压强度,普通,早强

22、冬季砼,大体积砼

23、低,高,低,好,好,差,差,耐热性,干缩,抗渗性,干缩

24、高,高,好,高,承重,Ca(OH)2 ,闪凝,蒸汽,高温,商品

25、受潮,重新检验,1.1~1.15,强度等级富余系数

四、单项选择题

1(D) 提示:水泥熟化中C3S、C3A含量多,则水泥的凝结快、早期强度高,水泥愈细,水花愈快。(www.61k.com)环境温度、湿度对水泥凝结凝结硬化有明星影响:温度高水泥反应加快,温度低于0°C,水化反应基本停止;水泥必须在有水分的条件下才能凝结、硬化。水泥中掺入适量石膏,目的是为了防止水泥的快速凝结,以免影响施工,但石膏掺量过多,会在后期引起水泥石的膨胀而开裂破坏。

2(A)提示:大体积混凝土构筑物体积大,水泥水化热积聚在内部,将产生较大的内外温差,由此产生的应力将导致混凝土产生裂缝,因此水化热对大体积混凝土是有害因素。硅酸盐水泥中,熟料多,水化热大,因此在大体积混凝土中工程中不宜采用。

3(C)提示:因为矿渣水泥的保水性差,泌水通道较多,干缩较大,这些性质都容易造成混凝土抗渗性差。

4(A) 提示:在硅酸盐水泥熟料的矿物组成中,C3S和C2S含量最大,其中C3S反应速度最快, 早期及后期强度高,而C2S早期强度较低,后期强度较高;C3A反应速度最快,但强度低,在水泥中含量不大;C4AF在水泥中含量最少,相对强度贡献也最小。

5(C)提示:在硅酸盐水泥熟料的矿物组成中,C3A的水化反应速度最快,其放热量也最大, 其次是C3S和C4AF,放热速度和放热量最小的是C2S。

6(A)提示:掺混合材料的水泥硬化后,当处于干燥环境中时,形成的水化硅酸钙胶体会逐渐干燥,产生干缩裂缝。尤其是火山灰水泥更为明显,在水泥石的表面上,由于空气中的CO2能使水化硅酸钙凝胶分解成碳酸钙和氧化硅的粉状混合物,使已经硬化的水泥石表面产生“起粉”现象。

7(D)提示:前两种水泥的水化热大,且抵抗地下水侵蚀的能力也较差,因此不宜使用。矿渣水泥和火山灰水泥的水化热较小,适用于大体积混凝土工程,而且都具有良好的耐水性与耐侵蚀性,适于地下工程。但矿渣水泥泌水性大,抗渗性较差,而火山灰水泥有良好的抗渗性,适宜用于地下工程。

8(A)提示:道路混凝土工程对水泥有耐磨性的要求,普通硅酸盐水泥有较好的耐磨性,而掺混合材料的水泥耐磨性较差,尤其是火山灰水泥和粉煤灰水泥。

9(A)提示:硅酸盐水泥和普通水泥在常规养护条件下硬化快,若采用蒸汽养护,则硬化速度会更快,会过早地在水泥颗粒表面形成密实的水化产物膜层,阻止了进一步的水化。因此经蒸汽养护后,再经自然养护至28d的抗压强度往往低于未经蒸养的28d抗压强度。而掺加混合材料较多的矿渣水泥、火山灰水泥、粉煤灰水泥及复合水泥等4种水泥采用蒸汽养护,可加快水泥中的活性混合材料的水化反应,使强度(特别是早期强度)增长较快。

10 ( C ) 提示:水泥存放期不宜过长。在正常条件下,通用水泥存储3个月后,强度下降10%~20%;存储6个月后水泥强度下降15%~30%。因此,通用水泥有效期从水泥出厂之日起为3个月,超过有效期的应视为过期水泥,使用时应重新检验,以实测强度为准。

11 (A) 提示:普通水泥含硅酸盐水泥熟料较多,抗软水侵蚀性较差。

12(D)提示:高铝水泥硬化速度极快,1d强度即可达到3d强度的80%以上,3天即可达到强度标准值,属于快硬型水泥。高铝水泥水化时不析出氢氧化钙,而且硬化后结构致密,因此具有较好的耐水、耐酸及盐类腐蚀的能力。高铝水泥的耐高温性好,可耐1300℃高温。另外,高铝水泥硬 45

水泥砂浆强度 土木工程材料习题集及答案详解

化时放热量很大,适合冬季施工。[www.61k.com]

13(A)提示:通用水泥(包括普通水泥)在水化硬化后都会发生体积收缩,产生裂纹,其中矿渣水泥更为显著。混凝土因养护不利,干缩变形产生开裂也是必然现象,因此必须加强对混凝土的养护。对于大体积混凝土工程,因水泥水化热导致内外温差过大也会使混凝土产生开裂现象。水泥安定性不良时,其混凝土在硬化过程中因体积变化不均匀,混凝土将会开裂而造成质量事故。

14(D)提示:铝酸盐水泥是一种快硬、高强、耐腐蚀(但抗碱性极差)、耐热的水泥,长期强度有较大的下降,最适宜硬化的温度为15℃左右,一般不超过25℃,否则会使强度降低。在湿热条件下尤甚。

15(C)提示:颜料应为耐碱矿物颜料,对水泥不起有害作用。

16(D)提示:膨胀水泥与自应力水泥不同于矿渣水泥等一般水泥,它们在硬化过程中不但不收缩,而且有一定的膨胀,可用来配制防水混凝土或制造混凝土压力管。

17(D)提示:喷射混凝土应采用凝结快、早期强度高的水泥。中热水泥的水化热较小,可以用于大体积混凝土工程。

五、多项选择题

1(ABCD)提示:见《通用硅酸盐水泥》(GB175-2007)的规定。

2(ABCDE)提示:见《通用硅酸盐水泥》(GB175-2007)的规定。

3(ABCDE)提示:生产通用硅酸盐水泥时掺加混合材料的目的是,改善水泥性能、调节强度等级、增加产量、降低成本、扩大水泥使用范围,并可利用废渣,保护环境。

4 (AE) 提示:活性混合材料的激发剂主要是指碱性激发剂与硫酸盐激发剂。

5(ADE)提示:硅酸盐水泥凝结硬化快,早期强度高,水化热大,抗冻性好,抗侵蚀性差。 6(ABE)提示:硅酸盐水泥、普通硅酸盐水泥及高铝水泥的水化热较大,均不适合用于大体积混凝土工程。

7(ABCE)硅酸盐水泥遭受化学侵蚀的外部原因是腐蚀介质的存在,其内因是水泥石结构不密实,存在毛细孔通道和容易引起腐蚀的成分如氢氧化钙、水化铝酸钙等水化产物。

8(BCE)提示:与硅酸盐水泥相比,矿渣水泥具有水化热小、耐热性好、抗化学侵蚀性好等优点。

六、问答题

1、(1)生产通用硅酸盐水泥时掺入适量的石膏是为了调节水泥的凝结时间。若不掺入石膏,由于水泥熟料矿物中的C3A急速水化生成水化铝酸四钙晶体,使水泥浆体产生瞬时凝结,以致无法施工。当掺入石膏时,生成的水化铝酸四钙会立即与石膏反应,生成高硫型水化硫铝酸钙(即钙矾石),它是难溶于水的针状晶体,包围在熟料颗粒的周围,形成“保护膜”,延缓了水泥的水化。但若石膏掺量过多,在水泥硬化后,它还会继续与固态的水化铝酸四钙反应生成钙矾石,体积约增大1.5倍,引起水泥石开裂,导致水泥安定性不良。所以生产通用硅酸盐水泥时必须掺入适量的石膏。

(2)水泥颗粒的粗细直接影响水泥的水化、凝结硬化、水化热、强度、干缩等性质,水泥颗粒越细总表面积越大,与水接触的面积也大,水化反应速度越快,水化热越大,早期强度较高。但水泥颗粒过细时,会增大磨细的能耗和成本,且不宜久存。此外,水泥过细时,其硬化过程中还会产生较大的体积收缩。所以水泥粉磨必须有一定的细度。

(3)水泥的体积的安定性是指水泥在硬化过程中体积变化的均匀性,若体积变化不均匀,会使水泥混凝土结构产生膨胀性裂缝,甚至引起严重的工程事故。所以水泥体积安定性必须合格,

(4)水泥凝结时间、体积安定性以及强度等级都与用水量有很大的关系,为了消除差异,测定凝结时间和体积安定性必须采用标准稠度用水量;测定水泥强度则采用相同的用水量。

2、强度增长速度:28d之前甲>乙,28d之后甲<乙;水化热:甲>乙。因为水泥强度的增长,早期取决于C3S的含量,28天以后取决于C2S的含量;水化热取决于C3S和C3A的含量。

3、某些体积安定性轻度不合格或略有些不合格的水泥,在空气中放置2~4周后,水泥中的部分游离氧化钙可吸收空气中的水蒸汽而熟化为氢氧化钙,使水泥中的游离氧化钙的膨胀作用被减小或消除,因而水泥的安定性可能由轻度不合格变为合格。但必须指出,在重新检验并在体积安定性合格时方可使用,若在放置一段时间后仍不合格,则仍然不得使用。安定性合格的水泥也必须重新 46

水泥砂浆强度 土木工程材料习题集及答案详解

标定其强度等级,按标定的强度等级使用。(www.61k.com]

4、引起水泥体积安定性不良的原因是熟料中含有过多的游离氧化钙、游离氧化镁和石膏含量过多。游离氧化钙可用煮沸法检验;游离氧化镁要用蒸压法才能检验出来,石膏掺量过多造成的安定性不良,在常温下反应很慢,需长期在常温水中才能发现,两者均不便于快速检验,因此国家标准规定控制水泥中游离氧化镁及三氧化硫的含量。

在建筑工程使用安定性不良的水泥会由于不均匀的体积变化,使水泥混凝土结构产生膨胀性的裂缝,引起严重的工程事故。体积安定性不合格的水泥不得用于任何工程。

5、生产硅酸盐水泥时掺入适量石膏是为了调节水泥凝结时间,石膏是在水泥凝结硬化初期与水化铝酸四钙发生反应,此时水泥浆体具有可塑性,所以不会对水泥起到破坏作用。而当硬化的水泥石在有硫酸盐溶液的环境中生成石膏时,此生成的石膏再与水化铝酸四钙反应生成高硫型水化硫铝酸钙(钙矾石),发生体积膨胀,而此时水泥硬化后已无可塑性,呈现脆性,从而使水泥石破坏。

6、水化热的弊端:水化热大且集中放出时,对于大体积混凝土,由于热量的积蓄会引起混凝土内部温度升高较多,而表面温度受环境的影响较低,内外温差产生热应力导致混凝土开裂;在夏季施工的混凝土中,会产生热膨胀,冷却后产生裂纹。

水化热的利:水化热大时,对冬季施工的混凝土有利,在保温措施下,使混凝土保持一定的温度,不致冻胀破坏,并能加速水泥的水化硬化。另外,由于内部温度较高,也可促进掺矿物掺合料的混凝土的早期水化,提高早期强度。

对于上述一些情况,在配制混凝土选择水泥时要考虑水化热的影响。

7、欲提高水泥强度,可从以下几方面考虑:(1)水泥熟料的矿物组成与细度:提高熟料中C3S的含量,可加快水泥的水化反应速度,提高早期强度;提高C2S的含量,可提高水泥的后期强度;

生产道路水泥时适当提高C4AF的含量,可提高抗折强度。适当提高水泥的细度,可提高水泥的早期

强度。(2)养护条件:保持足够的湿度和适当的温度,有利于水泥的凝结硬化和强度发展。(3)养护时间:养护时间越长其强度越高。(4)混合材料的品种和掺量:混合材料的品种和掺量不同,其强度发展也不同。

8、国家标准对通用硅酸盐水泥的化学性质有不溶物、烧失量、MgO、SO3、氯离子、碱含量等6项技术要求。其意义如下:

(1)不溶物指水泥熟料煅烧过程中存留的残渣,其含量可作为水泥烧成反应是否完全的指标;

(2)烧失量是指将水泥在950~1000℃下灼烧15~20min的质量减少率,这些失去的物质主要是水泥中所含有的水分和二氧化碳,可大致判断水泥的受潮及风化程度;(3)熟料中游离MgO的含量是影响水泥安定性的一个重要指标;(4)SO3也是影响水泥安定性的重要指标之一;(5)氯离子会加速混凝土中钢筋的锈蚀作用,因此对其含量也必须加以限制;(6)碱含量指水泥中碱性氧化物如氧化钠和氧化钾的含量。碱性氧化物过多,如遇混凝土中的骨料含有活性二氧化硅时,则有可能引起碱骨料反应,导致耐久性不良。

9、硅酸盐水泥腐蚀的类型有4种:溶出性腐蚀(软水腐蚀)、溶解性化学腐蚀(一般酸或盐类腐蚀)、膨胀性化学腐蚀(硫酸盐腐蚀)和强碱的腐蚀。

(1)溶出性腐蚀(软水腐蚀):当水泥石与软水长期接触时,水泥石中的氢氧化钙会溶于水中,若周围的水是流动的或有压力的,氢氧化钙将不断地溶解流失,使水泥石的碱度降低,同时由于水泥的水化产物必须在一定的碱性环境中才能稳定,氢氧化钙的溶出又导致其他水化产物的分解,最终使水泥石破坏。

(2)溶解性化学腐蚀:其实质是离子交换反应,水中的酸类或盐类与水泥石中的氢氧化钙起置换反应,生成易溶性盐或无胶结力的物质,使水泥石破坏。这类腐蚀有碳酸、一般酸及镁盐的腐蚀。

(3)膨胀性化学腐蚀以硫酸盐腐蚀为代表,其机理是水泥石中的氢氧化钙与硫酸盐类物质反应生成高硫型水化硫铝酸钙(钙矾石), 体积增大1.5~2倍,导致水泥石开裂破坏。

(4)强碱的腐蚀:强碱溶液与水泥水化产物反应生成的胶结力差且易为碱液溶析的物质,或因 47

水泥砂浆强度 土木工程材料习题集及答案详解

碱液渗入水泥石孔隙中后,又在空气中干燥呈结晶析出,由结晶产生压力使水泥石膨胀破坏。[www.61k.com)

防止水泥石腐蚀的措施有:(1)根据环境特点,合理选择水泥品种;(2)提高水泥石的密实度;

(3)在水泥石的表面加做保护层。

10、因为水泥受潮后,颗粒表面会发生水化而结块,导致强度降低,甚至丧失胶凝能力。即使在储存条件良好的情况下,水泥也会吸收空气中的水分和二氧化碳,发生缓慢水化和碳化,导致强度降低,此即水泥的风化。因此,水泥的储存期一般不超过三个月。水泥要按不同品种、强度等级及出厂日期分别存放,并加以标识,先存先用。不同品种的水泥混合使用时,容易造成凝结异常或其它事故。

11、根据这三种材料的特性,用加水的方法来辨认,加水后在5~30min内凝结并具有一定强度的是建筑石膏,发热量最大且有大量水蒸气放出的是生石灰,在45min~12h内凝结硬化的则是白水泥。

12、常用的活性混合材料有粒化高炉矿渣、火山灰质混合材料、粉煤灰等。活性混合材料产生硬化的条件是要有激发剂的存在,激发剂有碱性激发剂或硫酸盐激发剂。

13、掺大量活性混合材料的水泥水化反应分两步进行:

(1)水泥熟料矿物的水化:其水化产物与硅酸盐水泥相同;(2)活性混合材料的水化:水泥熟料水化生成的Ca(OH)2与掺入的石膏分别作为碱性激发剂和硫酸盐激发剂,与混合材料的活性成分如

活性氧化硅、活性氧化铝等发生二次水化反应,不断生成新的水化硅酸钙、水化铝酸钙、水化硫铝酸钙及水化硫铁酸钙等水化产物,使水泥石的后期强度得以迅速提高。

由于熟料矿物比硅酸盐水泥少得多,而且水化反应分两步进行,第二步水化反应从时间上滞后,致使这类水泥凝结硬化速度较慢,早期(3-7d)强度较低,但后期由于二次水化反应的产物大大增加,使强度增长较快,甚至超过硅酸盐水泥。另外,由于熟料矿物少,它们的水化热小;硬化水泥石中氢氧化钙、水化铝酸钙少,则抗软水、酸类或盐类侵蚀性高;硬化水泥石的碱度低,易碳化,这对防止钢筋锈蚀不利;混合材料易泌水形成毛细管通道,使水泥的密实度、匀质性下降,导致抗冻性较差。

14、掺大量活性混合材料的硅酸盐水泥的共性:(1)水化热小;(2)硬化慢,早期强度低,后期强度高;(3)抗化学腐蚀性高;(4)对温度较为敏感,低温下强度发展较慢,适合高温养护;(5)抗碳化能力较差;(6)抗冻性较差。

特性:矿渣硅酸盐水泥:(1)泌水性大,抗渗性差;(2)耐热性好;(3)干缩率大。

火山灰质硅酸盐水泥:(1)保水性好、抗渗性好;(2)干缩率大;(3)耐磨性差。

粉煤灰硅酸盐水泥:(1)干缩小、抗裂性高;(2)耐磨性差。

复合硅酸盐水泥:干缩较大。

15、因为矿渣硅酸盐水泥,火山灰质硅酸盐水泥和粉煤灰硅酸盐水泥中熟料矿物的含量相对减少了,故其早期硬化较慢,早期强度低,又因这几种水泥对温度的变化很敏感,低温下强度发展更慢,所以不宜用于早期强度要求较高或较低温度环境中施工的混凝土工程。

16、(1):现浇混凝土楼板、梁、柱:宜选用普通硅酸盐水泥,因为该混凝土对早期强度有一定的要求。

(2)采用蒸汽养护的混凝土构件:宜选用矿渣硅酸盐水泥、火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥及复合硅酸盐水泥,因为这几种水泥适宜蒸汽养护,不仅能提高其早期强度,而且使后期强度也得到提高。

(3)厚大体积的混凝土工程:宜选用矿渣硅酸盐水泥、火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥以及复合硅酸盐水泥,因为这几种水泥水化热低。

(4)水下混凝土工程:宜选用矿渣硅酸盐水泥、火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥以及复合硅酸盐水泥,因为这几种水泥具有较高的抗腐蚀能力,适用于水中混凝土。

(5)高强混凝土工程:宜选用硅酸盐水泥。因为该水泥强度等级最高,适用于配制高强混凝土。 48

水泥砂浆强度 土木工程材料习题集及答案详解

(6)高温设备或窑炉的混凝土基础:宜选用矿渣水泥。[www.61k.com]因为该水泥耐热性好,与耐热粗 细骨料配制成的耐热混凝土耐热度达到1300~1400℃,可用于高温设备或窑炉的混凝土基础。

(7)严寒地区受冻融的混凝土工程:宜选用普通硅酸盐水泥,因为该水泥抗冻性好。

(8)有抗渗性要求的混凝土工程:宜选用火山灰质硅酸盐水泥、普通硅酸盐水泥。因为这两种水泥抗渗性高。

(9)混凝土地面或道路工程:宜选用道路水泥、硅酸盐水泥及普通硅酸盐水泥,因为这几种水泥的早期强度高,干缩性小,耐磨性好,抗冲击能力强。

(10)有硫酸盐腐蚀的地下工程:优先选用矿渣硅酸盐水泥,因该水泥抗硫酸盐介质腐蚀的能力强。

(11)冬期施工的混凝土工程:宜选用快硬硅酸盐水泥、硅酸盐水泥,因为这两种水泥凝结硬化快,早期强度高,且抗冻性好。

(12)与流动水接触的混凝土工程:宜选用矿渣硅酸盐水泥、火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥以及复合硅酸盐水泥,因为这些水泥抵抗软水侵蚀的能力强。

(13)处于水位变化区的混凝土工程:宜选用普通硅酸盐水泥。因为该水泥抵抗干湿交替作用的能力强。

(14)处于干燥环境中的混凝土工程:宜选用普通硅酸盐水泥,因为该水泥硬化时干缩小,不易产生干缩裂纹,可用于干燥环境中的混凝土工程。

(15)海港码头工程:宜选用矿渣硅酸盐水泥,火山灰质硅酸盐水泥,粉煤灰硅酸盐水泥以及复合硅酸盐水泥,因为这几种水泥耐腐蚀性好。

(16)紧急抢修的工程或紧急军事工程:宜选用快硬硅酸盐水泥,快硬硫铝酸盐水泥,因为要求早期凝结硬化快。

17、(1)火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥。因为它们的干缩性大或施工时易产生失水裂纹,故在干燥环境中易干裂,并且在碳化后表面易起粉。

(2)快硬硅酸盐水泥、硅酸盐水泥、普通硅酸盐水泥、高铝水泥。因为它们均具有相当高的水化热,易使大体积混凝土产生温度裂纹而使混凝土结构受损。

(3)矿渣硅酸盐水泥、火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥、复合硅酸盐水泥。因它们的抗冻性均较差。

(4)矿渣硅酸盐水泥。因为其泌水性大、抗渗性差。

(5)快硬硅酸盐水泥、硅酸盐水泥,普通硅酸盐水泥也不太适宜。因为它们的耐软水侵蚀性差。

(6)高铝水泥、快硬硅酸盐水泥、硅酸盐水泥。高铝水泥在湿热处理后强度很低,快硬硅酸盐水泥和硅酸盐水泥在湿热处理后,后期强度有明显的损失。

(7)矿渣硅酸盐水泥、火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥。因为它们的早期强度低,在低温下强度发展更慢。

(8)快硬硅酸盐水泥、硅酸盐水泥、普通硅酸盐水泥。因为它们的抗硫酸盐腐蚀性差,主要是它们水化后含有较多的Ca(OH)2和C3AH6。。

(9)高铝水泥。因其在高温高湿条件下,水化产物均会转变为强度很低的,使混凝土强度急剧下降。

(10)火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥。因它们的耐磨性差。

七、计算题

1、解:

(1)求28d抗折强度:

抗折荷载平均值为 P?3200?3250?4000

3?3483(N)

3483±10%为3135~3831,因4000N超出了3483±10%,应剔除

49

水泥砂浆强度 土木工程材料习题集及答案详解

所以抗折荷载平均值为 P?

3PL

2bh3200?32502?3225(N) 抗折强度为 Rf?

(2)求28d抗压强度:

抗压荷载平均值 Fc?

结果: 2?1.5PLb3?1.5?3225?100403?7.6(MPa)?7.0(MPa) 90?92?87?83?91?706, ?85.5(KN)85.5±10%=76.95~94.05,则70KN超出6个平均值的±10%,应剔除,故以剩下五个的平均值为

90?92?87?83?91

5Fc=?, ?88.6(KN)

28d抗压强度为 Rc?FcA?88.6?10

40?403?55.4(MPa)?52.5MPa

根据题目给定条件及计算结果,按水泥标准可评定:该水泥强度等级为52.5级。[www.61k.com]

4 混凝土习题解答

一、名词解释

1、普通混凝土:体积密度为2000~2500kg/ m3,用普通的天然砂石为骨料配制而成的混凝土。

2、细骨料:粒径为0.15~4.75mm的骨料。

3、粗骨料:粒径大于4.75mm的骨料。

4、骨料的颗粒级配:指粒径大小不同的骨料颗粒相互组合或搭配情况。

5、砂的粗细程度:指不同的粒径的细骨料混合在一起后的总体的粗细程度,用细度模数表示。

6、骨料的坚固性:砂、石在自然风化和其他外界物理化学因素作用下抵抗破裂的能力。

7、粗骨料的最大粒径:粗骨料公称粒级的上限称为该粒级的最大粒径。

8、饱和面干状态::骨料颗粒表面干燥,而内部的空隙含水饱和的状态。

9、针状颗粒:凡颗粒的长度大于该颗粒所属粒级的平均粒径2.4倍者称为针状颗粒。

10、片状颗粒:凡颗粒的厚度小于该颗粒所属粒级的平均粒径0.4倍者称为片状颗粒。

11、压碎指标:表示石子抵抗压碎的能力,它等于按规定的方法在压力机上进行试验时,被压碎的石子的质量与试样的质量的百分比。

12、外加剂:在拌制混凝土过程中掺入的用以改善混凝土性能的化学物质。其掺量一般不大于水泥质量的5%(特殊情况除外)。

13、减水剂:在混凝土坍落度基本相同的情况下,能减少拌合用水量的外加剂。

14、引气剂:在混凝土搅拌过程中能引入大量均匀分布、稳定而封闭的微小气泡的外加剂。

15、早强剂:能提高混凝土的早期强度并对后期强度无明显影响的外加剂。

16、缓凝剂:能延缓混凝土的凝结时间而不显著降低混凝土后期强度的外加剂。

17、膨胀剂:能使混凝土产生补偿收缩或微膨胀的外加剂。

18、防冻剂:能降低混凝土中水的冰点,并有促凝和早强作用的外加剂。

19、掺合料:为了节约水泥,改善混凝土性能,在拌制混凝土时掺入的矿物粉状材料。

20、和易性:也称工作性,是指混凝土拌合物是否易于施工操作(拌和、运输、浇灌、捣实)并能获得质量均匀,成型密实的混凝土的性能。

21、流动性:指混凝土拌合物在本身自重或施工机械振捣的作用能下产生流动,并均匀密实地 50

水泥砂浆强度 土木工程材料习题集及答案详解

可用来配制防水混凝土或制造混凝土压力管。[www.61k.com) 17(D)提示:喷射混凝土应采用凝结快、早期强度高的水泥。中热水泥的水化热较小,可以用 于大体积混凝土工程。 五、多项选择题 1(ABCD)提示:见《通用硅酸盐水泥》 (GB175-2007)的规定。 2(ABCDE)提示:见《通用硅酸盐水泥》 (GB175-2007)的规定。 3(ABCDE)提示:生产通用硅酸盐水泥时掺加混合材料的目的是,改善水泥性能、调节强度 等级、增加产量、降低成本、扩大水泥使用范围,并可利用废渣,保护环境。 4 (AE) 提示:活性混合材料的激发剂主要是指碱性激发剂与硫酸盐激发剂。 5(ADE)提示:硅酸盐水泥凝结硬化快,早期强度高,水化热大,抗冻性好,抗侵蚀性差。 6(ABE)提示:硅酸盐水泥、普通硅酸盐水泥及高铝水泥的水化热较大,均不适合用于大体积 混凝土工程。 7(ABCE)硅酸盐水泥遭受化学侵蚀的外部原因是腐蚀介质的存在,其内因是水泥石结构不密 实,存在毛细孔通道和容易引起腐蚀的成分如氢氧化钙、水化铝酸钙等水化产物。 8(BCE)提示:与硅酸盐水泥相比,矿渣水泥具有水化热小、耐热性好、抗化学侵蚀性好等优 点。 六、问答题 1、 (1)生产通用硅酸盐水泥时掺入适量的石膏是为了调节水泥的凝结时间。若不掺入石膏,由 于水泥熟料矿物中的 C3A 急速水化生成水化铝酸四钙晶体,使水泥浆体产生瞬时凝结,以致无法施 工。 当掺入石膏时, 生成的水化铝酸四钙会立即与石膏反应, 生成高硫型水化硫铝酸钙 (即钙矾石) , 它是难溶于水的针状晶体,包围在熟料颗粒的周围,形成“保护膜” ,延缓了水泥的水化。但若石膏 掺量过多,在水泥硬化后,它还会继续与固态的水化铝酸四钙反应生成钙矾石,体积约增大 1.5 倍, 引起水泥石开裂,导致水泥安定性不良。所以生产通用硅酸盐水泥时必须掺入适量的石膏。 (2)水泥颗粒的粗细直接影响水泥的水化、凝结硬化、水化热、强度、干缩等性质,水泥颗粒 越细总表面积越大,与水接触的面积也大,水化反应速度越快,水化热越大,早期强度较高。但水 泥颗粒过细时,会增大磨细的能耗和成本,且不宜久存。此外,水泥过细时,其硬化过程中还会产 生较大的体积收缩。所以水泥粉磨必须有一定的细度。 (3)水泥的体积的安定性是指水泥在硬化过程中体积变化的均匀性,若体积变化不均匀,会使 水泥混凝土结构产生膨胀性裂缝,甚至引起严重的工程事故。所以水泥体积安定性必须合格, (4)水泥凝结时间、体积安定性以及强度等级都与用水量有很大的关系,为了消除差异,测定 凝结时间和体积安定性必

水泥砂浆强度 土木工程材料习题集及答案详解

须采用标准稠度用水量;测定水泥强度则采用相同的用水量。[www.61k.com] 2、强度增长速度:28d 之前甲>乙,28d 之后甲<乙;水化热:甲>乙。因为水泥强度的增长, 早期取决于 C3S 的含量,28 天以后取决于 C2S 的含量;水化热取决于 C3S 和 C3A 的含量。 3、某些体积安定性轻度不合格或略有些不合格的水泥,在空气中放置 2~4 周后,水泥中的部 分游离氧化钙可吸收空气中的水蒸汽而熟化为氢氧化钙,使水泥中的游离氧化钙的膨胀作用被减小 或消除,因而水泥的安定性可能由轻度不合格变为合格。但必须指出,在重新检验并在体积安定性 合格时方可使用,若在放置一段时间后仍不合格,则仍然不得使用。安定性合格的水泥也必须重新46 标定其强度等级,按标定的强度等级使用。 4、引起水泥体积安定性不良的原因是熟料中含有过多的游离氧化钙、游离氧化镁和石膏含量过 多。游离氧化钙可用煮沸法检验;游离氧化镁要用蒸压法才能检验出来,石膏掺量过多造成的安定 性不良,在常温下反应很慢,需长期在常温水中才能发现,两者均不便于快速检验,因此国家标准 规定控制水泥中游离氧化镁及三氧化硫的含量。 在建筑工程使用安定性不良的水泥会由于不均匀的体积变化,使水泥混凝土结构产生膨胀性的 裂缝,引起严重的工程事故。体积安定性不合格的水泥不得用于任何工程。 5、生产硅酸盐水泥时掺入适量石膏是为了调节水泥凝结时间,石膏是在水泥凝结硬化初期与水 化铝酸四钙发生反应,此时水泥浆体具有可塑性,所以不会对水泥起到破坏作用。而当硬化的水泥 石在有硫酸盐溶液的环境中生成石膏时,此生成的石膏再与水化铝酸四钙反应生成高硫型水化硫铝 酸钙(钙矾石) ,发生体积膨胀,而此时水泥硬化后已无可塑性,呈现脆性,从而使水泥石破坏。 6、水化热的弊端:水化热大且集中放出时,对于大体积混凝土,由于热量的积蓄会引起混凝土 内部温度升高较多,而表面温度受环境的影响较低,内外温差产生热应力导致混凝土开裂;在夏季 施工的混凝土中,会产生热膨胀,冷却后产生裂纹。 水化热的利:水化热大时,对冬季施工的混凝土有利,在保温措施下,使混凝土保持一定的温 度,不致冻胀破坏,并能加速水泥的水化硬化。另外,由于内部温度较高,也可促进掺矿物掺合料 的混凝土的早期水化,提高早期强度。 对于上述一些情况,在配制混凝土选择水泥时要考虑水化热的影响。 7、欲提高水泥强度,可从以下几方面考虑:(1)水泥熟料的矿物组成与细度:提高熟料中 C3S 的含量,可加快水泥的水化反应速度,提高早期强度

水泥砂浆强度 土木工程材料习题集及答案详解

;提高 C2S 的含量,可提高水泥的后期强度; 生产道路水泥时适当提高 C4AF 的含量,可提高抗折强度。(www.61k.com)适当提高水泥的细度,可提高水泥的早期 强度。(2)养护条件:保持足够的湿度和适当的温度,有利于水泥的凝结硬化和强度发展。(3) 养护时间:养护时间越长其强度越高。(4)混合材料的品种和掺量:混合材料的品种和掺量不同, 其强度发展也不同。 8、国家标准对通用硅酸盐水泥的化学性质有不溶物、烧失量、MgO、SO3、氯离子、碱含量等6 项技术要求。其意义如下: (1)不溶物指水泥熟料煅烧过程中存留的残渣,其含量可作为水泥烧成反应是否完全的指标; (2)烧失量是指将水泥在950~1000℃下灼烧15~20min的质量减少率,这些失去的物质主要是水泥 中所含有的水分和二氧化碳,可大致判断水泥的受潮及风化程度; (3)熟料中游离MgO的含量是影 响水泥安定性的一个重要指标;(4)SO3也是影响水泥安定性的重要指标之一;(5)氯离子会加速 混凝土中钢筋的锈蚀作用,因此对其含量也必须加以限制;(6)碱含量指水泥中碱性氧化物如氧化 钠和氧化钾的含量。碱性氧化物过多,如遇混凝土中的骨料含有活性二氧化硅时,则有可能引起碱 骨料反应,导致耐久性不良。 9、硅酸盐水泥腐蚀的类型有 4 种:溶出性腐蚀(软水腐蚀) 、溶解性化学腐蚀(一般酸或盐类 腐蚀) 、膨胀性化学腐蚀(硫酸盐腐蚀)和强碱的腐蚀。 (1)溶出性腐蚀(软水腐蚀) :当水泥石与软水长期接触时,水泥石中的氢氧化钙会溶于水中, 若周围的水是流动的或有压力的,氢氧化钙将不断地溶解流失,使水泥石的碱度降低,同时由于水 泥的水化产物必须在一定的碱性环境中才能稳定,氢氧化钙的溶出又导致其他水化产物的分解,最 终使水泥石破坏。 (2)溶解性化学腐蚀:其实质是离子交换反应,水中的酸类或盐类与水泥石中的氢氧化钙起置 换反应,生成易溶性盐或无胶结力的物质,使水泥石破坏。这类腐蚀有碳酸、一般酸及镁盐的腐蚀。 (3)膨胀性化学腐蚀以硫酸盐腐蚀为代表,其机理是水泥石中的氢氧化钙与硫酸盐类物质反应 生成高硫型水化硫铝酸钙(钙矾石), 体积增大 1.5~2 倍,导致水泥石开裂破坏。 (4)强碱的腐蚀:强碱溶液与水泥水化产物反应生成的胶结力差且易为碱液溶析的物质,或因47 碱液渗入水泥石孔隙中后,又在空气中干燥呈结晶析出,由结晶产生压力使水泥石膨胀破坏。 防止水泥石腐蚀的措施有: (1)根据环境特点,合理选择水泥品种; (2)提高水泥石的密实度; (3)在水泥石的表面加做保护层。 10、因为水

水泥砂浆强度 土木工程材料习题集及答案详解

泥受潮后,颗粒表面会发生水化而结块,导致强度降低,甚至丧失胶凝能力。[www.61k.com]即使 在储存条件良好的情况下,水泥也会吸收空气中的水分和二氧化碳,发生缓慢水化和碳化,导致强 度降低,此即水泥的风化。因此,水泥的储存期一般不超过三个月。水泥要按不同品种、强度等级 及出厂日期分别存放,并加以标识,先存先用。不同品种的水泥混合使用时,容易造成凝结异常或 其它事故。 11、根据这三种材料的特性,用加水的方法来辨认,加水后在 5~30min 内凝结并具有一定强度 的是建筑石膏,发热量最大且有大量水蒸气放出的是生石灰,在 45min~12h 内凝结硬化的则是白水 泥。 12、常用的活性混合材料有粒化高炉矿渣、火山灰质混合材料、粉煤灰等。活性混合材料产生 硬化的条件是要有激发剂的存在,激发剂有碱性激发剂或硫酸盐激发剂。 13、掺大量活性混合材料的水泥水化反应分两步进行: (1)水泥熟料矿物的水化:其水化产物与硅酸盐水泥相同; (2)活性混合材料的水化:水泥熟 料水化生成的 Ca(OH)2 与掺入的石膏分别作为碱性激发剂和硫酸盐激发剂, 与混合材料的活性成分如 活性氧化硅、活性氧化铝等发生二次水化反应,不断生成新的水化硅酸钙、水化铝酸钙、水化硫铝 酸钙及水化硫铁酸钙等水化产物,使水泥石的后期强度得以迅速提高。 由于熟料矿物比硅酸盐水泥少得多,而且水化反应分两步进行,第二步水化反应从时间上滞后, 致使这类水泥凝结硬化速度较慢,早期(3-7d)强度较低,但后期由于二次水化反应的产物大大增 加,使强度增长较快,甚至超过硅酸盐水泥。另外,由于熟料矿物少,它们的水化热小;硬化水泥 石中氢氧化钙、水化铝酸钙少,则抗软水、酸类或盐类侵蚀性高;硬化水泥石的碱度低,易碳化, 这对防止钢筋锈蚀不利;混合材料易泌水形成毛细管通道,使水泥的密实度、匀质性下降,导致抗 冻性较差。 14、掺大量活性混合材料的硅酸盐水泥的共性: (1)水化热小; (2)硬化慢,早期强度低,后 期强度高; (3)抗化学腐蚀性高; (4)对温度较为敏感,低温下强度发展较慢,适合高温养护; (5) 抗碳化能力较差; (6)抗冻性较差。 特性:矿渣硅酸盐水泥: (1)泌水性大,抗渗性差; (2)耐热性好; (3)干缩率大。 火山灰质硅酸盐水泥: (1)保水性好、抗渗性好; (2)干缩率大; (3)耐磨性差。 粉煤灰硅酸盐水泥: (1)干缩小、抗裂性高; (2)耐磨性差。 复合硅酸盐水泥:干缩较大。 15、因为矿渣硅酸盐水泥,火山灰质硅酸盐水泥和粉煤灰硅酸盐水泥中熟料矿物的含量相对

水泥砂浆强度 土木工程材料习题集及答案详解

减 少了,故其早期硬化较慢,早期强度低,又因这几种水泥对温度的变化很敏感,低温下强度发展更 慢,所以不宜用于早期强度要求较高或较低温度环境中施工的混凝土工程。[www.61k.com] 16、 :现浇混凝土楼板、梁、柱:宜选用普通硅酸盐水泥,因为该混凝土对早期强度有一定 (1) 的要求。 (2)采用蒸汽养护的混凝土构件:宜选用矿渣硅酸盐水泥、火山灰质硅酸盐水泥、粉煤灰硅酸 盐水泥及复合硅酸盐水泥,因为这几种水泥适宜蒸汽养护,不仅能提高其早期强度,而且使后期强 度也得到提高。 (3)厚大体积的混凝土工程:宜选用矿渣硅酸盐水泥、火山灰质硅酸盐水泥、粉煤灰硅酸盐水 泥以及复合硅酸盐水泥,因为这几种水泥水化热低。 (4)水下混凝土工程:宜选用矿渣硅酸盐水泥、火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥以及 复合硅酸盐水泥,因为这几种水泥具有较高的抗腐蚀能力,适用于水中混凝土。 (5) 高强混凝土工程: 宜选用硅酸盐水泥。 因为该水泥强度等级最高, 适用于配制高强混凝土。48 (6)高温设备或窑炉的混凝土基础:宜选用矿渣水泥。因为该水泥耐热性好,与耐热粗 细骨 料配制成的耐热混凝土耐热度达到 1300~1400℃,可用于高温设备或窑炉的混凝土基础。 (7)严寒地区受冻融的混凝土工程:宜选用普通硅酸盐水泥,因为该水泥抗冻性好。 (8)有抗渗性要求的混凝土工程:宜选用火山灰质硅酸盐水泥、普通硅酸盐水泥。因为这两种 水泥抗渗性高。 (9)混凝土地面或道路工程:宜选用道路水泥、硅酸盐水泥及普通硅酸盐水泥,因为这几种水 泥的早期强度高,干缩性小,耐磨性好,抗冲击能力强。 (10)有硫酸盐腐蚀的地下工程:优先选用矿渣硅酸盐水泥,因该水泥抗硫酸盐介质腐蚀的能 力强。 (11)冬期施工的混凝土工程:宜选用快硬硅酸盐水泥、硅酸盐水泥,因为这两种水泥凝结硬 化快,早期强度高,且抗冻性好。 (12)与流动水接触的混凝土工程:宜选用矿渣硅酸盐水泥、火山灰质硅酸盐水泥、粉煤灰硅 酸盐水泥以及复合硅酸盐水泥,因为这些水泥抵抗软水侵蚀的能力强。 (13)处于水位变化区的混凝土工程:宜选用普通硅酸盐水泥。因为该水泥抵抗干湿交替作用 的能力强。 (14)处于干燥环境中的混凝土工程:宜选用普通硅酸盐水泥,因为该水泥硬化时干缩小,不 易产生干缩裂纹,可用于干燥环境中的混凝土工程。 (15)海港码头工程:宜选用矿渣硅酸盐水泥,火山灰质硅酸盐水泥,粉煤灰硅酸盐水泥以及 复合硅酸盐水泥,因为这几种水泥耐腐蚀性好。 (16)紧急抢修的工程或紧急军事

水泥砂浆强度 土木工程材料习题集及答案详解

工程:宜选用快硬硅酸盐水泥,快硬硫铝酸盐水泥,因为要 求早期凝结硬化快。(www.61k.com] 17、 (1)火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥。因为它们的干缩性大或施工时易产生失水 裂纹,故在干燥环境中易干裂,并且在碳化后表面易起粉。 (2)快硬硅酸盐水泥、硅酸盐水泥、普通硅酸盐水泥、高铝水泥。因为它们均具有相当高的水 化热,易使大体积混凝土产生温度裂纹而使混凝土结构受损。 (3)矿渣硅酸盐水泥、火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥、复合硅酸盐水泥。因它们的 抗冻性均较差。 (4)矿渣硅酸盐水泥。因为其泌水性大、抗渗性差。 (5) 快硬硅酸盐水泥、 硅酸盐水泥, 普通硅酸盐水泥也不太适宜。 因为它们的耐软水侵蚀性差。 (6)高铝水泥、快硬硅酸盐水泥、硅酸盐水泥。高铝水泥在湿热处理后强度很低,快硬硅酸盐 水泥和硅酸盐水泥在湿热处理后,后期强度有明显的损失。 (7)矿渣硅酸盐水泥、火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥。因为它们的早期强度低,在 低温下强度发展更慢。 (8)快硬硅酸盐水泥、硅酸盐水泥、普通硅酸盐水泥。因为它们的抗硫酸盐腐蚀性差,主要是 。 它们水化后含有较多的 Ca(OH)2 和 C3AH6。 (9)高铝水泥。因其在高温高湿条件下,水化产物均会转变为强度很低的,使混凝土强度急剧 下降。 (10)火山灰质硅酸盐水泥、粉煤灰硅酸盐水泥。因它们的耐磨性差。 七、计算题 1、解: (1)求 28d 抗折强度: 抗折荷载平均值为P=3200 + 3250 + 4000 = 3483( N ) 33483±10%为 3135~3831,因 4000N 超出了 3483±10%,应剔除49 所以抗折荷载平均值为P=3200 + 3250 = 3225( N ) 2抗折强度为Rf =3PL 1.5 PL 1.5 × 3225 × 100 = = = 7.6( MPa ) > 7.0( MPa ) 2bh 2 b3 403 90 + 92 + 87 + 83 + 91 + 70 = 85.5 (KN) , 6(2)求 28d 抗压强度: 抗压荷载平均值Fc =85.5±10%=76.95~94.05,则 70KN 超出 6 个平均值的±10%,应剔除,故以剩下五个的平均值为 结果:Fc = =Rc =90 + 92 + 87 + 83 + 91 = 88.6 (KN) , 528d 抗压强度为Fc 88.6 ×103 = = 55.4( MPa ) > 52.5MPa A 40 × 40根据题目给定条件及计算结果,按水泥标准可评定:该水泥强度等级为 52.5 级。4 混凝土习题解答一、名词解释 1、普通混凝土:体积密度为 2000~2500kg/ m3,用普通的天然砂石为骨料配制而成的混凝土。 2、细骨料:粒径为 0.15~4.75mm 的骨料。 3、粗骨料:粒径大于 4.75mm 的骨料。 4、骨料的颗粒级配:指粒径大小不同的骨料颗粒相互组合或搭配情况。 5、砂的粗细程度:指不同的粒径的细骨料混合在一起后的总体的粗细程度,用细度模数表示。 6、骨料的坚固性:砂、石在自然风化和其他外

水泥砂浆强度 土木工程材料习题集及答案详解

界物理化学因素作用下抵抗破裂的能力。(www.61k.com] 7、粗骨料的最大粒径:粗骨料公称粒级的上限称为该粒级的最大粒径。 8、饱和面干状态::骨料颗粒表面干燥,而内部的空隙含水饱和的状态。 9、针状颗粒:凡颗粒的长度大于该颗粒所属粒级的平均粒径 2.4 倍者称为针状颗粒。 10、片状颗粒:凡颗粒的厚度小于该颗粒所属粒级的平均粒径 0.4 倍者称为片状颗粒。 11、压碎指标:表示石子抵抗压碎的能力,它等于按规定的方法在压力机上进行试验时,被压 碎的石子的质量与试样的质量的百分比。 12、外加剂:在拌制混凝土过程中掺入的用以改善混凝土性能的化学物质。其掺量一般不大于 水泥质量的 5%(特殊情况除外)。 13、减水剂:在混凝土坍落度基本相同的情况下,能减少拌合用水量的外加剂。 14、引气剂:在混凝土搅拌过程中能引入大量均匀分布、稳定而封闭的微小气泡的外加剂。 15、早强剂:能提高混凝土的早期强度并对后期强度无明显影响的外加剂。 16、缓凝剂:能延缓混凝土的凝结时间而不显著降低混凝土后期强度的外加剂。 17、膨胀剂:能使混凝土产生补偿收缩或微膨胀的外加剂。 18、防冻剂:能降低混凝土中水的冰点,并有促凝和早强作用的外加剂。 19、掺合料:为了节约水泥,改善混凝土性能,在拌制混凝土时掺入的矿物粉状材料。 20、和易性:也称工作性,是指混凝土拌合物是否易于施工操作(拌和、运输、浇灌、捣实) 并能获得质量均匀,成型密实的混凝土的性能。 21、流动性:指混凝土拌合物在本身自重或施工机械振捣的作用能下产生流动,并均匀密实地50 填满模板的性能。 22、粘聚性:指混凝土拌合物各组成材料之间具有一定的粘聚力,在运输和浇筑过程中不致出 现分层离析,使混凝土保持整体均匀的性能。 23、保水性:指混凝土拌合物在施工过程中具有一定的保水能力,不致产生严重泌水的性能。 24、砂率:指混凝土中砂的质量占砂石总质量的百分率 25、混凝土立方体抗压强度:以边长为 150mm 的立方体试件,在标准条件下养护到 28d 测得的 混凝土抗压强度,用符号 f cu 表示。 。 26、混凝土立方体抗压强度标准值:指具有 95%强度保证率的立方体抗压强度值,也就是指在 混凝土立方体抗压强度测定值的总体分布中,低于该值的百分率不超过 5%,以 f cu ,k 表示。 27、混凝土强度等级:指按混凝土立方体抗压强度标准值划分的若干等级。 28、水胶比:混凝土拌合物中水与胶凝材料的质量比称为水胶比。 29、标准养护:混凝土处于养护温度为(20±2)℃,相对湿度≥95%的条件下进行养护。 30、自然养护:将混凝土放

水泥砂浆强度 土木工程材料习题集及答案详解

在自然条件下进行的养护。[www.61k.com] 31、蒸汽养护:将混凝土放在温度低于 100℃的常压蒸汽中进行的养护。 32、蒸压养护:将混凝土放在压力不低于 0.8MPa,相应温度为 174.5℃以上的蒸压釜中进行的养 护。 33、化学收缩:由于水泥水化生成物的体积小于反应物的总体积,从而使混凝土产生的收缩。 34、徐变:混凝土在长期荷载作用下,沿着作用力的方向的变形会随着时间不断增长,这种长 期荷载作用下的变形称为徐变。 35、混凝土的碳化:又叫混凝土的中性化,空气中的二氧化碳与水泥石中的氢氧化钙在有水存 在的条件下发生化学反应,生成碳酸钙和水。 36、碱-骨料反应:水泥中的碱与骨料中的活性二氧化硅发生反应,在骨料表面生成复杂的碱硅酸凝胶,凝胶吸水膨胀从而导致混凝土产生膨胀开裂而破坏。 37、环箍效应:抗压试件受压面与试验机承压板(钢板)之间存在着摩擦力,当试件受压时, 承压板的横向应变小于混凝土试件的横向应变,因而承压板对试件的横向膨胀起着约束作用,通常 称为“环箍效应” 。 38、轻骨料混凝土:用轻粗骨料、轻细骨料(或普通砂) 、水泥和水配制成的体积密度不大于 3 1950kg/ m 的混凝土。 39、多孔混凝土:内部均匀分布大量细小气孔而无骨料的轻质混凝土。 40、高性能混凝土:高性能混凝土是以耐久性和可持续发展为基本要求,并适应工业化生产与 施工的新型混凝土。高性能混凝土应具有的技术特征是高抗渗性(高耐久性的关键性能) 、高体积稳 定性(低干缩、低徐变、低温度应变率和高弹性模量) 、适当高的抗压强度、良好的施工性(高流动 性、高粘聚性、达到自密实) 。 二、填空题 1、润滑,胶结,骨架 2、轻混凝土 普通混凝土 重混凝土 3、细度模数,级配区, 级配曲线,小,小 4、泥与泥块,云母,轻物质,硫化物和硫酸盐,有机质,氯化物,坚固,针、片状颗粒 5、园,光滑,差,流动性,多棱角,粗糙,高,流动性 6、强度,耐久性,干缩 7、空隙率,总表面积,水泥 8、水泥,结构截面尺寸,钢筋间净距,施工条件,结构最小截面尺寸,钢筋间最小净距, 1/2, 5051 9、公称粒级,31.5 10、抗压强度,压碎指标,硫酸钠溶液法,骨料在自然风化或物理化学因素作用下抵抗破裂 11、流动性 粘聚性 保水性 流动性 粘聚性 保水性; 12、水泥浆用量,水胶比,砂率,组成材料,温度和时间,加外加剂,调整骨料种类、粗细、 级配或砂率,改善施工工艺 13、11.150×150×150mm,标准,28,抗压强度,标准值,总体分布,5% 14、水泥强度与水胶比 骨料的种类及级配 养护条件 龄期 试验条件 水胶比 fcu=α fb(B/W –αb)

水泥砂浆强度 土木工程材料习题集及答案详解

a 15、采用高强度水泥和低水胶比 掺入外加剂与掺合料 采用机械搅拌与振捣 采用湿热处理 16、化学收缩 干湿变形 温度变形 在荷载作用下的变形 17、抗渗性 抗冻性 抗侵蚀性 混凝土的碳化 碱-骨料反应 合理选择水泥品种 控制水 胶比及水泥用量 选用质量良好的砂石骨料 掺入引气剂或减水剂及掺合料 加强混凝土施工质 量控制 18、强度 和易性 耐久性 经济性 19、混凝土配制强度 胶凝材料强度 粗骨料种类 最大水胶比 最小胶凝材料用量 20、消除应力集中 消除大体积混泥土一部分温度变形引起的破坏应力 使钢筋的预应力受到 损失 三、判断题 1×;2×;3×;4√;5√;6√;7×;8√;9×;10√;11×;12√;13×;14×;15√;16 √;17√;18√;19×;20× 四、选择题 1 (D) 提示: 烧结普通砖的干体积密度在 1600~1800kg/m3; 普通混凝土的干体积密度为 2000~ 3 2800kg/m (见《普通混凝土配合比设计规程》JCJ55---2011) 。[www.61k.com] 2(B)提示:掺合料具有一定活性,可替代部分水泥,降低混凝土的成本。 3(D)提示:河砂、海砂和湖砂颗粒呈圆形,表面光滑,与水泥的粘结较差,而山砂颗粒具有 棱角,表面粗糙,与水泥粘结性较好。 4(C)提示:在混凝土中,水泥浆的作用是包裹骨料的表面,并填充骨料的空隙,使混凝土达 到充分的密实程度。因此,为了节省水泥,降低成本,提高混凝土质量,应尽量使骨料的总表面积 及总空隙率小些。 5 (B) 提示:间断级配是指人为剔除某些骨料的粒级颗粒,使粗骨料尺寸不连续。大粒径骨料 之间的空隙,由小粒径的颗粒填充,是空隙率达到最小,密实度增加,节约水泥,但因其不同粒级 的颗粒粒径相差太大,拌合物容易产生分层离析,一般工程中很少用。 6 (D) 提示:普通混凝土和轻集料混凝土都是以立方体抗压强度作为强度指标;轻集料是以筒 压强度作为强度指标。石子则是以压碎指标和岩石立方体强度两种方式表示。 7 (C) 提示:目前我国采用边长为 150mm 的立方体试件作为混凝土标准试件,试验中也可采用 非标准尺寸试件,但必须将测定结果乘以换算系数,换算成标准试件的抗压强度。对于边长为 100mm 的立方体试件,换算系数为 0.95,边长为 200mm 的立方体试件,换算系数为 1.05。 8 (B) 提示:国家标准规定:以混凝土的立方体抗压强度标准值来划分混凝土的强度等级。 9(C)提示:细度模数与级配是反映砂的技术性能的两个指标,细度模数相同的砂,其级配可 以很不相同。因此,配制混凝土时,必须同时考虑这两者。 10(B)提示:塑性混凝土的流动性用坍落度表示,粘聚性和保水性主要采用目测及其它辅助方 法来评

水泥砂浆强度 土木工程材料习题集及答案详解

定。[www.61k.com) 11(B)提示:粘聚性反映了混凝土拌合物各组成材料之间的粘聚力,对于混凝土保持整体的均 匀性和稳定性具有重要作用。 12(B)提示:在保持水灰比不变的情况下,掺加减水剂能够释放出包裹在未水化水泥颗粒周围52 多余的水分,从而增加拌合物的流动性;采用合理砂率,增加水泥浆的数量,也能增大拌合物流动 性。 13(D)提示:合理砂率能在用水量和水泥用量一定时,使混凝土拌合物获得最大流动性,且 粘聚性及保水性良好。当然,若不打算提高流动性时,采用合理砂率也可使水泥用量最小。 14(D)提示:在原材料一定时,混凝土强度取决于其密实度,水胶比决定了混凝土的密实度的 大小。低水胶比意味着低孔隙率与高强度,是混凝土的真正的命脉。 15 (C) 提示:混凝土在浇注过程中,如果自由倾落高度过高,由于混凝土各组分密度不同,会 造成混凝土的分层离析,导致大粒径的粗骨料下沉,而水泥砂浆上浮,由于柱底部粗骨料多,因而 相应强度也较上部高。所以在浇注混凝土时,其自由倾落高度一般不宜超过 2m,在竖向结构中浇注 高度不得超过 3m,否则应采取串筒、斜槽、溜管等下料。 16(D)提示:混凝土的碳化会破坏钢筋表面的钝化膜,引起钢筋锈蚀,为避免混凝土的碳化, 最有效的措施是减小水胶比,提高其密实度,使碳化作用仅限于表面,不易向内部发展,从而保证 混凝土内的碱性环境。当然,设置足够的钢筋保护层厚度也是必要的。 17(A)提示:大体积混凝土施工时为延缓水泥水化热的放出,常掺入缓凝剂。 18(B)提示:大体积混凝土体积厚大,内部水泥水化热不宜放出,水化热集聚在内引起内外温 差超过 25℃则容易产生温度应力而导致混凝土产生裂缝。 19(D)提示:喷射混凝土要求快速凝结,必须掺入速凝剂。 20(B)提示:在其他条件相同时,水胶比是影响混凝土强度的最重要的因素。水胶比越小,混 凝土强度越高。要减小水胶比,而又不致影响混凝土的工作性,最有效的办法就是加减水剂。 21(A) 提示:泵送混凝土系指拌合物的坍落度不小于 80mm、采用混凝土输送泵输送的混凝土。 为使拌合物具有良好的可泵性,拌合物能顺利通过管道,摩阻力小,不离析,不阻塞和粘聚性好的 性能,除选择好原材料以外,还应掺入适当的掺合料和高效减水剂。 22(D)提示:混凝土耐久性不良的根本原因是内部存在各种毛细管孔隙,使外界水分及有害介 质的侵蚀提供了通道。因而提高混凝土的密实度,不仅可以提高强度,而且水分和有害介质也难于 侵入,因而耐久性提高。 23(C)提示:在寒冷地区使用

水泥砂浆强度 土木工程材料习题集及答案详解

的室外混凝土工程,为使混凝土具有良好的抗冻性,常掺入引 气剂,改善混凝土的孔隙特征,使其内部产生较多的闭口孔隙,它们能隔断混凝土中的毛细孔渗水 通道,对冰冻破坏起缓冲作用,不但能显著提高混凝土的抗冻性,也可提高抗渗性。[www.61k.com] 24(B)提示:质量相同时,砂的细度模数越小,则砂的总表面积就越大,在混凝土中需要包裹 砂粒表面的水泥浆就越多,从而增加水泥用量。砂的细度模数并不能反映级配优劣。 25(D)提示:特细砂的比表面积大、空隙率大、含泥量大,故配制混凝土时水泥用量应适当提 高些,采用较低砂率。另外,宜采用较小的坍落度,因为在拌合物中大量水分被吸附于砂粒表面, 使拌合物流动性较差,但在振动成型时,砂粒表面的水被释放出来,增大了拌合物的流动性。不可 取的措施是掺减水剂,因采用低砂率,虽然拌合物流动性大大提高,但粘聚性与保水性较难保证。 26(D)提示:配制高强混凝土关键是采用较小的水胶比,所以应掺加高效减水剂;夏季大体积 混凝土施工关键是要降低水泥水化速度,即控制水化热释放,木钙减水剂具有缓凝作用,因而适用; 因在负温下混凝土强度发展缓慢,要掺加早强剂提高其早期强度;对于抗冻融混凝土,掺入引气剂, 能显著提高混凝土的抗冻性。 27(A)提示:碱-集料反应是水泥中的碱与骨料中的活性二氧化硅发生反应引起混凝土的膨胀, 使骨料界面呈现广泛的地图形开裂或图案形开裂,开裂处经常伴有凝胶渗出或界面膨胀,最终导致 混凝土结构破坏。 该反应必须同时具备以下 3 个条件:水泥中的碱含量或混凝土的总碱量超过水泥质 量的 0.6﹪;集料中活性集料含量超过 1﹪;混凝土处于潮湿环境中。 28(D)提示:抗渗等级检测龄期应为 28d。 29(D)提示:因为混凝土配合比设计实际上就是确定水泥、砂、石和水这 4 项基本组成材料用53 量之间的 3 个比例关系,正确确定水胶比、砂率和单位用水量后就能使混凝土满足各项技术和经济 要求。 30(D)提示:混凝土的强度与水胶比有直接的关系,水胶比越小,强度越高。 31(C)提示:普通防水混凝土依据的是提高砂浆密实性和增加混凝土的有效阻水截面的原理, 依靠本身的密实性来达到防水目的,不同于掺外加剂(如引气剂、减水剂、防水剂、密实剂等)的 防水混凝土,因此不掺减水剂。 五、问答题 1、普通混凝土的主要组成材料有水泥、砂、石和水,另外还常加入适量的掺合料和外加剂。在 混凝土中,水泥与水形成水泥浆,水泥浆包裹在骨料的表面并填充其空隙。在混凝土硬化前,水泥 浆起润滑作用,

水泥砂浆强度 土木工程材料习题集及答案详解

赋予拌合物一定的流动性,便于施工操作;在硬化后,水泥浆则将砂、石骨料胶结 成一个坚实的整体。[www.61k.com)砂、石在混凝土中起骨架作用,可以降低水泥用量,限制硬化水泥浆的收缩, 提高混凝土的强度和耐久性。 2、 (1)混凝土拌合物应具有与施工条件相适应的和易性; (2)混凝土在规定龄期达到设计要求 的强度; (3)硬化后的混凝土具有与工程环境条件相适应的耐久性; (4)经济合理,在保证质量的 前提下,节约造价; (5)大体积混凝土(结构物实体最小尺寸≥1m 的混凝土)尚需满足低热性要求。 3、两种砂的细度模数相同,级配不一定相同,反之,如果级配相同,其细度也不一定相同。 4、骨料的级配是指骨料大小颗粒的搭配情况。在混凝土中粗骨料的空隙由砂粒填充,砂粒之间 的空隙由水泥浆所填充。为尽量减少骨料颗粒之间的空隙,达到节约水泥和提高强度的目的,就必 须骨料提出级配的要求。良好的级配的标准是:骨料中含有较多的粗颗粒,并以适当的中颗粒及小 颗粒填充其空隙,即可使骨料的空隙率和总面积均较小。使用良好级配的骨料,不仅所需水泥浆量 较少,经济性好,而且还可以提高混凝土的和易性、密实度和强度。 5、影响混凝土拌合物的和易性的主要因素有: (1)水泥浆数量与水胶比; (2)砂率; (3)水泥、 骨料等原材料的品种及性质; (4)外加剂; (5)时间及温度; (6)施工工艺。 改善混凝土拌合物的和易性的主要措施为: (1)改善砂、石(特别是石子)的级配; (2)尽量采用较粗的砂、石; (3)尽量降低砂率,通 过试验,采用合理砂率,以提高混凝土的质量及节约水泥; (4)当混凝土拌合物坍落度太小时,保 持水灰比不变,适当增加水泥浆用量;当坍落度太大,但粘聚性良好时,保持砂率比不变,适当增 加砂、石用量;当拌合物粘聚性、保水性不良时,适当增大砂率; (5)有条件时尽量掺用减水剂、 引气剂等外加剂。 6、混凝土的水胶比是混凝土配合比的一个非常重要的参数,影响到混凝土的强度、体积变形和 耐久性等性质。若在混凝土浇注现场,施工人员随意向混凝土拌合物中加水,则增大了混凝土的水 胶比,导致混凝土拌合物的粘聚性、保水性降低,硬化混凝土的密实度、强度、耐久性降低,变形 增大。而混凝土成型后,混凝土中的水分会不断的蒸发,对混凝土的强度发展不利,为了保证水泥 能够正常水化硬化所需的水分,所以要进行浇水养护。 7、 (1)可行。适当增加水泥浆的用量,可提高流动性; (2)不可行。直接多加水改变了混凝土 的水胶比,将降低拌

水泥砂浆强度 土木工程材料习题集及答案详解

合物的粘聚性、保水性,还将影响硬化混凝土的强度、变形及耐久性等一系列 性质; (3)可行。(www.61k.com]采用合理砂率可使拌合物获得良好的和易性; (4)可行。加减水剂可在不增加用 水量的条件下提高拌合物的流动性; (5)可行。提高粗骨料最大粒径可使骨料的总表面积减小,需 水量减少,即流动性提高; (6)可行。加强振搗可使混凝土拌合物的颗粒产生振动,暂时破坏水泥 浆体的凝聚结构,从而降低水泥浆的粘度和骨料之间的摩擦阻力,使拌合物的流动性提高。 8、 (1)坍落度小于要求时,保持水灰胶比不变,适量增加水泥浆的用量。 (2)坍落度大于要求时,保持砂率不变,适量增加砂、石的用量。 (3)坍落度小于要求且粘聚性较好时,保持水胶比不变,适量减小砂率。 (4)坍落度大于要求且粘聚性、保水性差时,保持水胶比不变,适量增大砂率。54 9、影响混凝土强度的主要因素是: (1)水泥强度等级和水灰胶比; (2)骨料的种类、质量和级 配; (3)养护温度与湿度; (4)期龄; (5)试验条件如试件尺寸、形状及加荷速度等。 提高混凝土强度的措施主要有: (1)采用高强度等级水泥和低水胶比; (2)选用质量与级配良好的骨料; (3)掺入合适的外加 剂(如减水剂)与掺合料; (4)采用机械搅拌和振捣; (5)采用合适的养护工艺。 10、 (1)试件尺寸加大,实验值将偏小; (2)试件高宽比加大,实验值将偏小; (3)试件受 压表面加润滑剂,实验值将偏小; (4)试件位置偏离支座中心,实验值将偏小; (5)加荷速度加快, 实验值将偏大。 11、混凝土的体积变形包括非荷载作用下的变形与荷载作用下的变形。非荷载作用下的变形主 要有:化学收缩、干湿变形、温度变形和碳化收缩。荷载作用下的变形有短期荷载作用下的变形与 长期荷载作用下的变形(即徐变) 。 混凝土的体积变形过大会引起混凝土开裂,产生裂缝。裂缝不仅会影响混凝土的承载能力,而 且还会严重影响混凝土的耐久性和外观。 无论是荷载作用下的变形还是非荷载作用下的变形,产生的原因都是由于混凝土中水泥石的存 在所引起的。因此,尽管发生变形的种类不同,但就其如何减小变形的措施来说,却有共同之处, 即: (1)合理选择水泥品种:如高强度等级水泥或早强型水泥的细度较大,则收缩较大;掺大量混 合材料的水泥干缩较大。 (2)尽量减小水胶比:如采用掺减水剂等措施。这是控制和减小混凝土变形的最有效的措施。 (3)尽可能降低水泥用量:如用活性掺合料取代部分水泥等。 12、 (1)掺入活性掺合料; (2)掺

水泥砂浆强度 土木工程材料习题集及答案详解

入适量缓凝剂; (3)分段施工; (4)预冷原材料(如搅拌水 中加冰等)(5)预埋水管,用冷水降低温度(但温差不可过大) ; 。[www.61k.com] 13、 (1)由于水泥水化热大且集中放出,积聚在混凝土的内部,导致混凝土内外温差很大(可 达 50~70℃) ,由于温差应力使混凝土开裂。防止措施:在混凝土中掺矿物掺合料取代部分水泥, 减少水泥用量,或使用低热水泥。 (2)由于温度变化较大使混凝土产生热胀冷缩变形,导致开裂。防止措施:每隔一段距离设置 一道伸缩缝,或在结构中设置温度钢筋等。 (3)由于混凝土中的水分结冰,产生体积膨胀导致混凝土开裂。防止措施:负温下的混凝土施 工,要掺早强剂、防冻剂并注意保温养护,以免混凝土早期受冻破坏。 (4)混凝土养护时缺水,使水泥水化反应不能进行,导致混凝土强度较低,结构疏松,形成干 缩裂缝。防止措施:浇注成型后加强保湿养护。 (5)碳化会显著增加混凝土的收缩,引起混凝土表面产生拉应力而出现微细裂纹。防止措施: 合理选择水泥品种,掺减水剂降低水胶比,提高混凝土的密实度,加强施工质量控制与养护等。 14、混凝土抵抗环境介质作用并长期保持其良好的使用性能和外观完整性,从而维持混凝土结 构的安全和正常使用的能力称为耐久性。混凝土耐久性主要包括抗渗、抗冻、抗侵蚀、抗碳化、抗 碱-骨料反应及防止混凝土中钢筋锈蚀的能力等性能。 提高混凝土耐久性的主要措施为: (1)合理选择水泥品种; (2)选用质量良好、技术条件合格 的砂石骨料; (3)采用较小的水胶比和保证水泥用量; (4)掺入适量的减水剂、引气剂及活性矿物 掺合料; (5)加强混凝土生产的质量控制,即搅拌均匀、合理浇筑、振捣密实及加强养护。 15、因为混凝土的抗渗性直接影响混凝土的抗冻性、抗侵蚀性、抗碳化性等性质,如果其抗渗 性较差,水或侵蚀性液体等介质就容易渗入内部,使混凝土的抗冻性、抗侵蚀性、抗碳化性及抗钢 筋锈蚀性降低。所以,抗渗性是决定混凝土耐久性的最主要的因素。 混凝土渗透的原因是由于内部孔隙形成连通的渗水孔道。这些孔道主要来源于水泥浆中多余水 分蒸发而留下的气孔、水泥浆泌水所产生的毛细管孔道、内部的微裂缝以及施工振捣不密实产生的 蜂窝、孔洞,这些都会导致混凝土渗水。55 因此,提高混凝土抗渗性的关键在于提高其密实度和改善孔结构,主要是减少连通孔隙及开裂 等缺陷。通常采用的措施有: (1)尽可能降低水胶比,掺引气剂、引气型减水剂或活性掺合料等以 改善其内部结构; (2)采用致密、干净、

水泥砂浆强度 土木工程材料习题集及答案详解

级配良好的骨料; (3)施工振捣密实,加强潮湿养护。(www.61k.com] 16、碱-骨料反应是指混凝土中的碱性氧化物(氧化钠、氧化钾等)与骨料中的活性二氧化硅发 生化学反应,生成碱-硅酸凝胶,其吸水后产生体积膨胀(可达 3 倍以上) ,导致混凝土开裂破坏的 现象。 ; 混凝土发生碱-骨料反应的必要条件是: (1)水泥中碱含量大于 0.6%(以等当量 Na2O 计)(2) 骨料中含有活性二氧化硅; (3)有水存在。 3 防止措施是: (1) 采用含碱量小于 0.6%的水泥, 并控制混凝土中的总碱量不超过 3.0kg/m ; (2) 控制使用碱活性骨料; (3)掺能抑制碱-骨料反应的活性掺合料; (4)掺引气型外加剂,使混凝土内 形成微小气孔,以缓冲膨胀破坏应力; (5)尽量隔绝水。 17、因为混凝土的耐久性主要取决于组成材料的质量、本身的密实度和施工质量。在原材料及 施工工艺一定的条件下,则取决于其密实度。若混凝土密实度较高,则不仅其强度较高,而且抗渗 性较高,因而耐久性随之提高。而混凝土的密实度与水胶比有直接关系,与胶凝材料用量有间接关 系。水胶比越小,混凝土的密实度越高;胶凝材料用量过大,混凝土的性能会降低,但过小则不能 保证混凝土的密实性。因此,在设计混凝土配合比时,为了保证混凝土的耐久性,需要严格控制混 凝土的最大水胶比和最小胶凝材料用量。 18、粉煤灰掺入混凝土中可产生三大效应,总称为“粉煤灰效应” 。即: (1)活性效应。粉煤灰中所含的 SiO2 和 Al2O3 具有化学活性,它们能与水泥的水化产物 Ca(OH)2 反应,生成类似水泥水化产物中的水化硅酸钙和水化铝酸钙,可作为胶凝材料的一部分而起到增强 作用。 (2)颗粒形态效应。粉煤灰中的玻璃微珠在混凝土中可减小组成材料之间的内摩擦力,提高流 动性,具有一定的减水作用。 (3)微骨(集)料效应。粉煤灰中的微细颗粒均匀分布在水泥浆内,可填充孔隙和毛细孔,改 善了混凝土的孔结构和增大密实度。 粉煤灰掺入混凝土中可以改善混凝土拌合物的和易性及可泵性,降低水化热,提高抗渗、抗化 学侵蚀及抑制碱-骨料反应等耐久性。用粉煤灰取代部分水泥后,混凝土的早期强度将随掺入量增多 而有所降低,但 28d 以后的长期强度可赶上甚至超过不掺粉煤灰的混凝土。 19、掺粉煤灰的混凝土配合配合比设计有三种方法,即:等量取代法、超量取代法、外加法。 (1)等量取代法:以等质量的粉煤灰取代混凝土中的水泥,主要适用于掺加Ⅰ级粉煤灰、混凝土超 强以及大体积混凝土工程。 (2)超量取代法:粉煤灰的掺入量超过其取代水泥的质量,超

水泥砂浆强度 土木工程材料习题集及答案详解

量部分的 粉煤灰则取代等体积的细骨料。[www.61k.com]其目的是增加混凝土中胶凝材料的用量,以补偿由于粉煤灰取代水 泥而造成的强度降低。超量系数应根据粉煤灰的等级而定。 (3)外加法:掺加的粉煤灰全部用来取 代等体积的的细骨料,其目的只是为了改善混凝土拌合物的和易性。 20、高性能混凝土(HPC)是以耐久性和可持续发展为基本要求,并适应工业化生产与施工的 新型混凝土。 高性能混凝土应具有的技术特征是高抗渗性 (高耐久性的关键性能) 高体积稳定性 、 (低 干缩、低徐变、低温度应变率和高弹性模量) 、适当高的抗压强度、良好的施工性(高流动性、高粘 聚性、达到自密实) 。高性能混凝土在节能、节料、工程经济、劳动保护及环境保护等方面都具有重 大意义,是国内外土木建筑界研究的热点,它是水泥基材料的主要发展方向,被称为“二十一世纪 的混凝土” 。 混凝土达到高性能的技术途径主要有: (1)选用技术性能较好的水泥、骨料和水。 (2) 采用较低的水胶比 (通常要控制在 0.38 以下) 掺入与水泥相容性好的优质高效减水剂 , (减 水率应不低于 20%~30%) ,并有适当的引气性与抗坍落度损失能力。56 (3)掺加适量优质的活性磨细矿物掺合料,如硅灰、磨细矿渣和优质粉煤灰等。 (4)改善骨料级配,降低骨料间的空隙率。 (5)控制胶凝材料的用量。 六、计算题 1、 解:⑴根据测定的筛余量,计算出分计筛余(%)与累计筛余(%)列于下表: 筛孔尺寸/mm 筛余量/g 分计筛余/% 累计筛余/% 4.75 27 5.4 5.4 2.36 43 8.6 14.0 1.18 47 9.4 23.4 1.60 191 38.2 61.6 0.30 102 20.4 82.0 0.15 82 16.4 98.4 <0.15 8 1.6 100该砂的细度模数为:Mx=(14.0+23.4+61.6+82.0+98.4-5×5.4)/(100-5.4)=2.67 此 砂为中砂。 将该砂的累计筛余与砂的级配区比较可知,属于 2 区,级配合格。 2、 解: (1)混凝土 7d 的抗压平均破坏荷载为: P=(140+135+142)KN/3 =139KN 混凝土 7d 标准立方体抗压强度为:fcu =0.95×139KN× 103 /100×100=13.2MPa(2)混凝土 28d 强度约为: fcu , 28 =13.2×lg28/lg7=22.6MPa (3)该混凝土所用的水胶比为:?B ? f cu, = α a f ce ? ? α b ? 28 ?W ? ?B ? 22.6 = 0.53 ×1.12 × 32.5 ? ? 0.20 ? , ?W ?W = 0.73 B3、 解: (1)根据水泥强度=(1.5~2.0)混凝土强度等级这一近似关系可知,配制 C20 的混凝土, 水泥强度的范围应为 30.0~40.0MPa,故选 32.5 复合水泥较合适。 (2)配制混凝土的石子的最大粒径 dmax 从结构上考虑,应同时满足下列条件: ①粗骨料的最大粒径不得大于构件截面最小尺寸的 1/4,即 dmax ≤1 ×400 = 100 (mm) 4②粗骨料最大粒径不得大于钢

水泥砂浆强度 土木工程材料习题集及答案详解

筋间最小净距的 3/4,即 从结构上考虑,石子粒径 dmax 应不大于 30mm。[www.61k.com] 同时考虑到经济性,应在满足结构及施工条件的前提下,尽量选择较大粒径的石子,故宜选 用 5~30mm 的石子。 4、 解:混凝土的配制强度 fcu,o 为: fcu,o=20MPa+1.645×4.0MPa=26.6MPa 根据保罗米公式得:57 α a f ce 0.53 × 35.0 W = = = 0.61 B f cu ,0 + α aα b f ce 26.6 + 0.53 × 0.20 × 35.0答:混凝土的配制强度 f cu ,0 为 26.6MPa,满足强度要求的水胶比为 0.61。 5、 解: (1)设 1 m3 混凝土中各种材料用量分别为:水泥 C(kg) 、砂子 S(kg) 、石子 G(kg) ,则 由题知:S = 2.2C ? ? G = 4.2 ? ? W = 056 ? ?C + S + G + W = 2380 ?联立求解:C ≈ 299( kg )S = 2.2C = 2.2 × 299 ≈ 658(kg ) G = 4.2C = 4.2 × 299 ≈ 1256(kg ) W = 0.56C = 0.56 × 299 ≈ 167(kg )(2)该混凝土标准养护到 28d 其抗压强度可达到:?B ? ? 1 ? f cu = α a f ce ? ? α b ? = 0.53 ×1.16 × 42.5 × ? ? 0.20 ? ≈ 41.4 ( MPa ) ?W ? ? 0.56 ?6、 解: (1)混凝土的配制强度: fcu,o = fcu,k+1.654σ=30MPa+1.645 × 4MPa = 36.58MPa 水胶比(W/B) :α a f ce W 0.53 × 42.5 × 1.06 = = = 0.577 B f cu ,0 + α aα b f ce 36.58 + 0.53 × 0.20 × 42.5 × 1.06查表得,混凝土的最大水胶比为 0.65,最小水泥用量为 260 kg/ m3。取 W/B=0.577 根据碎石的最大粒径 20mm,混凝土坍落度为 10~30mm,查表得每 m3 混凝土的用水量( W0 ) 为 185 kg/ m3。 水泥用量( C0 ) :C0 =W0 185 = = 321kg / m3 W / B 0.577砂率( S P ) :查混凝土砂率选用表,取 S P 为 35%。 计算砂、石的用量( S0 、 G0 ) 用体积法:58 S G 321 185 + 0 + 0 + + 10 = 1000 3.10 2.65 2.70 1 S0 = 35% S0 + G0计算得: S0 =659 kg/m3, G0 =1223 kg/ m3 每 m3 混凝土各材料的用量为:水泥 321 kg/ m3,水 185 kg/ m3,砂 659 kg/ m3,石 1223 kg/ m3。 (2)混凝土的施工配合比: C=321 kg/ m3 S=659 × (1+0.03) kg/ m3=679 kg/ m3 G=1223 × (1+0.01)kg/ m3=1235 kg/ m3 W=185-659 × 0.03-1223 × 0.01=153 kg/ m3 (3)2 包水泥为 100kg,则 砂的用量: 679 × 100/321kg=212kg 碎石的用量:1235 × 100/321kg=385kg 用水量: 153 × 100/321kg=47.7kg (4)若在上述混凝土中掺入 0.5% FDN 减水剂,减水 10%,减水泥 5%,则该混凝土的试验室 配合比为: 水泥:321 kg/ m3(1-0.05)=305 kg/ m3 水:185 kg/ m3 × (1-0.10)=166.5 kg/ m3 砂:[(321+185+659+1223)-305-166.5] × 35% kg/ m3=670.8 kg/ m3 碎石: (321+185+659+1223)-305-166.5-670.8 kg/ m3=1245.7 kg/ m3 7、 解: (1)混凝土强度平均值为:1 30 1 f cu = ∑ f cu ,i = × ( 26.5 + 26.0 + 29.5 + n i =1 30(2)标准差为:+28.8 ) = 27.0 MPaσ==∑fi =1n2cu ,i?nf2cu( 26.5 + 26.0 + 29.5 +2 2 2n ?1+ 28.8 ? 30 × 27.0230 ? 1)2= 1.58MPa(3)强度保证率为

水泥砂浆强度 土木工程材料习题集及答案详解

:t=fcu , k?fcuσ=25 ? 27.0 = ?1.27 ,查表得保证率为 90%。[www.61k.com] 1.58(4)采用统计方法进行验收评定:59 f f fcu= 27.0 >fcu , k+ 0.7σ = 25 + 0.7 ×1.58 = 26.1cu , kcu ,min= 24.0 >f? 0.7σ = 25 ? 0.7 ×1.58 = 23.9 MPacu , kcu ,min= 24.0 > 0.90 f= 0.90 × 25 = 22.5MPa该批混凝土合格,可以验收。 (5)该批混凝土强度大于或等于要求强度等级的百分率:P=NN0=28 ×100% = 93.3% 30查表得,该批混凝土的生产质量水平为一般。 8、 解: (1)混凝土实验室配合比C = C ' = 336(kg / m3 ) S' 685 = ≈ 652(kg / m3 ) S= (1 + Ws ) 1 + 5%G=G' 1260 = ≈ 1248(kg / m3 ) (1 + Wg ) 1 + 1%W = W ' + S Ws + G Wg = 129 + 652 × 5% + 1248 × 1% = 174(kg / m3 )(2)校核能否满足 C30 混凝土的要求:按此配合比,混凝土的 28 天强度为f28?B ? ? 336 ? = α a f ce ? ? α b ? = 0.48 × 46.5 × ? ? 0.33 ? = 35.7 ( MPa ) ?W ? ? 174 ?C30 混凝土的配制强度为: fcu,o=fcu,k+1.645σ=30+1.645×5.0=38.2(MPa),f28 <fcu,o ,不能满足 C30 强度等级的要求。 9、 解:Rmax = ( Pmax / A) × 0.95 = 35.6 MPa Rmin = ( Pmin / A) × 0.95 = 28.5MPa R中间 = ( P / A) × 0.95 = 30.4 MPa 中间 Rmax ? R中间 R中间 R中间 ? Rmin R中间 = = 35.6 ? 30.4 × 100% = 17.3% > 15% 30.4 30.4 ? 28.5 × 100% = 6.3% < 15% 30.4因此,将强度的最大与最小值一并舍去,该组试件标准立方体抗压强度等于中间值 30.4MPa。 10、 3 解: (1)基准配合比每 m 混凝土各项材料用量为:60 水泥: C =C ρ 4.5 4.5 = × 2400 = × 2400 = 300(kg ) 4.5 + 2.7 + 9.9 + 18.9 36 +W + S + G C W ρ 2.7 水: W = = × 2400 = 180(kg ) C +W + S + G 36 S ρ 9.9 砂: S = = × 2400 = 660(kg ) C +W + S + G 36 G ρ 18.9 碎石: G = = × 2400 = 1260(kg ) C +W + S + G 36b c ,t b b b b b c ,t b b b b b c ,t b b b b b c ,t b b b b(2)若施工现场砂含水率 4%,石子含水率为 1%,则施工配合比为: 水泥: C ' = C = 300( kg ) 砂: S = S (1 + Ws ) = 660 × (1 + 4%) ≈ 686( kg )'碎石: G = G(1 + Wg ) = 1260 × (1 + 1%) ≈ 1273( kg )'水: W = W ? S Ws ? G Wg = 180 ? 660 × 4% ? 1260 ×1% = 141( kg )'(3)如果不进行配合比换算,直接把试验室配合比用于施工现场,则实际的配合比为: 水泥: C " = C = 300( kg ) 砂: S ="S 660 = ≈ 634.6(kg ) (1 + Ws ) 1 + 4%"碎石: G =G 1260 = ≈ 1247.5(kg ) (1 + Wg ) 1 + 1%" "水: W = W + S Ws + G Wg = 180 + 634.6 × 4% + 1247.5 × 1% ≈ 217.9( kg )"对混凝土强度的影响:原水胶比为W 180 W 217.9 = = 0.60 ,现水胶比为 = ≈ 0.73 ,水胶比 C 300 C 300由原来的 0.60 增大到 0.73,混凝土强度将严重降低。5 建筑砂浆习题解答一、名词解释 1.建筑砂浆:由胶凝材料,细骨料和水等材料按适当比例配制而成。 2.砌筑砂浆:用于砌筑砖、石

水泥砂浆强度 土木工程材料习题集及答案详解

等各种砌块的砂浆称为砌筑砂浆。[www.61k.com] 3.抹灰砂浆:抹灰于建筑物内、外表面的砂浆称为抹灰砂浆。 4.砂浆的和易性:是指新拌砂浆是否易于在砖、石等表面上铺成均匀、连续的薄层,以及与基 层紧密粘接的性质。61 5.砂浆的流动性:也称稠度,是指新拌砂浆在自重或外力作用下流动产生流动的性质。 6.砂浆的保水性:是指新拌砂浆保持水分的能力。 7.水泥砂浆:以水泥作为胶凝材料配制成的砂浆。 8.混合砂浆:由两种或两种以上的胶凝材料配制而成的砂浆。 9.干混砂浆:又称干粉砂浆,它是由专业生产厂生产的,经干燥筛分处理的细骨料与无机胶凝 材料、保水增稠材料、矿物掺合料及其它外加剂按一定比例混合而成的颗粒或状粉状混合物。 10、预拌砂浆:由专业厂生产的湿拌砂浆或干混砂浆。 二、判断题 1×;2×;3√;4√;5×;6×;7√;8×;9×;10×;11√;12√;13×;14√ 三、填空题 1.胶凝材料 细骨料 水 不含粗骨料 2.砌筑砂浆 抹灰砂浆 水泥砂浆 水泥混合砂浆 石灰砂浆 石膏砂浆 3.4~5 ;4.活性混合材料 硅酸盐水泥熟料 石膏 ;5.保水性 掺合料;6.最大粒径 7.流动性 保水性 沉入度 分层度;8.施工方法 基层吸水性质 施工环境温湿度 大 小;9.传递荷载;10.石灰膏 粉煤灰 ;11.70.7 标准养护 28 抗压强度平均值 12.普通抹灰砂浆 装饰砂浆 特殊用途砂浆;13.强度 与基层的粘接力 14.普通水泥防水砂浆 掺加防水剂的防水砂浆 膨胀水泥和无收缩水泥配制的防水砂浆;15. 水泥强度 水灰比 水泥强度 水泥用量 四、选择题 1(B) 提示:砂浆的保水性是指新搅砂浆保持内部水分不流出的能力,用分层度来表示。保水 性好的砂浆分层度不应大于 30mm,否则砂浆易产生离析、分层,不便于施工;但分层度过小,接 近于零时,砂浆易发生干缩裂缝,因此,砂浆的分层度一般控制在 10~30mm。 2(D)提示:用于吸水底面时,即使砂浆用水量不同,但因砂浆具有保水性能,经底面吸水后, 保留在砂浆中的水分几乎是相同的。因此,砂浆强度主要取决于水泥强度与水泥用量。 3(D)提示:根据《建筑砂浆基本性能试验方法标准》 (JGJ/T70-2009)规定,建筑砂浆试件 的抗压强度试验应采用标准养护,其养护条件是:温度为 20±2℃,相对湿度为 90%以上。 4(C)提示:水磨石面层用石渣一般用大理岩石渣,大理岩较花岗岩硬度底,易于加工。 5(D)提示:抹灰砂浆中掺入纤维增强材料(如麻刀、纸筋等) ,主要是为了提高抹灰层的抗 拉强度,防止抹灰层开裂。 6(D)提示:根据《砌筑砂浆配合比设计规程》 (JGJ98-2000)规定。 7(A)提示:砂浆强度等级是以边长为

水泥砂浆强度 土木工程材料习题集及答案详解

70.7mm × 70.7mm × 70.7mm 的立方体试块,按标准条件 养护至 28d 的抗压强度平均值确定的。(www.61k.com) 8(A)提示:根据《砌筑砂浆配合比设计规程》 (JGJ98-2000)规定,砂浆的试配强度 fm,0=fm,k –tσ=f2 + 0.645σ,其中砂浆的强度等级 (或平均抗压强度)2=fm,k+σ, f 砂浆的抗压强度保证率为 95%, 此时概率度应为 t=-1.645。 9 (A) 提示:为保证砂浆良好的粘接性能,故应采用 1:2 水泥砂浆,砂浆厚度 6~10mm。 10 (D) 提示:用于易碰撞或潮湿的地方,选用砂浆的依据是有较高的强度和良好的耐水性,混 合砂浆的使用效果不如水泥砂浆。 11(C)提示:斩假石或剁斧石属于装饰砂浆。 五、问答题 1、新拌砂浆的和易性是指砂浆在搅拌、运输。摊铺时易于流动并不易失水的性质,砂浆的和易 性包括流动性和保水性两方面的含义。流动性用砂浆稠度仪测定,以沉入度(mm)表示,保水性用砂 浆分层度仪测定,以分层度(mm)表示。和易性好的砂浆在运输、施工过程中,不易分层、析水;易 于在砌筑基底材料上铺成均匀的薄层,并与底面很好地粘结,达到既便于施工又能提高砌体质量的62 目的。砂浆的和易性主要可通过掺加掺合料或外加剂来改善。 2、 配制混合砂浆时, 掺入石灰膏或粉煤灰可改善砂浆的保水性, 使其易于施工, 并可降低成本。 但由于石灰是气硬性胶凝材料,掺入后会降低砂浆的耐水性及强度,而粉煤灰是火山灰质材料,不 会降低砂浆的耐水性,并且对提高砂浆的强度有好处。 3、对于不吸水的基底,砂浆强度与混凝土相似,主要取决于水泥强度等级和水灰比;对于吸水 的基底,即使砂浆用水量不同,但因砂浆具有保水性能,经过底面吸水后,保留在砂浆中的水分几 乎是相同的,因此,砂浆的强度主要取决于水泥强度等级及水泥用量,而与水灰比没有关系。 4、工程中常采用水泥混合砂浆,可以达到改善砂浆和易性,降低水泥用量的目的。抹面砂浆中 掺入纤维材料是为了减少抹面砂浆因收缩而引起的开裂。 5、预拌砂浆的特点是集中生产,质量稳定,施工方便,节能环保。 六、计算题 1、 解: (1)砂浆的配制强度 f m ,o :f m ,o = f 2 + 0.645σ = 10 + 0.645 × 2.5 = 11.6 MPa(2)水泥用量 Qc:Qc =1000( f m ,o ? β )α f ce=1000(11.6 + 15.09) = 271 kg / m3) ( 3.03 × 32.5(3)石灰膏的用量 QD:取 QA=350 kg / m3 QD =QA -Qc =350-271 =79(kg/ m3) 查表得稠度为 100mm 的石灰膏换算为 120mm 时的换算系数为 0.97,则石灰膏的用量为: QD =79 ×0.97 =77 (kg/ m3) (4)砂的用量 QS:QS=1450×(1+2%)=1479(kg/m3) (5)选择用水量为 300kg/ m3 所以,砂浆的设计配合比为 质量配合比 水泥:石

水泥砂浆强度 土木工程材料习题集及答案详解

灰膏:砂:水=271:77:1479:300=1:0.28:5.46:1.11 体积配合比水泥:石灰膏:砂:水 =271 77 1479 300 : : : = 1: : : 0.27 4.89 1.44 1300 1350 1450 10006 墙体材料一、名词解释 1、烧结普通砖:以粘土、页岩、粉煤灰为主要原料配料、制坯、干燥再经焙烧而成的砖。[www.61k.com]包括 烧结粘土砖、烧结煤矸石砖、烧结粉煤灰砖、烧结页岩砖等多种。其中以粘土为主要原料制成的烧 结普通砖最为常见,简称粘土砖。 2、石灰爆裂:当生产烧结普通砖的原料中含有石灰石杂质时,会使其被烧成生石灰石,这种生 石灰常为过火石灰,在使用过程中生石灰吸水消化为消石灰,体积膨胀约 98%,导致砖体开裂,严 重时会使砖砌体强度降低,甚至破坏。 3、泛霜:是指粘土原料中可溶性盐类物质(如 Na2SO4) ,随着砖内水分蒸发而在砖表面产生的 盐析现象,一般在砖表面形成絮团状斑点的白色粉末。 4、抗风化性能:指在干湿变化、温度变化、冻融变化等物理因素作用抗风化性能下,材料不破63 坏并长期保持原有性质的能力。 5、烧结多孔砖:指内孔径不大于 22mm,空洞率不小于 15%,孔的尺寸小而数量多的烧结砖。按 主要原料烧结多孔砖分为粘土砖、页岩砖、煤矸石砖和粉煤灰砖等多种。 6、烧结空心砖:以粘土、页岩、煤矸石、粉煤灰及其它废料为原料,经焙烧而成的空心块体材 料,其空洞率一般≥35%,主要用于砌筑非承重的墙体结构。 7、蒸压灰砂砖(简称灰砂砖) :由磨细的生石灰或消石灰,以及天然砂和水按一定比例配合, 经搅拌、陈伏、加压成型和蒸压养护而制成的实心砖。 8、蒸压加气混凝土砌块:以钙质材料(水泥、石灰等)和硅质材料(砂、矿渣、粉煤灰等)及 加气剂(铝粉)为原料,经过磨细、计量配料、搅拌、料浆浇注,再经过发气成型、坯体切割、高 温蒸压养护等工艺制成的一种轻质、多孔的建筑材料。 9、混凝土小型空心砌块:以水泥为胶结料,以砂、碎石或卵石、煤矸石和炉渣等为集料经加水 搅拌、振动或振动加压成型,再经养护而制成的空心率≥25%的小型砌块。 10、轻集(骨)料小型空心砌块:用轻集(骨)料混凝土制成的空心率≥25%的小型砌块。 11、粉煤灰硅酸盐砌块:以粉煤灰、石灰和石膏为胶结材料,炉渣为骨料经加水搅拌、振动成 型,再经蒸汽养护而制成的实心砌块,简称粉煤灰砌块。 12、泡沫混凝土砌块:用物理方法将泡沫剂水溶液制备成泡沫,再将泡沫加入到由水泥基胶凝 材料、集料、掺合料、外加剂和水等制成的料浆中,经混合搅拌、浇注成型、自然或蒸汽养护而成 的轻质多孔混凝土砌块。又称发泡混凝土

水泥砂浆强度 土木工程材料习题集及答案详解

砌块。[www.61k.com] 13、纸面石膏板:以熟石膏为胶凝材料,并掺入适量添加剂和纤维作为板芯,以特制的护面纸 作为面层而制成的轻质板材。纸面石膏板按其用途分为普通纸面石膏板、耐水纸面石膏板和耐火纸 面石膏板三种。 14、玻璃纤维增强水泥板(GRC 板) :以低碱水泥或低碱度水泥砂浆为基材、耐碱玻璃纤维作增 强材料以及轻骨料为主要原料,经配料、浇注成型和养护而制成的板材。此类板材具有密度低、抗 冲击性好、耐水、不燃、易加工以及造型丰富等特点。 15、纤维增强硅酸钙板:又称硅酸钙板,是以钙质材料、硅质材料及增强纤维等为主要原料, 经成型、蒸压养护而制成的板材。 16、植物纤维墙板:以农作物的废弃物(如稻草、麦秸、玉米杆和甘蔗渣等)为主要原料制成 的轻质建筑板材。主要有稻草(麦秸)板、稻壳板、蔗渣板、麻屑板等。 二、判断题 1×;2×;3×;4×;5×; 三、填空题 1 、砌墙砖 砌块 建筑板材;2、240mm 115mm 53mm 512;3、尺寸偏差 外观质 量 泛霜 石灰爆裂;4、抗冻性 吸水率 饱和系数;5、大量毁坏良田 能耗高 自重大 尺寸 小 施工效率低 抗震性能差;6、轻质 保温 四、选择题 1 (D) 提示:国家标准《烧结普通砖》 (GB5101—2003)规定,强度和抗风化性能合格的砖,根 据尺寸偏差、外观质量、泛霜和石灰爆裂等分为三个质量等级。 2(D)提示:国家标准《烧结普通砖》 (GB5101—2003)规定,烧结普通砖的强度等级根据 10 块砖样的抗压强度平均值和标准值或最小值确定。 3(C)提示:烧结空心砖孔洞率大,一般在 40%以上,导热系数小,保温性能好;体积密度为 800~1100 kg/m3,自重较轻,强度不高,因而多用作非承重墙。其余三种保温性不如烧结空心砖,由 于强度较高,多用作承重墙体。 4(B)提示:烧结多孔砖强度较高且保温性较好,适用于六层以下建筑的承重墙体。 5 (C) 提示:蒸压灰砂砖和蒸压粉煤灰砖的规格尺寸及各项性能如体积密度、强度、抗冻性和导 热系数等都与烧结普通砖相接近,基本上可以相互替代使用。 6(D)提示:烧结普通砖最主要的缺点是生产能耗高与取土毁田且易导致荒漠化。64 7 D) ( 提示: 加气混凝土的体积密度小, 降低了建筑物自重, 同时导热系数小, 仅为 0.12~0.21W/(m ·K),保温隔热性能优良。因此,保温要求高的非承重墙体应优先选用加气混凝土。膨胀珍珠岩板 虽具有体轻保温效果好的特点,但强度极低,不宜用作墙体。 8(A)提示:加气混凝土砌块作为轻质材料,在结构抗震中使用效果良好。一般不得用于建筑 物基础和高湿、浸水或有化学侵蚀的环境中,也不能用于表面

水泥砂浆强度 土木工程材料习题集及答案详解

温度高于 80℃的建筑部位。(www.61k.com) 9(B)提示:因为红砖具有多孔结构,吸水能力很强,若不进行预湿处理,则在砌筑时砖会将 砂浆中的大部分水分吸走,降低砂浆的稠度,使其不易铺砌操作,灰浆饱满度不易保证,会使砌体 质量降低。 10(C)提示:加气混凝土可用于非承重内外填充墙、屋面保温层、三层及以下的结构墙,但不 能用于高温炉的保温层。因为高温炉的保温层要求耐火及耐热性强,而加气混凝土的耐热性较差。 因其含有 Ca(OH)2 等产物,这些产物受热作用时易于分解而降低强度或破坏。 11 (D) 提示:石膏空心条板导热系数小(0.22W/(m·K)) ,防火(耐火极限为 1~2.25h) ,用作 安全通道的墙体,在火灾发生时其抵抗大火的能力优于另外 3 种材料。 五、问答题 1、烧结普通砖的技术要求主要有尺寸偏差、外观质量、强度等级、泛霜、石灰爆裂、抗风化 性能等几项内容。 2、烧结普通转的强度等级根据 10 块砖样的抗压强度平均值和标准值或单块最小抗压强度值划 分为 MU10、MU15、MU20、MU25、MU30 五个等级;质量等级根据尺寸偏差、外观质量、泛霜和石灰爆 裂划分为优等品、一等品、合格品三个等级。 3、烧结多孔砖的强度等级根据 10 块砖样的抗压强度平均值和标准值或单块最小抗压强度值划 分为 MU10、MU15、MU20、MU25、MU30 五个等级;烧结空心砖的强度等级根据 10 块砖样的大面和条 面的抗压强度平均值和标准值或单块最小抗压强度值划分为 MU2.5、MU3.5、MU5.0、MU7.5、MU10.0 五个等级。 用途:烧结多孔砖由于其强度较高,在建筑工程中可以代替烧结普通砖,用于 6 层以下的承重 墙体;烧结空心砖由于孔洞率高,强度较低,具有良好的绝热性能,主要用于非承重墙和框架结构 的填充墙等部位。 4、当生产烧结粘土砖时,砖坯在氧化环境中焙烧并出窑时,生产出红砖;如果砖坯先在氧化环 境中焙烧,然后再浇水闷窑,使窑内形成还原气氛,会使砖内的红色高价的三氧化铁还原为低价的 一氧化铁,制得青砖。青砖的耐久性比红砖好。 内燃砖是指为了节约原料与燃料在粘土中掺加部分含可燃物的废料,如煤渣、煤矸石、粉煤灰 等,并在烧焙过程中使这些可燃物在砖中燃烧,从而获得内外比较均匀的焙烧温度,用这种方法焙 烧的砖叫内燃砖。通常,与外燃砖相比,内燃砖不仅可节约粘土及利用废料,而且体积密度较小, 导热系数较低,还可提高强度 20%左右。 欠火砖色浅、声哑、强度低;过火砖色深、声脆、强度高、尺寸不规则。这两种砖均为不合格 品。 5、轻微泛霜就能对清水墙建筑外观产生较大的影响;中等程度泛霜的砖用于建筑中的潮湿

水泥砂浆强度 土木工程材料习题集及答案详解

部位 时,7~8 年后因盐析结晶膨胀将使砖体表面产生粉化剥落,在干燥的环境中使用约 10 年后也将脱 落;严重泛霜对建筑结构的破坏性更大。(www.61k.com) 石灰爆裂对砖砌体的危害很大,轻者影响外观,缩短使用寿命,重者将使砖砌体强度降低甚至 破坏。砖中石灰颗粒越大,含量越多,则对砖砌体强度影响越大。 6、烧结普通砖的耐久性主要包括泛霜、石灰爆裂及抗风化性能等技术指标。 烧结普通砖的抗风化性能通常以抗冻性、吸水率与饱和系数等指标判定。对于严重风化区的建 筑用砖,其抗冻性试验必须满足要求;而对非严重风化区的建筑用砖,可不做抗冻试验,但必须满 足 5h 沸煮吸水率和饱和系数两项指标的要求。饱和系数是指砖在常温下浸水 24h 后的吸水率与 5h65 沸煮吸水率之比。 7、 目前所用的墙体材料有砌墙砖、 砌块、 建筑板材三大类。 砌墙砖类按生产原料可分为粘土砖、 页岩砖、煤矸石砖、灰砂砖、粉煤灰砖和煤渣砖等;砌块类可分为混凝土砌块、硅酸盐砌块、加气 混凝土砌块、石膏砌块等;板材类可分为水泥类墙板、石膏类墙板、植物纤维墙板和各种复合墙板 等。 我国传统的墙体材料是烧结粘土砖。而烧结粘土砖的生产要毁坏大量的农田,消耗大量的能源, 不利于保护农田和生态环境,并且其在性能与施工方面存在自重大、尺寸小、抗震性能差、施工效 率低及劳动强度高等缺点,不利于施工的机械化和建筑的工业化。因此,对传统的墙体材料要进行 改革。目前烧结粘土砖已被列为城市禁止生产使用的建筑材料(除古建筑修复外) 。 当前,墙体材料发展的方向是利用工业废料和地方资源,发展轻质、高强、多功能、大尺寸、 节能、节土、利废的新型绿色墙体材料。 8、加气混凝土砌块的气孔大部分是“墨水瓶”结构,只有小部分是水分蒸发形成的毛细孔,肚 大口小,毛细管作用较差,故吸水导热缓慢。烧结普通砖淋水后易吸足水,而加气混凝土表面浇水 不少,实则吸水不多。用一般的砂浆抹灰易被加气混凝土吸去水分,而易产生干裂或空鼓。故可分 多次淋水,且采用保水性好、粘接强度高的砂浆。 六、计算题 1、 2 解:墙体的体积为:10m ×0.24m = 2.4m3 2 每立方米的砖砌体需要 512 块砖,所以 10m 的 240mm 厚砖墙需用普通粘土砖的块数为:2.4 × 512 ≈ 1229块1229 块砖的体积为: 0.115m × 0.053m × 0.24m × 1229 = 1.8m 所以,砌筑用砂浆的数量为: 2.4m ? 1.8m = 0.6m3 3 2 3 3答:10 m 的 240mm 厚砖墙需用普通粘土砖为 1229 块,砌筑用砂浆的数量为 0.6 m 。 2、 解:10 块砖样的抗压强度平均值为:3f =23.5 + 18.5 + 17.5 + 19.4 + 16.4 + 19.6 +

水泥砂浆强度 土木工程材料习题集及答案详解

20.2 + 14.8 + 18.8 + 19.0 = 18.7( MPa ) 10强度标准差为:S=强度变异系数为:1 10 ∑ ( fi ? f )2 = 2.88( MPa) 9 i =1δ=抗压强度标准值为:S 2.88 = = 0.15 < 0.21 f 18.7f k = f ? 1.8s = 18.7 ? 1.8 × 2.88 = 13.5( MPa)用抗压强度平均值 18.7MPa 和抗压强度标准值 13.5MPa 评定该批砖的强度等级为 MU15。(www.61k.com)7 天然石材习题解答66 一、判断题 1√;2√;3√;4√;5√;6×;7√;8√;9√;10√ 二、填空题 1、造岩矿物;2、岩浆岩(火成岩) 、沉积岩(水成岩) 、变质岩;3、深成岩、喷出岩、火山岩; 4、机械沉积岩、化学沉积岩、生物沉积岩;5、正变质岩、副变质岩;6、体积密度 吸水率 耐水 性;7、抗冻性 抗风化性 耐火性 耐酸性;8、砌筑用石材 颗粒状石材 板材;9、细料石、半 细料石、粗料石、毛料石;10、粗面板材、细面板材、镜面板材;11、花岗岩、大理石; 三、选择题 1(D)提示:岩石晶粒越粗,由于相应的材料缺陷尺寸也越大,致使强度越低。 2(D)提示:花岗石耐久相当高,使用年限为 75~200 年,质优的可达千年以上;大理石由石 灰石变质得到,使用年限为 30~100 年。 3(B)提示:大理岩的主要矿物成分是方解石和白云石。 4、 (D)提示:石灰岩和大理岩的造岩矿物均为方解石,其化学组成为 CaCO3,在高温下的分解 温度为 900℃,。 玄武岩由辉石和长石组成, 有较高的耐火性。 由于花岗石中所含石英在 573 及 870℃ 时发生晶型转变,体积膨胀而引起破坏,因此,其耐火性不好。 5、 (C)提示:花岗石的一个主要缺点是耐火性差。 6(C)提示:花岗石抗压强度高,抗冻性好,吸水率小,并且耐磨性和耐久性都相当好,因此 是外墙入口以及基础、桥墩、台阶等部位首选的材料。 7(B)提示:大理石构造致密,密度大,但硬度不高,易于切割,磨光后装饰性好。 8(D)提示:大理岩的主要化学成分是 CaCO3,呈弱碱性,故耐碱但不耐酸腐蚀。 9(D)提示:石英岩结构致密均匀、坚硬、难加工、耐酸性好、非常耐久,抗压强度为花岗岩 的 2 倍左右,其耐久性能优于花岗岩,可达千年以上。 10(A)提示:大理石的矿物组成为方解石或白云石,其化学成分为 CaCO3,用于室外则易被 CO2 及其它酸性介质侵蚀,发生风化与溶蚀,耐久性差。所以除个别品种(如汉白玉、艾叶青等)外, 一般不宜用作室外装饰。 11(D)提示:大理石抗压强度为 50~140MPa;玄武岩为 100~150MPa;花岗岩为 120~250MPa; 石英岩可达 250~400MPa。 12(C)提示:花岗岩抗拉强度约为 5~8 MPa、松木(顺纹)抗拉强度约为 120 MPa,建筑钢材 约为 300~1500 MPa。 四、问答题 1、岩石按地质成因可

水泥砂浆强度 土木工程材料习题集及答案详解

分为下列三大类: (1)岩浆岩(火成岩) :由地壳内部熔融岩浆上升冷却而形成。(www.61k.com]通常又分为深成岩、喷出岩、 火山岩三类。深成岩的特性是:密度大、抗压强度高、吸水性小和抗冻性好。土木工程常用的深成 岩有花岗岩、辉长岩、正长岩等;喷出岩的结构与特性由喷出的岩浆层的厚薄所决定,较厚时近似 于深成岩,较薄时近似于多孔的火山岩。土木工程常用的喷出岩有玄武岩、辉绿岩、安山岩等;火 山岩都是轻质多孔结构的材料,土木工程常用的火山岩有浮石、火山凝灰岩等。 (2)沉积岩(水成岩) :由露出地表的母岩经长期风化、搬运、沉积等作用,在地表或距地表 不太深处形成。又分为机械沉积岩、化学沉积岩、生物沉积岩三类。与岩浆岩相比,其特性是:密 度较小,孔隙率和吸水率较大,强度较低,耐久性较差。土木工程常用的沉积岩有石灰岩、砂岩、 页岩等。 (3)变质岩:由岩浆岩或沉积岩经过地质上的变质作用而形成。又分为正变质岩(由岩浆岩变 质而成)和副变质岩(由沉积岩变质而成)两类。其中沉积岩变质后性能变好,结构致密,坚固耐 久,如石灰岩变质为大理岩,硅质砂岩变质为石英岩;而岩浆岩经变质后,产生了片状结构,性能 变差,如花岗岩变质成的片麻岩,易产生分层剥落,使耐久性降低。67 2、矿物是在地壳中受各种不同地质作用所形成的具有一定化学成分和结构特征的单质或化合 物。岩石是由各种不同的地质作用所形成的天然矿物的集合体。 岩石的结构是指其矿物的结晶程度、晶粒的相对大小、晶体形状及矿物之间的结合关系等所反 映出的岩石构成特征,即矿物与矿物之间的各种特征。 岩石的构造是指组成岩石的矿物集合体的大小、形状、排列和空间分布等所反映出的岩石的构 成特征,即矿物集合体之间的各种特征。 3、因为大理石的主要矿物成分为方解石、白云石,主要化学成分为 CaCO3 和 MgCO3 等碱性物 质,易受酸雨以及空气中的酸性氧化物(CO2、SO2 等)的侵蚀,从而使其失去表面光泽,甚至出现 麻面斑点等现象。故大多数大理石的抗风化性较差,不宜用作建筑物的室外装饰材料。而只有少数 较致密、纯净的大理石(如汉白玉、艾叶青等) ,性能比较稳定,可用于室外建筑装饰。 4、在土木工程设计和施工中,应根据适用性和经济性的原则选用石材: (1) 适用性: 主要考虑石材的技术性能是否满足使用要求。 根据石材在建筑物中的用途和部位, 选择其主要技术性质能满足要求的岩石。如承重用的石材(基础、勒脚、柱和墙等)主要应考虑其 强度等级、耐久性、抗冻性

水泥砂浆强度 土木工程材料习题集及答案详解

等技术性能;围护结构用的石材应考虑是否具有良好的绝热性能;用作 地面、台阶等的石材应坚韧耐磨;装饰用的构件(饰面板、栏杆和扶手等)需考虑石材本身的色彩 与环境的协调及可加工性,用于室外时尚应考虑其抗风化性,用于室内时则须考虑其放射性等;对 处在高温、高湿且严寒等特殊条件下的构件,还要分别考虑所用石材的耐久性、耐水性、抗冻性及 耐化学侵蚀性等。[www.61k.com] (2)经济性:主要考虑天然石材的密度大、不宜长途运输,应综合考虑地方资源,尽可能做 到就地取材。 5、石材选用应根据建筑物的类型、使用要求和环境条件等,满足适用、经济和美观等方面的 要求。 用于室内的饰面石材,主要应考虑其花纹、颜色和光泽等装饰性能,颜色以明快亮丽为主,用 作地面的石材还应考虑其耐磨性。室内墙面优先选用大理石,室内地面可选用大理石或花岗岩,但 用于室内的花岗岩须选择放射性水平较低的。 室外墙面的饰面石材,其颜色应能满足设计要求,要有良好的抗风化性和耐久性,用作地面的 石材还应坚韧耐磨。外墙面与广场地面的饰面可选用花岗石、石英石,墙面浮雕可选用质纯、结构 致密、耐风化的大理石品种(汉白玉、艾叶青等) 。大理石硬度不大易于加工、装饰性强,是工艺美 术、雕塑等艺术造型的上乘材料。 6、采用的石材可能是普通大理石。由于学校所在城市污染较严重,酸雨较多,普通大理石主 ,易被酸侵蚀,耐风化性能差,所以在较短时 要成分为 CaCO3,孔隙率较高(汉白玉、艾叶青除外) 间内石材表面在酸作用下就产生腐蚀,导致失光。经过几年物理化学作用后,易产生裂纹甚至剥落。 通过对这种石材分析后,证实是孔隙率高的普通大理石。8 金属材料习题解答 金属材料习题解答一、名词解释 1、沸腾钢:脱氧不完全,浇筑后有大量 CO 气体逸出,引起钢夜激烈沸腾的钢。 2、镇静钢:脱氧充分,铸锭时钢夜平静凝固的钢。 3、偏析:指某些化学成分在钢中分布不均匀,富集于某些区域的现象,对钢的质量影响很大。 4、屈服点:钢材试样在受拉过程中,应力基本保持不变而应变显著增加时的应力,也称屈服强 度,用σs 表示。 5、抗拉强度:钢材受拉破坏时所能达到的最大应力,常用σb 表示。 6、屈强比:钢材的屈服强度与抗拉强度的比值。 7、伸长率:钢筋拉伸试验时,试样拉断后,标距的伸长值与原始标距长度的百分率。68 8、冲击韧性:钢材抵抗冲击荷载作用的能力。 9、冷脆性及脆性临界温度:钢材的冲击韧性随温度的降低而下降,其规律是开始下降缓和,当 达到一定温度范围时,

水泥砂浆强度 土木工程材料习题集及答案详解

突然下降很多而呈脆性,这种性质称为钢材的冷脆性,此时的温度称为脆性 临界温度。[www.61k.com) 10、时效与时效敏感性:随着时间的延长,钢材呈现出强度和硬度提高,塑性和韧性降低的现 象称为时效。因时效作用导致钢材性能改变程度的大小称为时效敏感性。 11、疲劳破坏:在交变应力的反复作用下,钢材往往在工作应力远小于抗拉强度时断裂的现象。 12、冷弯性能:钢材在常温下承受弯曲变形的能力。 13、冷加工强化:将钢材在常温下进行冷拉、冷拔或冷轧,使其产生塑性变形,从而提高屈服 强度,但塑性和韧性相应降低的现象。 14、时效处理:将经过冷加工强化后的钢材在常温下存放 15~20d,或加热至 100~200°C 并保持 一定时间,其强度和硬度进一步提高,塑性和韧性进一步降低,这一过程称为时效处理。前者称为 自然时效,后者称为人工时效。 二、判断题 1×;2√;3√;4×;5√;6√;7√;8√;9√;10×;11×;12√;13√;14√;15√; 三、填空题 1、低碳钢、中碳钢、高碳钢、低碳钢;2、低合金钢、中合金钢、高合金钢、低合金钢;3、沸 腾钢、镇静钢、特殊镇静钢;4、弹性阶段、屈服阶段、强化阶段、颈缩阶段;5、屈服点、抗拉强 度、伸长率、 屈服点;6、抗拉性能、冲击韧性、耐疲劳性、硬度、冷弯、焊接、冷加工及时效强 化、热处理;7、时效;8、大、小;9、P、S、O、N、H、冷脆、热脆;10、7.珠光体、铁素体、珠 光体、珠光体、铁素体、强度、硬度、塑性、韧性;11、含碳量、强度、硬度、塑性、韧性、可焊 性;12、屈服强度、抗拉强度、伸长率;13、屈服点为 235MPa 的 A 级沸腾钢、屈服点为 345MPa 的 D 级镇静钢;14、化学腐蚀、电化学腐蚀、采用耐候钢、金属覆盖、非金属覆盖;15、差、涂防 火涂料、用不燃性板材包裹、用混凝土包裹 四、选择题 1(D)提示:钢含碳量在 2.06%以下。炼钢的目的就是通过冶炼使生铁中的含碳量降低到 2.06% 以下,其他杂质含量也降低到允许范围之内,以改善其技术性能,提高质量。碳含量会增加钢的冷 脆性和时效敏感性,降低冲击韧性和可焊性,特别是低温冲击韧性的降低更显著。 2、 (A)提示:钢材是一种抗拉强度与抗压强度比较相近的材料,经冷拉后其强度与硬度提高, 而塑性、韧性降低。钢材的可焊性受含碳量及含硫量的影响,当二者含量高时,则不可焊接。钢材 的晶体组成结构为金属键型,决定了其耐火性差(比混凝土耐火性低) ,受火作用时会发生显著的变 形,使结构破坏。 3 (A) 提示: 碳素钢根据含碳量分为: 低碳钢 (含碳量小于 0.25%) 中碳钢 、 (含碳量 0.25%~0.60%

水泥砂浆强度 土木工程材料习题集及答案详解

) 和高碳钢(含碳量 0.6% ~2.06%) 。[www.61k.com] 4(B)提示:伸长率是反映钢材塑性变形能力大小的指标。 5(D)提示:检测碳素结构钢,不必做硬度试验。 6(C)提示:冲击韧性反映钢材抵抗冲击荷载的能力,用冲击试验来测定。 7(C)提示:冷弯试验反映钢材处于不利变形条件下的塑性,可揭示钢材是否存在内部组织不 均匀、内应力和夹杂物等缺陷。 8(D)提示:钢材经冷加工强化及时效处理后,屈服点大幅度提高,而塑性和韧性降低,弹性 模量基本不变。 9(B)提示:低合金高强度结构钢中合金元素总量应小于 5%。 10(D)提示:工程使用钢筋时,应检测的项目是屈服点、抗拉强度、伸长率和冷弯。 11(B)提示:含碳量高将增加焊接的硬脆性,含碳量小于 0.25%的碳素钢具有良好的可焊性。69 12(D)提示:疲劳破坏是钢材在交变荷载反复作用时在低应力状态下突然发生的脆性断裂破坏 的现象,所以危害极大,往往造成灾难性的事故。 13(D)提示:建筑用碳素钢的含 C 量均<0.8%,其基本组织为铁素体和珠光体。当含碳量增大 时,珠光体含量增大,铁素体相应减少,因而钢的强度、硬度提高,但塑性和韧性则相应下降。 14(A)提示:冷拉钢筋由于冷加工强化,其塑性和韧性较差,容易发生脆断。 15(D)提示:因为氯离子会破坏钢筋的保护膜,加速钢筋的锈蚀。 16(A)提示:热轧钢筋随级别增大,则其强度增大,而塑性、韧性和可焊性降低。 17(D)提示:Q235-A 适用于只承受静荷载作用的结构;Q235-B 适用于承受动荷载的普通焊接 结构; Q235-C 适用于承受动荷载的重要焊接结构; Q235-D 适用于低温下承受动荷载的重要焊接结构。 18(D)提示:钢材经冷加工后,其强度提高,塑性和韧性降低而变得硬、脆,使用时应注意 其性能的变化。 19(D)提示:在大跨度或重荷载作用下的预应力混凝土结构中,宜选用钢绞线。因为其强度高、 长度大无接头、柔性好可曲线布置。 20(D)提示:钢结构表面刷防锈漆通常采用刷两道漆:底漆和面漆。常用底漆有红丹、环氧富 锌漆、铁红环氧底漆等。面漆有灰铅漆、醇酸磁漆、酚醛磁漆等。 五、问答题 1、沸腾钢脱氧不充分,碳和有害杂质磷、硫等的偏析较严重,钢的致密程度较差,使钢的冲击 韧性和可焊性较差,特别是低温冲击韧性的降低更显著。但由于成本较低、产量较高,可用于一般 的建筑结构中。 镇静钢脱氧充分,偏析程度小,质量均匀,结构致密,钢的冲击韧性和可焊性等较沸腾钢好, 可用于承受冲击荷载或其它重要的结构。 2、钢材受力达到屈服点后,塑性变形迅速增大,尽管尚未破坏但

水泥砂浆强度 土木工程材料习题集及答案详解

已不能满足使用要求。[www.61k.com)故钢结 构设计中一般以屈服点作为强度取值的依据。 3、屈强比是钢材的屈服点与抗拉强度的比值,屈强比愈小,反映钢材受力超过屈服点工作时的 可靠性愈大,因而结构的安全性愈高;但屈强比太小,则反映钢材不能被有效利用,造成浪费。 4、钢材经冷加工强化后,屈服点提高,抗拉强度不变,塑性、韧性、弹性模量降低,脆性增大。 再经时效处理后,屈服点进一步提高,抗拉强度也提高,塑性、韧性进一步降低,脆性还将增大, 弹性模量基本恢复。实际使用中应注意其性能的变化。 工程中对钢筋进行冷加工及时效处理的主要目的是为了节省钢材。例如,钢筋经冷拉后,屈服 点可提高 20%~30%,长度增加 4%~10%,一般可节约钢材 10%~20%。此外,冷拉还兼有调直和除锈 的作用。 5、由于对钢筋冷拉可提高其屈服强度,而塑性变形能力有所降低,因此工地上常对强度偏低而 塑性偏大的低碳盘条钢筋进行冷拉,提高强度,降低塑性,以提高钢筋的利用率。 6、建筑钢材的含碳量不大于 0.8%,当含碳量增大时,钢材的强度、硬度提高,塑性、韧性降 低,可焊性降低(含碳量大于 0.3%时,可焊性显著下降) ,冷脆性和时效敏感性增大,耐大气锈蚀 性下降。 7、建筑钢材的主要检验项目有: (1)拉伸试验:测定钢材的屈服点、抗拉强度和伸长率,反映 钢材的力学强度和塑性; (2)冷弯试验:反映钢材在常温下承受弯曲变形的能力,是对钢材质量和 焊接质量的一种较严格的检验; (3)冲击试验:测定钢材抵抗冲击荷载的能力,反映钢材的韧性。 8、碳素结构钢随着牌号的增大,含碳量增大,其强度增大,但塑性和韧性降低,冷弯性和可焊 性逐渐降低。 9、Q235 号碳素结构钢被广泛应用于建筑工程中,主要是由于它的机械强度较高,塑性、韧性、 可焊性及可加工性等综合性能好,且冶炼方便,成本较低。 Q235 号钢按质量分为四个等级,其中 A、B 级为普通质量钢,适合一般的钢结构工程,C、D 级70 为优质钢,适合受动荷载作用的重要焊接结构,其中 D 级适用于处于低温下的重要结构。 10、低合金高强度结构钢与碳素结构钢相比具有轻质高强,抗冲击性强,塑性、韧性、可焊性 和冷加工性好,易于加工与施工,耐腐蚀性、耐低温性好,使用寿命长等一系列良好的综合性能, 可节约钢材,具有显著的经济效益。因此,低合金高强度结构钢广泛用作高层及大跨度建筑的主体 结构材料。 11、热轧钢筋按屈服强度划分牌号,按外形分为光圆钢筋和带肋钢筋两种类型,是建筑工程中 用量最大的钢材品种之一。 (1)热轧光

水泥砂浆强度 土木工程材料习题集及答案详解

圆钢筋分为 HPB235 和 HPB300 两个牌号,由 Q235 和 Q300 碳素结构钢轧制而成。(www.61k.com)其 强度较低,但塑性、韧性、焊接性和冷加工性好,广泛用作普通中小型钢筋混凝土结构的主要受力 钢筋和构造筋等。 (2)热轧带肋钢筋分为普通型(直径 6~25mm)和细晶粒型(直径 28~50mm)两种,各有三个牌 号,即普通型为:HRB335、HRB400、HRB500;细晶粒型为:HRBF335、HRBF400、HRBF500。带肋钢筋 加强了钢筋与混凝土之间的握裹力,可有效防止混凝土与配筋之间发生相对位移。 其中,HRB335 和 HRB400 由低合金镇静钢和半镇静钢轧制而成,以硅、锰为主要强化元素,其 强度较高,塑性和可焊性均较好,广泛用作大、中型钢筋混凝土结构的主筋,经冷拉处理后也可作 预应力钢筋。 而 HRB500 由中碳低合金镇静钢轧制而成,除以硅、锰为主要合金元素外,还加入钒或钛作为固 溶弥散强化元素,使之在提高强度的同时保证塑性和韧性。主要用作预应力钢筋。但其可焊性较差, 如需焊接,应采用适当的焊接方法和焊后热处理工艺,以保证焊接接头及其热影响区不产生淬硬组 织,不发生脆性断裂。 六、计算题 1、解: 钢筋的屈服强度为:σ s ,1 =Fs ,1 A=42.4 × 103 1 × 3.14 × 122 4= 375( MPa ) , σ s ,2 =Fs ,2 A=41.5 × 103 1 × 3.14 × 12 2 4= 367( MPa )钢筋的抗拉强度为:σ b,1 =Fb ,1 A=62.0 × 103 1 × 3.14 ×12 2 4= 548( MPa ) , σ b ,2 =Fb ,2 A=61.6 ×103 1 × 3.14 × 122 4= 545( MPa )钢筋的伸长率为:δ 5,1 = δ 5,2 =l1 ? l0 71.6 ? 60 × 100% = × 100% = 18.5% l0 60 l2 ? l0 72.0 ? 60 ×100% = × 100% = 20% l0 60钢筋的屈强比为:第一根钢筋:σ s ,1 375 σ 367 = = 0.68 ,第二根钢筋: s ,2 = = 0.67 σ b,1 548 σ b,2 545该批钢筋的牌号为 HRB335 号热轧带肋钢筋,由普通低合金结构钢轧制而成,通常屈强比的合71 理范围为 0.65~0.75。所以该钢材的安全可靠程度较高,有效利用率较合理。9 合成高分子材料习题解答一、名词解释 1、聚合度:构成聚合物大分子的最小重复结构单元叫链节,链节的重复次数叫做聚合度。 2、加聚反应及加聚物:由低分子量的不饱和的单体分子相互加成而连接成大分子链且不析出小 分子的反应称为加聚反应。其反应物生成物称为加聚物(或聚合树脂) 。 3、均聚物与共聚物:一种单体经过加聚反应生成的聚合物称为均聚物,如聚乙烯、聚氯乙烯和 聚苯乙烯等;两种或两种以上单体经过加聚反应生成的聚合物称为共聚物,如 ABS 塑料是丙烯腈、 丁二烯和苯乙烯三种单体的共聚物。 4、缩聚反应及缩聚物:具有双官能团的单体相互作用生成聚合物,同时析出某些小分子化合物 (如水、氨和

三 : JavaEE学习篇之--JDBC详解

原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/26164629

目录

1.摘要

2.JDBC的使用步骤

1.注册驱动 只做一次

2.建立连接Connection

3.创建执行SQL的语句Statement

4.处理执行结果ResultSet

5.释放资源

3.使用JDBC来实现CRUD的操作

4.Statement中的sql依赖注入的问题

5.JDBC中特殊数据类型的操作问题

1.第一个是日期问题

2.第二个问题就是大文本数据的问题

6.JDBC中事务的概念

7.JDBC中调用存储过程

8.JDBC来实现批处理功能

9.JDBC中的滚动结果集和分页技术

10.JDBC中的可更新以及对更新敏感的结果集操作

11.元数据的相关知识

1.数据库的元数据信息

2.查询参数的元数据信息

3.结果集中元数据信息

12.JDBC中的数据源

13.JDBC中CRUD的模板模式

14.Spring框架中的JdbcTemplate

1.加强版的JdbcTemplate

1.NamedParameterJdbcTemplate

2.SimpleJdbcTemplate

今天我们来说一下关于JDBC的相关知识,关于JDBC我想大家都不陌生了,而且我记得早就开始使用它了,记得那是大二的时候做课程设计,但是那时候是为了完成任务,所以遇到问题就google,那时候也没有时间去整理,所以这次就来详细说一下关于JDBC的知识

摘要:

JDBC(Java Data Base Connectivity,java数据库连接),由一些接口和类构成的API。(www.61k.com] J2SE的一部分,由java.sql,javax.sql包组成。

应用程序、JDBC API、数据库驱动及数据库之间的关系

jdbc [转载]JavaEE学习篇之--JDBC详解

JDBC的使用步骤

1.注册驱动 (只做一次)

方式一:Class.forName(“com.mysql.jdbc.Driver”); 推荐这种方式,不会对具体的驱动类产生依赖。方式二:DriverManager.registerDriver(com.mysql.jdbc.Driver); 会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。方式三:System.setProperty(“jdbc.drivers”, “driver1:driver2”); 虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。  驱动类型(四种类型)

2.建立连接(Connection) 

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. Connection conn = DriverManager.getConnection(url, user, password);  

Connection conn = DriverManager.getConnection(url, user, password);

url格式:JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&… User,password可以用“属性名=属性值”方式告诉数据库; 其他参数如:useUnicode=true&characterEncoding=GBK。

3.创建执行SQL的语句(Statement)

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. Statement  
  2. Statement st = conn.createStatement();  
  3. st.executeQuery(sql);  
  4. PreparedStatement  
  5. String sql = “select * from table_name where col_name=?”;  
  6. PreparedStatement ps = conn.preparedStatement(sql);  
  7. ps.setString(1, “col_value”);  
  8. ps.executeQuery();  

StatementStatement st = conn.createStatement();st.executeQuery(sql);PreparedStatementString sql = “select * from table_name where col_name=?”;PreparedStatement ps = conn.preparedStatement(sql);ps.setString(1, “col_value”);ps.executeQuery();

4.处理执行结果(ResultSet)

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. ResultSet rs = statement.executeQuery(sql);  
  2. While(rs.next()){  
  3. rs.getString(“col_name”);  
  4. rs.getInt(“col_name”);  
  5. //…  
  6. }  

ResultSet rs = statement.executeQuery(sql);While(rs.next()){rs.getString(“col_name”);rs.getInt(“col_name”);//…}

5.释放资源

释放ResultSet, Statement,Connection. 数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

下面来看一下完整的Demo:

工具类:JdbcUtils

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.firstdemo;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7. import java.sql.Statement;  
  8.   
  9. import javax.sql.DataSource;  
  10.   
  11. public class JdbcUtils {  
  12.       
  13.     private static String user = "root";  
  14.     private static String password = "123456";  
  15.     private static String dbName = "test";  
  16.     private static  String url = "jdbc:mysql://localhost:3306/"+dbName+"?user="+user+"&password="+password+"&useUnicode=true&characterEncoding=gb2312";  
  17.       
  18.     private static DataSource dataSource = null;  
  19.       
  20.     /** 
  21.      * 加载驱动 
  22.      */  
  23.     static{  
  24.         try{  
  25.             Class.forName("com.mysql.jdbc.Driver");  
  26.         }catch(Exception e){  
  27.             System.out.println("Exception:"+e.getMessage()+"");  
  28.             throw new ExceptionInInitializerError(e);  
  29.         }  
  30.     }  
  31.       
  32.     private JdbcUtils(){  
  33.     }  
  34.       
  35.     /** 
  36.      * 获取连接 
  37.      * @return 
  38.      * @throws SQLException 
  39.      */  
  40.     public static Connection getConnection() throws SQLException{  
  41.         return DriverManager.getConnection(url);  
  42.     }  
  43.       
  44.     public static DataSource getDataSource(){  
  45.         return dataSource;  
  46.     }  
  47.       
  48.     /** 
  49.      * 释放资源 
  50.      * @param rs 
  51.      * @param st 
  52.      * @param conn 
  53.      */  
  54.     public static void free(ResultSet rs,Statement st,Connection conn){  
  55.         try{  
  56.             if(rs != null){  
  57.                 rs.close();  
  58.             }  
  59.         }catch(SQLException e){  
  60.             e.printStackTrace();  
  61.         }finally{  
  62.             try{  
  63.                 if(st != null){  
  64.                     st.close();  
  65.                 }  
  66.             }catch(SQLException e){  
  67.                 e.printStackTrace();  
  68.             }finally{  
  69.                 try{  
  70.                     if(conn != null){  
  71.                         conn.close();  
  72.                     }  
  73.                 }catch(SQLException e){  
  74.                     e.printStackTrace();  
  75.                 }  
  76.             }  
  77.         }  
  78.               
  79.     }  
  80.   
  81. }  

package com.weijia.firstdemo;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.sql.DataSource;public class JdbcUtils {private static String user = "root";private static String password = "123456";private static String dbName = "test";private static String url = "jdbc:mysql://localhost:3306/"+dbName+"?user="+user+"&password="+password+"&useUnicode=true&characterEncoding=gb2312";private static DataSource dataSource = null;/** * 加载驱动 */static{try{Class.forName("com.mysql.jdbc.Driver");}catch(Exception e){System.out.println("Exception:"+e.getMessage()+"");throw new ExceptionInInitializerError(e);}}private JdbcUtils(){}/** * 获取连接 * @return * @throws SQLException */public static Connection getConnection() throws SQLException{return DriverManager.getConnection(url);}public static DataSource getDataSource(){return dataSource;}/** * 释放资源 * @param rs * @param st * @param conn */public static void free(ResultSet rs,Statement st,Connection conn){try{if(rs != null){rs.close();}}catch(SQLException e){e.printStackTrace();}finally{try{if(st != null){st.close();}}catch(SQLException e){e.printStackTrace();}finally{try{if(conn != null){conn.close();}}catch(SQLException e){e.printStackTrace();}}}}}

测试类:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.firstdemo;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7. import java.sql.Statement;  
  8.   
  9. public class Demo {  
  10.       
  11.     public static void main(String[] args) throws Exception{  
  12.         //测试代码:  
  13.         test();  
  14.         //标准规范代码:  
  15.         template();  
  16.     }  
  17.       
  18.     //模板代码  
  19.     public static void template(){  
  20.         Connection conn = null;  
  21.         Statement st = null;  
  22.         ResultSet rs = null;  
  23.         try {  
  24.             conn = JdbcUtils.getConnection();  
  25.             //创建语句  
  26.             st = conn.createStatement();  
  27.             //执行语句  
  28.             rs = st.executeQuery("select * from user");  
  29.             //处理结果  
  30.             while(rs.next()){  
  31.                 System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t" + rs.getObject(3) + "\t");  
  32.             }  
  33.         }catch(SQLException e){  
  34.             e.printStackTrace();  
  35.         }catch(Exception e){  
  36.             e.printStackTrace();  
  37.         }finally{  
  38.             JdbcUtils.free(rs, st, conn);  
  39.         }  
  40.     }  
  41.       
  42.     //测试  
  43.     static void test() throws Exception{  
  44.         //注册驱动  
  45.         DriverManager.registerDriver(new com.mysql.jdbc.Driver());  
  46.         //通过系统属性来注册驱动  
  47.         System.setProperty("jdbc.drivers","");  
  48.         //静态加载驱动  
  49.         Class.forName("com.mysql.jdbc.Driver");  
  50.           
  51.         //建立连接  
  52.         String url = "jdbc:mysql://localhost:3306";  
  53.         String userName = "root";  
  54.         String password = "";  
  55.         Connection conn = DriverManager.getConnection(url,userName,password);  
  56.           
  57.         //创建语句  
  58.         Statement st = conn.createStatement();  
  59.           
  60.         //执行语句  
  61.         ResultSet rs = st.executeQuery("select * from user");  
  62.           
  63.         //处理结果  
  64.         while(rs.next()){  
  65.             System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t" + rs.getObject(3) + "\t");  
  66.         }  
  67.           
  68.         //释放资源  
  69.         rs.close();  
  70.         st.close();  
  71.         conn.close();  
  72.     }  
  73.   
  74. }  

package com.weijia.firstdemo;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class Demo {public static void main(String[] args) throws Exception{//测试代码:test();//标准规范代码:template();}//模板代码public static void template(){Connection conn = null;Statement st = null;ResultSet rs = null;try {conn = JdbcUtils.getConnection();//创建语句st = conn.createStatement();//执行语句rs = st.executeQuery("select * from user");//处理结果while(rs.next()){System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t" + rs.getObject(3) + "\t");}}catch(SQLException e){e.printStackTrace();}catch(Exception e){e.printStackTrace();}finally{JdbcUtils.free(rs, st, conn);}}//测试static void test() throws Exception{//注册驱动DriverManager.registerDriver(new com.mysql.jdbc.Driver());//通过系统属性来注册驱动System.setProperty("jdbc.drivers","");//静态加载驱动Class.forName("com.mysql.jdbc.Driver");//建立连接String url = "jdbc:mysql://localhost:3306";String userName = "root";String password = "";Connection conn = DriverManager.getConnection(url,userName,password);//创建语句Statement st = conn.createStatement();//执行语句ResultSet rs = st.executeQuery("select * from user");//处理结果while(rs.next()){System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t" + rs.getObject(3) + "\t");}//释放资源rs.close();st.close();conn.close();}}

注意:这里还要记住引入额外的jar.这个网上很多的,这里使用的是MySql,搜一下MySql驱动的jar就行了。这里我们将一些操作都放到一个工具类中,这种方式是很优雅的。

使用JDBC来实现CRUD的操作

我们这里就采用分层操作:Dao层,Service层

首先看一下domain域中的User实体

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.domain;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class User {  
  6.       
  7.     private int id;  
  8.     private String name;  
  9.     private Date birthday;  
  10.     private float money;  
  11.       
  12.     public User(){  
  13.           
  14.     }  
  15.       
  16.     public User(int id,String name,Date birthday,float money){  
  17.         this.id = id;  
  18.         this.name = name;  
  19.         this.birthday = birthday;  
  20.         this.money = money;  
  21.     }  
  22.       
  23.     public int getId() {  
  24.         return id;  
  25.     }  
  26.     public void setId(int id) {  
  27.         this.id = id;  
  28.     }  
  29.     public String getName() {  
  30.         return name;  
  31.     }  
  32.     public void setName(String name) {  
  33.         this.name = name;  
  34.     }  
  35.     public Date getBirthday() {  
  36.         return birthday;  
  37.     }  
  38.     public void setBirthday(Date birthday) {  
  39.         this.birthday = birthday;  
  40.     }  
  41.     public float getMoney() {  
  42.         return money;  
  43.     }  
  44.     public void setMoney(float money) {  
  45.         this.money = money;  
  46.     }  
  47.   
  48.     @Override  
  49.     public String toString(){  
  50.         return "[id="+id+",name="+name+",birthday="+birthday+",money="+money+"]";  
  51.     }  
  52. }  

package com.weijia.domain;import java.util.Date;public class User {private int id;private String name;private Date birthday;private float money;public User(){}public User(int id,String name,Date birthday,float money){this.id = id;this.name = name;this.birthday = birthday;this.money = money;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public float getMoney() {return money;}public void setMoney(float money) {this.money = money;}@Overridepublic String toString(){return "[id="+id+",name="+name+",birthday="+birthday+",money="+money+"]";}}

再来看一下Dao层结构:

接口:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.domain;  
  2.   
  3. public interface UserDao {  
  4.   
  5.     //添加用户  
  6.     public void addUser(User user);  
  7.     //通过userid查询用户,id是唯一的,所以返回的是一个user  
  8.     public User getUserById(int userId);  
  9.     //更新用户信息  
  10.     public int update(User user);  
  11.     //删除用户信息  
  12.     public int delete(User user);  
  13.       
  14. }  

package com.weijia.domain;public interface UserDao {//添加用户public void addUser(User user);//通过userid查询用户,id是唯一的,所以返回的是一个userpublic User getUserById(int userId);//更新用户信息public int update(User user);//删除用户信息public int delete(User user);}

实现类:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.domain;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.Date;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.ResultSet;  
  7.   
  8. import com.weijia.firstdemo.JdbcUtils;  
  9.   
  10. public class UserDaoImpl implements UserDao{  
  11.   
  12.     /** 
  13.      * 添加用户 
  14.      */  
  15.     public void addUser(User user) {  
  16.         Connection conn = null;  
  17.         PreparedStatement st = null;  
  18.         try{  
  19.             conn = JdbcUtils.getConnection();  
  20.             String sql = "insert into user(id,name,birthday,money) values(?,?,?,?)";  
  21.             st = conn.prepareStatement(sql);  
  22.             st.setInt(1,user.getId());  
  23.             st.setString(2,user.getName());  
  24.             //日期格式的转换(utils.date转化成sql.date)  
  25.             st.setDate(3,new Date(user.getBirthday().getTime()));  
  26.             st.setFloat(4, user.getMoney());  
  27.             int count = st.executeUpdate();  
  28.             System.out.println("添加记录条数:"+count);  
  29.         }catch(Exception e){  
  30.             throw new DaoException(e.getMessage(),e);  
  31.         }finally{  
  32.             JdbcUtils.free(null, st, conn);  
  33.         }  
  34.     }  
  35.   
  36.     /** 
  37.      * 删除用户 
  38.      */  
  39.     public int delete(User user) {  
  40.         Connection conn = null;  
  41.         PreparedStatement st = null;  
  42.         try{  
  43.             conn = JdbcUtils.getConnection();  
  44.             String sql = "delete from user where id=?";  
  45.             st = conn.prepareStatement(sql);  
  46.             st.setInt(1,user.getId());  
  47.             int count = -1;  
  48.             count = st.executeUpdate();  
  49.             System.out.println("删除记录条数:"+count);  
  50.             return count;  
  51.         }catch(Exception e){  
  52.             throw new DaoException(e.getMessage(),e);  
  53.         }finally{  
  54.             JdbcUtils.free(null, st, conn);  
  55.         }  
  56.     }  
  57.   
  58.     /** 
  59.      * 通过userId获取用户信息 
  60.      */  
  61.     public User getUserById(int userId) {  
  62.         Connection conn = null;  
  63.         PreparedStatement st = null;  
  64.         ResultSet rs = null;  
  65.         try{  
  66.             conn = JdbcUtils.getConnection();  
  67.             String sql = "select * from user where id=?";  
  68.             st = conn.prepareStatement(sql);  
  69.             st.setInt(1,userId);  
  70.             rs = st.executeQuery();  
  71.             if(rs.next()){  
  72.                 User user = new User();  
  73.                 user.setId(userId);  
  74.                 user.setName(rs.getString("name"));  
  75.                 user.setBirthday(rs.getDate("birthday"));  
  76.                 user.setMoney(rs.getFloat("money"));  
  77.                 return user;  
  78.             }  
  79.         }catch(Exception e){  
  80.             throw new DaoException(e.getMessage(),e);  
  81.         }finally{  
  82.             JdbcUtils.free(rs, st, conn);  
  83.         }  
  84.         return null;  
  85.     }  
  86.   
  87.     /** 
  88.      * 更新用户信息 
  89.      */  
  90.     public int update(User user){  
  91.         Connection conn = null;  
  92.         PreparedStatement st = null;  
  93.         try{  
  94.             conn = JdbcUtils.getConnection();  
  95.             String sql = "update user set name=?,birthday=?,money=? where id=?";  
  96.             st = conn.prepareStatement(sql);  
  97.             st.setString(1,user.getName());  
  98.             st.setDate(2,new Date(user.getBirthday().getTime()));  
  99.             st.setFloat(3,user.getMoney());  
  100.             st.setInt(3,user.getId());  
  101.             int count = 0;  
  102.             count = st.executeUpdate();  
  103.             System.out.println("更新的记录数:"+count);  
  104.             return count;  
  105.         }catch(Exception e){  
  106.             throw new DaoException(e.getMessage(),e);  
  107.         }finally{  
  108.             JdbcUtils.free(null, st, conn);  
  109.         }  
  110.     }  
  111.   
  112. }  

package com.weijia.domain;import java.sql.Connection;import java.sql.Date;import java.sql.PreparedStatement;import java.sql.ResultSet;import com.weijia.firstdemo.JdbcUtils;public class UserDaoImpl implements UserDao{/** * 添加用户 */public void addUser(User user) {Connection conn = null;PreparedStatement st = null;try{conn = JdbcUtils.getConnection();String sql = "insert into user(id,name,birthday,money) values(?,?,?,?)";st = conn.prepareStatement(sql);st.setInt(1,user.getId());st.setString(2,user.getName());//日期格式的转换(utils.date转化成sql.date)st.setDate(3,new Date(user.getBirthday().getTime()));st.setFloat(4, user.getMoney());int count = st.executeUpdate();System.out.println("添加记录条数:"+count);}catch(Exception e){throw new DaoException(e.getMessage(),e);}finally{JdbcUtils.free(null, st, conn);}}/** * 删除用户 */public int delete(User user) {Connection conn = null;PreparedStatement st = null;try{conn = JdbcUtils.getConnection();String sql = "delete from user where id=?";st = conn.prepareStatement(sql);st.setInt(1,user.getId());int count = -1;count = st.executeUpdate();System.out.println("删除记录条数:"+count);return count;}catch(Exception e){throw new DaoException(e.getMessage(),e);}finally{JdbcUtils.free(null, st, conn);}}/** * 通过userId获取用户信息 */public User getUserById(int userId) {Connection conn = null;PreparedStatement st = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();String sql = "select * from user where id=?";st = conn.prepareStatement(sql);st.setInt(1,userId);rs = st.executeQuery();if(rs.next()){User user = new User();user.setId(userId);user.setName(rs.getString("name"));user.setBirthday(rs.getDate("birthday"));user.setMoney(rs.getFloat("money"));return user;}}catch(Exception e){throw new DaoException(e.getMessage(),e);}finally{JdbcUtils.free(rs, st, conn);}return null;}/** * 更新用户信息 */public int update(User user){Connection conn = null;PreparedStatement st = null;try{conn = JdbcUtils.getConnection();String sql = "update user set name=?,birthday=?,money=? where id=?";st = conn.prepareStatement(sql);st.setString(1,user.getName());st.setDate(2,new Date(user.getBirthday().getTime()));st.setFloat(3,user.getMoney());st.setInt(3,user.getId());int count = 0;count = st.executeUpdate();System.out.println("更新的记录数:"+count);return count;}catch(Exception e){throw new DaoException(e.getMessage(),e);}finally{JdbcUtils.free(null, st, conn);}}}

然后是Servic层:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.domain;  
  2.   
  3. public class UserService {  
  4.       
  5.     private UserDao userDao;  
  6.       
  7.     public UserService(){  
  8.         //通过工厂实例化UserDao对象  
  9.         userDao = DaoFactory.getInstance().createUserDao();  
  10.         System.out.println("userDao:"+userDao);  
  11.     }  
  12.       
  13.     /** 
  14.      * 注册用户 
  15.      * @param user 
  16.      */  
  17.     public void regist(User user){  
  18.         if(user == null){  
  19.             System.out.println("注册信息无效!!");  
  20.         }else{  
  21.             userDao.addUser(user);  
  22.         }  
  23.           
  24.     }  
  25.       
  26.     /** 
  27.      * 查询用户 
  28.      * @param userId 
  29.      * @return 
  30.      */  
  31.     public User query(int userId){  
  32.         User user = userDao.getUserById(userId);  
  33.         if(user == null){  
  34.             System.out.println("查询结果为空!!");  
  35.         }else{  
  36.             System.out.println(user.getId()+"\t"+user.getName()+"\t"+user.getBirthday()+"\t"+user.getMoney());  
  37.         }  
  38.         return userDao.getUserById(userId);  
  39.     }  
  40.       
  41.     /** 
  42.      * 更新用户 
  43.      * @param user 
  44.      */  
  45.     public void update(User user){  
  46.         if(user.getId()<=0){  
  47.             System.out.println("用户id无效,无法更新");  
  48.         }else{  
  49.             userDao.update(user);  
  50.         }  
  51.     }  
  52.       
  53.     /** 
  54.      * 删除用户 
  55.      * @param user 
  56.      */  
  57.     public void delete(User user){  
  58.         if(user.getId()<=0){  
  59.             System.out.println("用户id无效,无法删除!!");  
  60.         }else{  
  61.             userDao.delete(user);  
  62.         }  
  63.     }  
  64.       
  65. }  

package com.weijia.domain;public class UserService {private UserDao userDao;public UserService(){//通过工厂实例化UserDao对象userDao = DaoFactory.getInstance().createUserDao();System.out.println("userDao:"+userDao);}/** * 注册用户 * @param user */public void regist(User user){if(user == null){System.out.println("注册信息无效!!");}else{userDao.addUser(user);}}/** * 查询用户 * @param userId * @return */public User query(int userId){User user = userDao.getUserById(userId);if(user == null){System.out.println("查询结果为空!!");}else{System.out.println(user.getId()+"\t"+user.getName()+"\t"+user.getBirthday()+"\t"+user.getMoney());}return userDao.getUserById(userId);}/** * 更新用户 * @param user */public void update(User user){if(user.getId()<=0){System.out.println("用户id无效,无法更新");}else{userDao.update(user);}}/** * 删除用户 * @param user */public void delete(User user){if(user.getId()<=0){System.out.println("用户id无效,无法删除!!");}else{userDao.delete(user);}}}

这里我们还需要额外的两个类:

一个是异常类,因为我们需要自定义我们自己的一个异常,这样方便进行捕获:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.domain;  
  2.   
  3. public class DaoException extends RuntimeException{  
  4.   
  5.     private static final long serialVersionUID = 1L;  
  6.       
  7.     public DaoException(){  
  8.           
  9.     }  
  10.       
  11.     public DaoException(Exception e){  
  12.         super(e);  
  13.     }  
  14.       
  15.     public DaoException(String msg){  
  16.         super(msg);  
  17.     }  
  18.       
  19.     public DaoException(String msg,Exception e){  
  20.         super(msg,e);  
  21.     }  
  22.   
  23. }  

package com.weijia.domain;public class DaoException extends RuntimeException{private static final long serialVersionUID = 1L;public DaoException(){}public DaoException(Exception e){super(e);}public DaoException(String msg){super(msg);}public DaoException(String msg,Exception e){super(msg,e);}}

同时,我们这里面采用工厂模式进行实例化UserDao对象:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.domain;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.util.Properties;  
  5.   
  6. public class DaoFactory {  
  7.     /** 
  8.      * 单例模式 
  9.      */  
  10.     private static UserDao userDao = null;  
  11.     private static DaoFactory instance = new DaoFactory();  
  12.       
  13.     private DaoFactory(){  
  14.         /** 
  15.          * 通过读取属性文件来动态的加载Dao层类 
  16.          */  
  17.         Properties prop = new Properties();  
  18.         try{  
  19.             FileInputStream fis = new FileInputStream("src/com/weijia/domain/daoconfig.properties");  
  20.             prop.load(fis);  
  21.             String className = prop.getProperty("userDaoClass");  
  22.             Class<?> clazz = Class.forName(className);  
  23.             userDao = (UserDao)clazz.newInstance();  
  24.             fis.close();  
  25.         }catch(Throwable e){  
  26.             throw new ExceptionInInitializerError(e);  
  27.         }  
  28.     }  
  29.       
  30.     public static DaoFactory getInstance(){  
  31.         return instance;  
  32.     }  
  33.       
  34.     public UserDao createUserDao(){  
  35.         return userDao;  
  36.     }  
  37.   
  38. }  

package com.weijia.domain;import java.io.FileInputStream;import java.util.Properties;public class DaoFactory {/** * 单例模式 */private static UserDao userDao = null;private static DaoFactory instance = new DaoFactory();private DaoFactory(){/** * 通过读取属性文件来动态的加载Dao层类 */Properties prop = new Properties();try{FileInputStream fis = new FileInputStream("src/com/weijia/domain/daoconfig.properties");prop.load(fis);String className = prop.getProperty("userDaoClass");Class<?> clazz = Class.forName(className);userDao = (UserDao)clazz.newInstance();fis.close();}catch(Throwable e){throw new ExceptionInInitializerError(e);}}public static DaoFactory getInstance(){return instance;}public UserDao createUserDao(){return userDao;}}

这里面是读取properties文件,然后去读取类名进行加载,这种方式是很灵活的

测试:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.domain;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class TestDemo {  
  6.       
  7.     public static void main(String[] args) throws Exception{  
  8.         UserService userService = new UserService();  
  9.         System.out.println("添加用户:");  
  10.         userService.regist(new User(1,"jiangwei",new Date(System.currentTimeMillis()),300));  
  11.     }  
  12.   
  13. }  

package com.weijia.domain;import java.util.Date;public class TestDemo {public static void main(String[] args) throws Exception{UserService userService = new UserService();System.out.println("添加用户:");userService.regist(new User(1,"jiangwei",new Date(System.currentTimeMillis()),300));}}

这里我们看到其实这些操作真的很简单,就是按照那样的几个步骤来操作即可,同时我们还需要将结构进行分层,以便管理,我们这里面测试的时候,撇开了创建数据库的一个环节,至于那个环节,也是不难的,可以从网上搜索一下即可。

Statement中的sql依赖注入的问题

接着来看一下关于我们上面的例子中使用了Statement进行操作的,其实这里面是存在一个问题的,就是会有sql注入的问题,我们先来看一下这个问题:

查询学生信息:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. /** 
  2.      * 使用Statement读取数据 
  3.      * @param name 
  4.      * @throws SQLException 
  5.      */  
  6.     static void read(String name) throws SQLException{  
  7.         Connection conn = null;  
  8.         Statement st = null;  
  9.         ResultSet rs = null;  
  10.         try {  
  11.             conn = JdbcUtils.getConnection();  
  12.             //创建语句  
  13.             st = conn.createStatement();  
  14.             //执行语句(不建议使用*)  
  15.             String sql = "select id,name from user where name='"+name+"'";  
  16.             rs = st.executeQuery(sql);  
  17.             //根据列名取数据  
  18.             while(rs.next()){  
  19.                 System.out.println(rs.getObject("id") + "\t" + rs.getObject("name") + "\t");  
  20.             }  
  21.         }catch(SQLException e){  
  22.             e.printStackTrace();  
  23.         }catch(Exception e){  
  24.             e.printStackTrace();  
  25.         }finally{  
  26.             JdbcUtils.free(rs, st, conn);  
  27.         }  
  28.     }  

/** * 使用Statement读取数据 * @param name * @throws SQLException */static void read(String name) throws SQLException{Connection conn = null;Statement st = null;ResultSet rs = null;try {conn = JdbcUtils.getConnection();//创建语句st = conn.createStatement();//执行语句(不建议使用*)String sql = "select id,name from user where name='"+name+"'";rs = st.executeQuery(sql);//根据列名取数据while(rs.next()){System.out.println(rs.getObject("id") + "\t" + rs.getObject("name") + "\t");}}catch(SQLException e){e.printStackTrace();}catch(Exception e){e.printStackTrace();}finally{JdbcUtils.free(rs, st, conn);}}

我们使用代码测试一下:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. read("'or 1 or'");  

read("'or 1 or'");

我们运行会发现,将查询出所有的学生的记录,这个是什么原因呢?我们不妨将sql打印一下会发现:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. select id,name from user where name=''or 1 or''  

select id,name from user where name=''or 1 or''

擦,因为sql语句中把1认为是true,又因为是或的关系,所以将所有的学生的信息查询出来了,这个就是sql注入,因为Statement会把传递进来的参数进行一下转化操作,用引号包含一下,所以会出现这个问题,那么我们该怎么解决呢?有的同学说我们可以添加一句过滤的代码,将传递的参数取出单引号,这个方法是可行的的,但是这个只能解决那些使用单引号的数据库,可能有的数据库使用的是双引号包含内容,那就不行了,所以应该想一个全套的方法,那么这里我们就是用一个叫做:PreparedStatement类,这个类是Statement类的子类,关于这两个类的区别可以查看我的另外一片文章:

http://blog.csdn.net/jiangwei0910410003/article/details/26143977

我们这里只看这个sql注入的问题:

我们将上面读取用户信息的代码改写成PreparedStatement:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. /** 
  2.      * 使用PreparedStatement 
  3.      * @param name 
  4.      * @throws SQLException 
  5.      */  
  6.     static void readPrepared(String name) throws SQLException{  
  7.         Connection conn = null;  
  8.         PreparedStatement st = null;  
  9.         ResultSet rs = null;  
  10.         try{  
  11.             conn = JdbcUtils.getConnection();  
  12.             //执行语句(不建议使用*)  
  13.             String sql = "select id,name from user where name=?";  
  14.             //创建语句  
  15.             st = conn.prepareStatement(sql);  
  16.             st.setString(1, name);  
  17.             rs = st.executeQuery();  
  18.             //根据列名取数据  
  19.             while(rs.next()){  
  20.                 System.out.println(rs.getObject("id") + "\t" + rs.getObject("name") + "\t");  
  21.             }  
  22.         }catch(Exception e){  
  23.               
  24.         }  
  25.     }  

/** * 使用PreparedStatement * @param name * @throws SQLException */static void readPrepared(String name) throws SQLException{Connection conn = null;PreparedStatement st = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();//执行语句(不建议使用*)String sql = "select id,name from user where name=?";//创建语句st = conn.prepareStatement(sql);st.setString(1, name);rs = st.executeQuery();//根据列名取数据while(rs.next()){System.out.println(rs.getObject("id") + "\t" + rs.getObject("name") + "\t");}}catch(Exception e){}}

之后我们在执行:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. readPrepared("'or 1 or'");  

readPrepared("'or 1 or'");

就不会全部查出来了,只会查询空结果,因为表中没有一个学生的名字叫做 'or 1 or'。

JDBC中特殊数据类型的操作问题

第一个是日期问题:

我们在操作日期问题的时候会发现,使用PreparedStatement进行参数赋值的时候,有一个方法是:setDate(...),但是这个方法接收的参数是sql中的Date类,而不是我们平常使用的util中的Date类,所以我们要做一次转化,通常我们是这样做的,就是在定义实体类的时候将其日期型的属性定义成util中的Date类型,在进行数据库操作的时候.

进行一次转换:setDate(x,new Date(birthday.getTime());,这里birthday就是一个util.Date类型的一个属性,而new Date是sql.Date类型的,这样转化就可以了,同样我们在读取数据的时候将转化操作反过来即可。

第二个问题就是大文本数据的问题

因为有时候我们会存入一些文本内容,因为varchar的大小在mysql中也是有上线的,所以我们这里要使用blob类型了,我们这里来看一下实例:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. /** 
  2.      * 插入大文本 
  3.      */  
  4.     static void insert(){  
  5.         Connection conn = null;  
  6.         PreparedStatement ps = null;  
  7.         ResultSet rs = null;  
  8.         try{  
  9.             conn = JdbcUtils.getConnection();  
  10.             String sql = "insert into clob_test(bit_text) values(?)";  
  11.             ps = conn.prepareStatement(sql);  
  12.             File file = new File("src/com/weijia/type/ClubDemo.java");  
  13.             Reader reader = new BufferedReader(new FileReader(file));  
  14.             
  15.             ps.setCharacterStream(1, reader, (int)file.length());  
  16.             ps.executeUpdate();  
  17.             reader.close();  
  18.         }catch(Exception e){  
  19.             e.printStackTrace();  
  20.         }finally{  
  21.             JdbcUtils.free(rs,ps,conn);  
  22.         }  
  23.     }  

/** * 插入大文本 */static void insert(){Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();String sql = "insert into clob_test(bit_text) values(?)";ps = conn.prepareStatement(sql);File file = new File("src/com/weijia/type/ClubDemo.java");Reader reader = new BufferedReader(new FileReader(file));//ps.setAsciiStream(1, new FileInputStream(file), (int)file.length());//英文的文档ps.setCharacterStream(1, reader, (int)file.length());ps.executeUpdate();reader.close();}catch(Exception e){e.printStackTrace();}finally{JdbcUtils.free(rs,ps,conn);}}

我们将一个Java代码文件插入到数据库中

我们查询一下clob_test表:

jdbc [转载]JavaEE学习篇之--JDBC详解

我们看到文件内容存入到库中了。同样我们也可以从表中读取一段文本出来,使用

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. Clob clob = rs.getClob(1);  
  2. InputStream is = clob.getAsciiStream();  

Clob clob = rs.getClob(1);InputStream is = clob.getAsciiStream();

或者读取一个Reader也是可以的,这里的InputStream和Reader是针对不同流,一个字节流,这个不需要关心编码问题的,Reader是字符流需要关心编码问题。

JDBC中事务的概念

我们当初在学习数据库的时候就了解事务的概念了,事务在数据库中的地位是很重要的。在JDBC中默认情况事务是自动提交的,所以我们在进行CRUD操作的时候不需要关心开启事务,提交事务,事务回滚的一些操作,那么下面我们就来看一下怎么手动的操作一些事务:

下载我们假定这样的一个场景:

有来两个用户1和2,现在

将用户1中的账户的钱减少10 查询用户2中的账户的钱,如果钱少于300,就增加10,否则抛出异常

看一下代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. static void test() throws Exception{  
  2.         Connection conn = null;  
  3.         Statement st = null;  
  4.         ResultSet rs = null;  
  5.         try{  
  6.             conn = JdbcUtils.getConnection();  
  7.             /**************事务START********************/  
  8.             conn.setAutoCommit(false);  
  9.             st = conn.createStatement();  
  10.               
  11.             String sql = "update user set money=money-10 where id=1";  
  12.             st.executeUpdate(sql);  
  13.               
  14.             sql = "select money from user where id=2";  
  15.             rs = st.executeQuery(sql);  
  16.             float money = 0.0f;  
  17.             if(rs.next()){  
  18.                 money = rs.getFloat("money");  
  19.             }  
  20.             if(money>300){  
  21.                 throw new RuntimeException("已经超过最大值");  
  22.             }  
  23.             sql = "update user set money=money+10 where id=2";  
  24.             st.executeUpdate(sql);  
  25.             conn.commit();  
  26.             /*******************事务END*********************/  
  27.         }catch(RuntimeException e){  
  28.               
  29.         }finally{  
  30.             JdbcUtils.free(rs, st, conn);  
  31.         }  
  32.     }  

static void test() throws Exception{Connection conn = null;Statement st = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();/**************事务START********************/conn.setAutoCommit(false);st = conn.createStatement();String sql = "update user set money=money-10 where id=1";st.executeUpdate(sql);sql = "select money from user where id=2";rs = st.executeQuery(sql);float money = 0.0f;if(rs.next()){money = rs.getFloat("money");}if(money>300){throw new RuntimeException("已经超过最大值");}sql = "update user set money=money+10 where id=2";st.executeUpdate(sql);conn.commit();/*******************事务END*********************/}catch(RuntimeException e){}finally{JdbcUtils.free(rs, st, conn);}}

我们运行测试一下,因为我们这里想让它抛出异常,所以我们将用户2中的钱改成大于300的,运行一下,结果抛出异常了,但是我们发现了用户1中的钱少了10,但是由于抛出异常,所以后面的代码不执行了,用户2中的钱没有变化,那么这样的操作明显不对的,所以我们这时候要解决这个问题,使用事务的回滚操作,在捕获到异常的时候需要做回滚操作:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. if(conn != null){  
  2.    conn.rollback();  
  3. }  

if(conn != null){ conn.rollback();}

这样即使抛出了异常,这些操作也会进行回滚的,那么用户1中的钱就不会少10了。

同时上面我们看到,我们是在开始的时候手动的关闭事务的自动提交,然后再手动的提交事务,下面再来看一下事务的保存点的问题。

场景:在上面的基础上,我们添加一个用户3,同时对用户1和用户3中的钱进行减少10,用户2的操作不变,但是当抛出异常的时候,我们希望用户1的操作还是有效的,用户3的操作还原,这时候我们需要将事务回滚到用户3的那个点就可以了,这就是事务的保存点的概念,看一下代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. static void test() throws Exception{  
  2.         Connection conn = null;  
  3.         Statement st = null;  
  4.         ResultSet rs = null;  
  5.         Savepoint sp = null;  
  6.         try{  
  7.             conn = JdbcUtils.getConnection();  
  8.             /**************事务START********************/  
  9.             conn.setAutoCommit(false);  
  10.             st = conn.createStatement();  
  11.               
  12.             String sql = "update user set money=money-10 where id=1";  
  13.             st.executeUpdate(sql);  
  14.             sp = conn.setSavepoint();//设置回滚点  
  15.               
  16.             sql = "update user set money=money-10 where id=3";  
  17.             st.executeUpdate(sql);  
  18.               
  19.             sql = "select money from user where id=2";  
  20.             rs = st.executeQuery(sql);  
  21.             float money = 0.0f;  
  22.             if(rs.next()){  
  23.                 money = rs.getFloat("money");  
  24.             }  
  25.             System.out.println("money:"+money);  
  26.             if(money>300){  
  27.                 throw new RuntimeException("已经超过最大值");  
  28.             }  
  29.             sql = "update user set money=money+10 where id=2";  
  30.             st.executeUpdate(sql);  
  31.             conn.commit();  
  32.             /*******************事务END*********************/  
  33.         }catch(SQLException e){  
  34.             if(conn != null && sp != null){  
  35.                 conn.rollback(sp);  
  36.                 conn.commit();  
  37.             }  
  38.         }finally{  
  39.             JdbcUtils.free(rs, st, conn);  
  40.         }  
  41.     }  

static void test() throws Exception{Connection conn = null;Statement st = null;ResultSet rs = null;Savepoint sp = null;try{conn = JdbcUtils.getConnection();/**************事务START********************/conn.setAutoCommit(false);st = conn.createStatement();String sql = "update user set money=money-10 where id=1";st.executeUpdate(sql);sp = conn.setSavepoint();//设置回滚点sql = "update user set money=money-10 where id=3";st.executeUpdate(sql);sql = "select money from user where id=2";rs = st.executeQuery(sql);float money = 0.0f;if(rs.next()){money = rs.getFloat("money");}System.out.println("money:"+money);if(money>300){throw new RuntimeException("已经超过最大值");}sql = "update user set money=money+10 where id=2";st.executeUpdate(sql);conn.commit();/*******************事务END*********************/}catch(SQLException e){if(conn != null && sp != null){conn.rollback(sp);conn.commit();}}finally{JdbcUtils.free(rs, st, conn);}}

我们在用户1之后设置一个保存点,在异常中只需要回滚到保存点就可以了。

下面再来看一下事务的隔离级别,因为这部分的内容比较重要和繁琐,请看另外一篇文章:

http://blog.csdn.net/jiangwei0910410003/article/details/24960785

JDBC中调用存储过程

关于MySql中的存储过程的知识请看这两篇文章:

http://blog.csdn.net/jiangwei0910410003/article/details/24964331

http://blog.csdn.net/jiangwei0910410003/article/details/24965087

当我们会创建存储过程的时候,我们在到JDBC中去调用这个存储过程,

下面看一下实例:

我们现在想在插入一条数据的时候能够得到主键id的值(因为我们一般把主键id的值设置成自增长的形式),首先来创建一个存储过程:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. delimiter $$ //修改定界符  
  2. drop procedure if exists addUser $$  
  3. create procedure addUser(in name varchar(45),in birthday date,in money float,out pid int)  
  4. begin  
  5.  insert into user(name,birthday,money) values(anme,birthday,money);  
  6.  select last_insert_id() into pid;
  7. end $$  
  8. delimiter ;  

delimiter $$ //修改定界符drop procedure if exists addUser $$create procedure addUser(in name varchar(45),in birthday date,in money float,out pid int)begin insert into user(name,birthday,money) values(anme,birthday,money); select last_insert_id() into pid;//当前线程拿到最后一次插入的记录的赋值给pid,这里要注意,user表中的id必须是主键自增长类型,不然报错end $$delimiter ;

这里name,birthday,money都是输入值是:in

pid是输出值:out

然后我们在代码中进行执行这个存储过程:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. static void test() throws Exception{  
  2.         Connection conn = null;  
  3.         CallableStatement cs = null;  
  4.         try{  
  5.             conn = JdbcUtils.getConnection();  
  6.             //name,birthday,money,id  
  7.             //存储过程名称是:addUser  
  8.             String sql = "{ call addUser(?,?,?,?)}";  
  9.             cs = conn.prepareCall(sql);  
  10.             cs.registerOutParameter(4, Types.INTEGER);  
  11.             cs.setString(1,"jiangwei");  
  12.             cs.setDate(2,new Date(System.currentTimeMillis()));  
  13.             cs.setFloat(3,300);  
  14.             cs.executeUpdate();  
  15.               
  16.             int id = cs.getInt(4);  
  17.             System.out.println("id:"+id);  
  18.               
  19.             /** 
  20.              * 还有另外一种方法是OtherApi,通过JDBC中的api来获取 
  21.              */  
  22.               
  23.         }catch(SQLException e){  
  24.             e.printStackTrace();  
  25.         }  
  26.     }  

static void test() throws Exception{Connection conn = null;CallableStatement cs = null;try{conn = JdbcUtils.getConnection();//name,birthday,money,id//存储过程名称是:addUserString sql = "{ call addUser(?,?,?,?)}";cs = conn.prepareCall(sql);cs.registerOutParameter(4, Types.INTEGER);cs.setString(1,"jiangwei");cs.setDate(2,new Date(System.currentTimeMillis()));cs.setFloat(3,300);cs.executeUpdate();int id = cs.getInt(4);System.out.println("id:"+id);/** * 通过这个存储过程来获取主键id是有一个问题,不同的数据库,存储过程的编写语法是不一样的,所以这种方法是不通用 * 还有另外一种方法是OtherApi,通过JDBC中的api来获取 */}catch(SQLException e){e.printStackTrace();}}

这样我们就得到了插入一条记录的时候得到他的主键id的值

其实这种调用存储结构的方法,在早起的时候是很实用的,因为那时候没有分层架构的思想,所以会将业务逻辑层的实现放到存储过程中去做了,在调用存储过程的时候,会发现一个问题就是这样去获取主键id的值的方式,是不通用的,因为不同的数据库可能存储过程的编写是不一样的,所以做不到一致性,而且现在有了三成架构的思想,我们慢慢的就将这种方式给淘汰了,而是直接使用JDBC给我们提供的一套api来获取主键key的值:直接上代码吧:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. static void test() throws Exception{  
  2.         java.sql.Connection conn = null;  
  3.         PreparedStatement ps = null;  
  4.         ResultSet rs = null;  
  5.         try{  
  6.             conn = JdbcUtils.getConnection();  
  7.             String sql = "insert into user(name,birthday,money) values('jiangwei','1987-01-01',400)";  
  8.             ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);//生成主键id  
  9.             ps.executeUpdate();  
  10.             //可能是组合主键,可能会返回一个ResultSet  
  11.             rs = ps.getGeneratedKeys();  
  12.             int id = 0;  
  13.             if(rs.next()){  
  14.                 id = rs.getInt(1);  
  15.             }  
  16.             System.out.println("id:"+id);  
  17.         }catch(Exception e){  
  18.             e.printStackTrace();  
  19.         }finally{  
  20.             JdbcUtils.free(rs,ps,conn);  
  21.         }  
  22.     }  

static void test() throws Exception{java.sql.Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();String sql = "insert into user(name,birthday,money) values('jiangwei','1987-01-01',400)";ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);//生成主键idps.executeUpdate();//可能是组合主键,可能会返回一个ResultSetrs = ps.getGeneratedKeys();int id = 0;if(rs.next()){id = rs.getInt(1);}System.out.println("id:"+id);}catch(Exception e){e.printStackTrace();}finally{JdbcUtils.free(rs,ps,conn);}}

我们只要设置一个参数Statement.RETURN_GENERATED_KEYS就可以得到一个主键集合了,这里要注意的是,因为有的表结构中会出现组合主键的情况,所以返回的是一个主键集合。这种方式就和底层数据库摆脱了关系,做到一致性了。

JDBC来实现批处理功能

我们在前面的例子中会发现,每次都是执行一条语句,然后关闭连接,这样效率可能会很低,如果我们想一次插入几千条数据的话,这时候可以使用批处理的功能,所谓批处理就是将多个执行语句进行捆绑然后去执行,但是效率上并非就一定高,因为我们知道这个数据库连接是tcp的,所以在将多个语句捆绑在一起的时候,在传输的过程中也是会进行分包发送的,这个包的大小也不是固定的,这个大小很难掌控的,我们之后经过多次测试之后,才能得到一次批量处理的适宜数量。下面来看一下实例吧:

首先是普通的插入一条数据:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. static void create() throws Exception{  
  2.         //建立一个连接的是很耗时间的  
  3.         //执行一个sql语句也是很耗时间的  
  4.         //优化的措施:批处理  
  5.         Connection conn = null;  
  6.         PreparedStatement ps = null;  
  7.         ResultSet rs = null;  
  8.         try{  
  9.             conn = JdbcUtils.getConnection();  
  10.             String sql = "insert user(name,birthday,money) values(?,?,?)";  
  11.             ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);  
  12.             ps.setString(1,"jiangwei");  
  13.             ps.setDate(2,new Date(System.currentTimeMillis()));  
  14.             ps.setFloat(3,400);  
  15.             ps.executeUpdate();  
  16.         }catch(Exception e){  
  17.             e.printStackTrace();  
  18.         }finally{  
  19.             JdbcUtils.free(rs, ps, conn);  
  20.         }  
  21.     }  

static void create() throws Exception{//建立一个连接的是很耗时间的//执行一个sql语句也是很耗时间的//优化的措施:批处理Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();String sql = "insert user(name,birthday,money) values(?,?,?)";ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);ps.setString(1,"jiangwei");ps.setDate(2,new Date(System.currentTimeMillis()));ps.setFloat(3,400);ps.executeUpdate();}catch(Exception e){e.printStackTrace();}finally{JdbcUtils.free(rs, ps, conn);}}

然后是批处理插入100条数据:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. static void createBatch() throws Exception{  
  2.         //建立一个连接的是很耗时间的  
  3.         //执行一个sql语句也是很耗时间的  
  4.         //优化的措施:批处理  
  5.         Connection conn = null;  
  6.         PreparedStatement ps = null;  
  7.         ResultSet rs = null;  
  8.         try{  
  9.             conn = JdbcUtils.getConnection();  
  10.             String sql = "insert user(name,birthday,money) values(?,?,?)";  
  11.             ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);  
  12.               
  13.             
  14.             
  15.             for(int i=0;i<100;i++){  
  16.                 ps.setString(1,"jiangwei");  
  17.                 ps.setDate(2,new Date(System.currentTimeMillis()));  
  18.                 ps.setFloat(3,400);  
  19.                 //ps.addBatch(sql);  
  20.                 ps.addBatch();  
  21.             }  
  22.             ps.executeBatch();  
  23.         }catch(Exception e){  
  24.             e.printStackTrace();  
  25.         }finally{  
  26.             JdbcUtils.free(rs, ps, conn);  
  27.         }  
  28.     }  

static void createBatch() throws Exception{//建立一个连接的是很耗时间的//执行一个sql语句也是很耗时间的//优化的措施:批处理Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();String sql = "insert user(name,birthday,money) values(?,?,?)";ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);//打包的话容量也不是越大越好,因为可能会内存溢出的,同时网络传输的过程中也是会进行拆包传输的,这个包的大小是不一定的//有时候打包的效率不一定就会高,这个和数据库的类型,版本都有关系的,所以我们在实践的过程中需要检验的for(int i=0;i<100;i++){ps.setString(1,"jiangwei");ps.setDate(2,new Date(System.currentTimeMillis()));ps.setFloat(3,400);//ps.addBatch(sql);ps.addBatch();}ps.executeBatch();}catch(Exception e){e.printStackTrace();}finally{JdbcUtils.free(rs, ps, conn);}}

测试代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. public static void main(String[] args) throws Exception{  
  2.         long startTime = System.currentTimeMillis();  
  3.         for(int i=0;i<100;i++){  
  4.             create();  
  5.         }  
  6.         long endTime = System.currentTimeMillis();  
  7.         System.out.println("For Waste Time:"+(endTime-startTime));  
  8.         createBatch();  
  9.         System.out.println("Batch Waste Time:"+(System.currentTimeMillis()-endTime));  
  10.     }  

public static void main(String[] args) throws Exception{long startTime = System.currentTimeMillis();for(int i=0;i<100;i++){create();}long endTime = System.currentTimeMillis();System.out.println("For Waste Time:"+(endTime-startTime));createBatch();System.out.println("Batch Waste Time:"+(System.currentTimeMillis()-endTime));}

我们在控制台中看到他们分别消耗的时间:

jdbc [转载]JavaEE学习篇之--JDBC详解

我们可以看到这个批处理消耗的时间明显很少。。当然我们在开始的时候也说过了,这个批处理的最适宜的大小要掌控好。

JDBC中的滚动结果集和分页技术

我们在前面的例子中可以看到,在处理结果集的时候,我们都是一条一条向后处理的,但是有时候我们需要人为的控制结果集的滚动,比如我们想往前滚动,想直接定位到哪个结果集记录等操作,当然JDBC也是提供了一套Api让我们来操作的

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. static void test() throws Exception{  
  2.         Connection conn = null;  
  3.         Statement st = null;  
  4.         ResultSet rs = null;  
  5.         try{  
  6.             conn = JdbcUtils.getConnection();  
  7.             //结果集可滚动的  
  8.             /** 
  9.              * 参数的含义: 
  10.                 ResultSet.CONCUR_UPDATABLE:指定可以更新 ResultSet 
  11.              */  
  12.             st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);  
  13.             rs = st.executeQuery("select id,name,money,birthday from user");  
  14.             //开始的时候这个游标的位置是第一条记录之前的一个位置  
  15.             //当执行rs.next的时候这个游标的位置就到第一条记录了  
  16.             /*while(rs.next()){ 
  17.                 //print result 
  18.             }*/  
  19.             //上面的代码执行之后,这个游标就到最后一条记录的下一个位置了  
  20.             
  21.             /*if(rs.previous()){ 
  22.             }*/  
  23.               
  24.             //绝对定位到第几行结果集  
  25.             
  26.             rs.absolute(2);  
  27.             System.out.println("id="+rs.getInt("id")+"\tname="+rs.getString("name")+"\tbirthday="+rs.getDate("birthday")+"\tmoney="+rs.getFloat("money"));  
  28.               
  29.             //滚到到第一行的前面(默认的就是这种情况)  
  30.             rs.beforeFirst();  
  31.               
  32.             //滚动到最后一行的后面  
  33.             rs.afterLast();  
  34.               
  35.             rs.isFirst();//判断是不是在第一行记录  
  36.             rs.isLast();//判断是不是在最后一行记录  
  37.             rs.isAfterLast();//判断是不是第一行前面的位置  
  38.             rs.isBeforeFirst();//判断是不是最后一行的后面的位置  
  39.               
  40.             
  41.               
  42.             //效率高的话是直接使用数据库中的分页查询语句:  
  43.             //select * from user limit 150,10;  
  44.               
  45.             
  46.         }catch(Exception e){  
  47.             e.printStackTrace();  
  48.         }finally{  
  49.             JdbcUtils.free(rs,st,conn);  
  50.         }  
  51.     }  

static void test() throws Exception{Connection conn = null;Statement st = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();//结果集可滚动的/** * 参数的含义: * ResultSet.RTYPE_FORWORD_ONLY:这是缺省值,只可向前滚动; ResultSet.TYPE_SCROLL_INSENSITIVE:双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。 ResultSet.TYPE_SCROLL_SENSITIVE:双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。ResultSet.CONCUR_READ_ONLY:这是缺省值,指定不可以更新 ResultSet ResultSet.CONCUR_UPDATABLE:指定可以更新 ResultSet */st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);rs = st.executeQuery("select id,name,money,birthday from user");//开始的时候这个游标的位置是第一条记录之前的一个位置//当执行rs.next的时候这个游标的位置就到第一条记录了/*while(rs.next()){//print result}*///上面的代码执行之后,这个游标就到最后一条记录的下一个位置了//所以这里在调用previous方法之后,这个游标就回到了最后一条记录中,所以打印了最后一条记录的值/*if(rs.previous()){System.out.println("id="+rs.getInt("id")+"\tname="+rs.getString("name")+"\tbirthday="+rs.getDate("birthday")+"\tmoney="+rs.getFloat("money"));}*///绝对定位到第几行结果集//这里传递的参数的下标是从1开始的,比如这里查询出来的记录有3条,那么这里的参数的范围是:1-3,如果传递的参数不在这个范围内就会报告异常的rs.absolute(2);System.out.println("id="+rs.getInt("id")+"\tname="+rs.getString("name")+"\tbirthday="+rs.getDate("birthday")+"\tmoney="+rs.getFloat("money"));//滚到到第一行的前面(默认的就是这种情况)rs.beforeFirst();//滚动到最后一行的后面rs.afterLast();rs.isFirst();//判断是不是在第一行记录rs.isLast();//判断是不是在最后一行记录rs.isAfterLast();//判断是不是第一行前面的位置rs.isBeforeFirst();//判断是不是最后一行的后面的位置//以上的api可以实现翻页的效果(这个效率很低的,因为是先把数据都查询到内存中,然后再进行分页显示的)//效率高的话是直接使用数据库中的分页查询语句://select * from user limit 150,10;//以上的api实现的分页功能是针对于那些本身不支持分页查询功能的数据库的,如果一个数据库支持分页功能,上面的代码就不能使用的,因为效率是很低的}catch(Exception e){e.printStackTrace();}finally{JdbcUtils.free(rs,st,conn);}}

我们看到结果集:rs有很多方法的,我们一次来看一下:

next():这个很常用的,就是将结果集向后滚动previous():这个方法和next是相反的,将结果集向前滚动absolute(int index):这个方法是将结果集直接定位到指定的记录上,这个参数是从1开始的,不是0,如果不在指定的范围内的话,会报告异常的beforeFirst():这个方法是将结果集直接滚动到第一条记录的前面的位置(默认情况是这样的,所以我们每次在取出数据的时候,需要使用next方法,将结果集滚动到第一条记录上)afterLast():这个方法是将结果集直接滚动到最后一条记录的后面的位置isFirst():判断是不是在第一行记录isLast():判断是不是在最后一行记录isAfterLast():判断是不是第一行前面的位置isBeforeFirst():判断是不是最后一行的后面的位置

当然我们要向实现可滚动的结果集,还要设置一下参数:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);  

st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);

参数的含义:

ResultSet.RTYPE_FORWORD_ONLY:这是缺省值,只可向前滚动; ResultSet.TYPE_SCROLL_INSENSITIVE:双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。 ResultSet.TYPE_SCROLL_SENSITIVE:双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。ResultSet.CONCUR_READ_ONLY:这是缺省值,指定不可以更新 ResultSet ResultSet.CONCUR_UPDATABLE:指定可以更新 ResultSet(这个后面会说到)

同时在这里我们只需要使用absolute方法就可以实现分页的功能,因为他可以随便的定位到指定的记录集中,但是这个是在全部将结果集查询处理的基础上来实现的,就是首先将所有符合条件的结果集查询出来放到内存中,然后再就行分页操作,那么这种分页的效率就很低了,所以我们强烈建议在数据库查询数据的时候就进行分页操作,比如MySql中使用limit关键字进行操作,MSSQL中使用top关键字,Oracle中使用number关键字,但是有的数据库中不支持分页查询操作,所以这时候我们只能使用上面的形式来进行分页了。

JDBC中的可更新以及对更新敏感的结果集操作

我们有时候可能有这样的需求,就是在查询出结果集的时候,想对指定的记录进行更新操作,说白了,就是将查询和更新操作放到一起进行,来看一下代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. static void test() throws Exception{  
  2.         Connection conn = null;  
  3.         Statement st = null;  
  4.         ResultSet rs = null;  
  5.         try{  
  6.             conn = JdbcUtils.getConnection();  
  7.             
  8.             
  9.             st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);  
  10.             rs = st.executeQuery("select * from user");  
  11.             
  12.             while(rs.next()){  
  13.                 
  14.                 //然后再更行行信息,这时候数据库中的这条记录的值也发生变化了,  
  15.                 //内存中的结果集中的记录的值发生改变了,影响到了数据库中的值  
  16.                 String name = rs.getString("name");  
  17.                 if("jiangwei".equals(name)){  
  18.                     rs.updateFloat("money",170);  
  19.                     rs.updateRow();  
  20.                 }  
  21.             }  
  22.         }catch(Exception e){  
  23.             e.printStackTrace();  
  24.         }finally{  
  25.             JdbcUtils.free(rs,st,conn);  
  26.         }  
  27.     }  

static void test() throws Exception{Connection conn = null;Statement st = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();//第三个字段的含义是,在读取数据的时候(已经返回了结果集到内存中了),//再去修改结果集中的数据,这时候数据库中的数据就可以感知到结果集中的变化了进行修改st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs = st.executeQuery("select * from user");//这种操作是不可取的,因为查询和更新交互在一起,逻辑就乱了,只有在特定的场合中使用while(rs.next()){//这里我们获取到name列的值,如果是lisi我们就将结果集中的他的记录中的money变成170,//然后再更行行信息,这时候数据库中的这条记录的值也发生变化了,//内存中的结果集中的记录的值发生改变了,影响到了数据库中的值String name = rs.getString("name");if("jiangwei".equals(name)){rs.updateFloat("money",170);rs.updateRow();}}}catch(Exception e){e.printStackTrace();}finally{JdbcUtils.free(rs,st,conn);}}

我们看到在循环处理结果集的时候,我们将name是jiangwei的记录的钱修改成170,并且反映到数据库中

这里一定要记得设置参数:ResultSet.CONCUR_UPDATABLE,不然会报异常的,这个参数的功能就是将更新的操作同步到数据库中的

这里我们是不建议这种做法的,因为将查询和更新的操作放到一起来操作的话,维护是很差的,我们一定要将CRUD操作进行分开处理,这里只是介绍一下相关知识,不推荐使用的。

下面来看一下通过反射技术,来实现将结果集填充到指定的实体类中,其实这部分的内容很简单的,直接上代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. /** 
  2.      * 使用泛型 
  3.      * @param <T> 
  4.      * @param sql 
  5.      * @param clazz 
  6.      * @return 
  7.      * @throws Exception 
  8.      */  
  9.     static <T> T test(String sql,Class<T> clazz) throws Exception{  
  10.         Connection conn = null;  
  11.         PreparedStatement ps = null;  
  12.         ResultSet rs = null;  
  13.         try{  
  14.             conn = JdbcUtils.getConnection();  
  15.             ps = conn.prepareStatement(sql);  
  16.             rs = ps.executeQuery();  
  17.             ResultSetMetaData rsmd = rs.getMetaData();  
  18.             int count = rsmd.getColumnCount();  
  19.             String[] colNames = new String[count];  
  20.             for(int i=1;i<=count;i++){  
  21.                 colNames[i-1] = rsmd.getColumnLabel(i);//使用别名,让列名和User中的属性名相同  
  22.             }  
  23.               
  24.             T user = clazz.newInstance();  
  25.             //使用反射获取set方法来进行赋值  
  26.             if(rs.next()){  
  27.                 Method[] ms = user.getClass().getMethods();  
  28.                 for(int i=0;i<colNames.length;i++){  
  29.                     String colName = colNames[i];  
  30.                     String methodName = "set" + colName;  
  31.                     for(Method method:ms){  
  32.                         
  33.                         //这里直接使用忽视大小写的相等的方法  
  34.                         //或者使用上面的重命名来解决这个问题  
  35.                         if(methodName.equalsIgnoreCase(method.getName())){  
  36.                             method.invoke(user, rs.getObject(colNames[i]));  
  37.                         }  
  38.                     }  
  39.                 }  
  40.             }  
  41.             return user;  
  42.         }catch(Exception e){  
  43.             e.printStackTrace();  
  44.         }finally{  
  45.             JdbcUtils.free(rs,ps,conn);  
  46.         }  
  47.         return null;  
  48.     }  

/** * 使用泛型 * @param <T> * @param sql * @param clazz * @return * @throws Exception */static <T> T test(String sql,Class<T> clazz) throws Exception{Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();ps = conn.prepareStatement(sql);rs = ps.executeQuery();ResultSetMetaData rsmd = rs.getMetaData();int count = rsmd.getColumnCount();String[] colNames = new String[count];for(int i=1;i<=count;i++){colNames[i-1] = rsmd.getColumnLabel(i);//使用别名,让列名和User中的属性名相同}T user = clazz.newInstance();//使用反射获取set方法来进行赋值if(rs.next()){Method[] ms = user.getClass().getMethods();for(int i=0;i<colNames.length;i++){String colName = colNames[i];String methodName = "set" + colName;for(Method method:ms){//通过列名来找到实体类中的属性方法(这里要注意的是set方法的格式是:setXxx首字母是大写的)//这里直接使用忽视大小写的相等的方法//或者使用上面的重命名来解决这个问题if(methodName.equalsIgnoreCase(method.getName())){method.invoke(user, rs.getObject(colNames[i]));}}}}return user;}catch(Exception e){e.printStackTrace();}finally{JdbcUtils.free(rs,ps,conn);}return null;}

测试代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. public static void main(String[] args) throws Exception{  
  2.         //User user = test("select * from user",User.class);  
  3.         //使用别名来规定列名和属性名相同  
  4.         User user = test("select id as Id,name as Name,birthday as Birthday,money as Money from user",User.class);  
  5.         System.out.println(user);  
  6.     }  

public static void main(String[] args) throws Exception{//User user = test("select * from user",User.class);//使用别名来规定列名和属性名相同User user = test("select id as Id,name as Name,birthday as Birthday,money as Money from user",User.class);System.out.println(user);}

其实就是使用反射技术将得到实体类中所有属性的set方法,然后通过set方法进行属性值的填充,这里唯一要注意的问题就是返回的结果集中的字段名称必须要和实体类中的属性名称相同,要做到这一点我们又两种方式:

一种是直接将表中的字段名称和实体类中的属性名称相同

一种是使用别名的方式来操作,将别名设置的和实体类中的属性名称相同

其实我们会发现,后面说到的Hibernate框架就是采用这种机制的

元数据的相关知识

我们知道元数据信息就是标示数据本身的一些数据信息

1.数据库的元数据信息

就是数据库的相关信息,如数据库的版本号,驱动名称,是否支持事务操作等信息,JDBC提供了接口让我们可以获取这些信息的:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. static void test() throws Exception{  
  2.         Connection conn = JdbcUtils.getConnection();  
  3.         
  4.         //如果没有设置的话,他就会自己使用以下的api进行查找是那个数据库  
  5.         DatabaseMetaData metaData = conn.getMetaData();  
  6.         System.out.println("databaseName:"+metaData.getDatabaseProductName());  
  7.         System.out.println("driverName:"+metaData.getDriverName());  
  8.         System.out.println("isSupportBatch:"+metaData.supportsBatchUpdates());  
  9.         System.out.println("isSupportTransaction:"+metaData.supportsTransactions());  
  10.     }  

static void test() throws Exception{Connection conn = JdbcUtils.getConnection();//这些信息对于那些框架的编写就很有用了,因为框架是要兼容各个数据库类型的,如Hibernate中有一个方言设置//如果没有设置的话,他就会自己使用以下的api进行查找是那个数据库DatabaseMetaData metaData = conn.getMetaData();System.out.println("databaseName:"+metaData.getDatabaseProductName());System.out.println("driverName:"+metaData.getDriverName());System.out.println("isSupportBatch:"+metaData.supportsBatchUpdates());System.out.println("isSupportTransaction:"+metaData.supportsTransactions());}

这些信息对于我们使用人员来说可能没有太大的用处,但是对于开发框架的人来说用处很大的,比如Hibernate框架,他要做到兼容所有的数据库特性的话,必须要将不同特性统一起来,所以他肯定要获取数据库的元数据信息的,后面会说到Hibernate中有一个配置叫做:方言,这个就是用来设置数据库名称的。

2.查询参数的元数据信息

当我们在使用PreparedStatement来进行参数填充的时候,我们想知道参数的一些信息,直接上代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. static void test(String sql,Object[] params) throws Exception{  
  2.         Connection conn = JdbcUtils.getConnection();  
  3.         
  4.         PreparedStatement ps = conn.prepareStatement(sql);  
  5.         
  6.         //不然是获取不到参数的,而且会报异常  
  7.         ParameterMetaData pMetaData= ps.getParameterMetaData();  
  8.         int count = pMetaData.getParameterCount();  
  9.         for(int i=1;i<=count;i++){  
  10.             
  11.             System.out.println(pMetaData.getParameterClassName(i));  
  12.             System.out.println(pMetaData.getParameterType(i));  
  13.             System.out.println(pMetaData.getParameterTypeName(i));  
  14.             //假定我们传入的参数的顺序和sql语句中的占位符的顺序一样的  
  15.             ps.setObject(i,params[i-1]);  
  16.         }  
  17.         ps.executeQuery();  
  18.     }  

static void test(String sql,Object[] params) throws Exception{Connection conn = JdbcUtils.getConnection();//参数的元数据信息:Statement是没有参数的元数据信息的(因为Statement不支持?),查看源代码,返回的都是varcharPreparedStatement ps = conn.prepareStatement(sql);//必须在连接数据库中的时候添加这个参数generateSimpleParameterMetadata=true//不然是获取不到参数的,而且会报异常ParameterMetaData pMetaData= ps.getParameterMetaData();int count = pMetaData.getParameterCount();for(int i=1;i<=count;i++){//因为mysql没有去查询库,所以不能根据查询的字段就能获取字段的类型,所有都返回varcharSystem.out.println(pMetaData.getParameterClassName(i));System.out.println(pMetaData.getParameterType(i));System.out.println(pMetaData.getParameterTypeName(i));//假定我们传入的参数的顺序和sql语句中的占位符的顺序一样的ps.setObject(i,params[i-1]);}ps.executeQuery();}

测试代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. public static void main(String[] args) throws Exception{  
  2.         String sql = "select name,birthday,money from user where name=?";  
  3.         Object[] params = new Object[]{"jiangwei"};  
  4.         test(sql,params);  
  5.     }  

public static void main(String[] args) throws Exception{String sql = "select name,birthday,money from user where name=?";Object[] params = new Object[]{"jiangwei"};test(sql,params);}

我们知道Statement是不支持参数填充的,所以不可能获取到参数的元数据信息的

我们运行测试代码,会看到如下异常信息:

jdbc [转载]JavaEE学习篇之--JDBC详解

这时候我们就要注意了,如果想获取到元数据信息的话,我们还需要在连接数据的url后面添加一个参数:

generateSimpleParameterMetadata=true

添加完之后,我们运行结果如下:

jdbc [转载]JavaEE学习篇之--JDBC详解

我们看到可以获取参数在Java中的类型,12代表的是sql包中的类型:java.sql.Types.VARCHAR,这个字段是个整型值,值就是12,他对应到数据库中varchar类型的

这里要注意一点:有时候我们会发现这里获取到数据库中的类型是错误的,比如这里我们如果将数据库中的name字段的类型修改成char类型的,这里获取到的还是varchar,这一点想一想也是对的,你想想这个是获取查询参数的信息,我们还没有进行查询操作的,系统不可能那么智能的获取到数据库中准确的字段的类型的,所以他这里就做了一个大致的对应关系,将Java中的类型和数据库中的类型对应起来的,因为数据库中char和varchar都是字符串的。所以我们不能相信这里得到的数据库中字段的类型的,需要通过结果集中的元数据类型。

3.结果集中元数据信息

就是查询结果的一般信息,比如字段的相关信息

我们在上面看到要想获取数据库中字段的真实类型的话,只有先进行查询操作才可以,在这里我们就可以获取到正确的类型了,上代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. static void test(String sql) throws Exception{  
  2.         Connection conn = null;  
  3.         PreparedStatement ps = null;  
  4.         ResultSet rs = null;  
  5.         try{  
  6.             conn = JdbcUtils.getConnection();  
  7.             ps = conn.prepareStatement(sql);  
  8.             rs = ps.executeQuery();  
  9.             ResultSetMetaData rsmd = rs.getMetaData();  
  10.             int count = rsmd.getColumnCount();  
  11.             String[] colNames = new String[count];  
  12.             for(int i=1;i<=count;i++){  
  13.                 //这里是可以获取到真实的类型的,因为这个是已经从数据库中查询了  
  14.                 System.out.println(rsmd.getColumnClassName(i));  
  15.                 System.out.println(rsmd.getColumnName(i));  
  16.                 System.out.println(rsmd.getColumnType(i));  
  17.                 System.out.println(rsmd.getColumnLabel(i));
  18.                 colNames[i-1] = rsmd.getColumnName(i);  
  19.             }  
  20.             //将结果构建一个Map,列名是key,列的值是value  
  21.             Map<String,Object> data = null;  
  22.             
  23.             if(rs.next()){  
  24.                 data = new HashMap<String,Object>();  
  25.                 for(int i=0;i<colNames.length;i++){  
  26.                     data.put(colNames[i], rs.getObject(colNames[i]));  
  27.                 }  
  28.             }  
  29.         }catch(Exception e){  
  30.             e.printStackTrace();  
  31.         }finally{  
  32.             JdbcUtils.free(rs,ps,conn);  
  33.         }  
  34.     }  

static void test(String sql) throws Exception{Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();ps = conn.prepareStatement(sql);rs = ps.executeQuery();ResultSetMetaData rsmd = rs.getMetaData();int count = rsmd.getColumnCount();String[] colNames = new String[count];for(int i=1;i<=count;i++){//这里是可以获取到真实的类型的,因为这个是已经从数据库中查询了System.out.println(rsmd.getColumnClassName(i));System.out.println(rsmd.getColumnName(i));System.out.println(rsmd.getColumnType(i));System.out.println(rsmd.getColumnLabel(i));//列的别名:select name as n from user;,有别名的话就返回的是别名,而不是原始的列名了colNames[i-1] = rsmd.getColumnName(i);}//将结果构建一个Map,列名是key,列的值是valueMap<String,Object> data = null;//假设查询的数据只有一条,如果是多条的话我们可以定义一个List<Map<...这样的结构if(rs.next()){data = new HashMap<String,Object>();for(int i=0;i<colNames.length;i++){data.put(colNames[i], rs.getObject(colNames[i]));}}}catch(Exception e){e.printStackTrace();}finally{JdbcUtils.free(rs,ps,conn);}}

我们这里可以获取到结果集中字段的总数count,以及字段的类型,名称,别名等信息,同时我们这里还穿插了一段代码,就是将结果集封装成一个HashMap结构,字段名做key,字段值做value

JDBC中的数据源

首先我们要知道什么是数据源,为什么要有数据源,我们从上面的例子看到,我们每次执行操作的时候,都是打开连接,关闭连接,这个连接的建立和关闭是很好资源和时间的,所以我们就在想一个策略怎么才能优化呢?所以数据源的概念就出来的,数据源就是用来管理连接的一个池子,使用高效的算法进行调度,这样在执行操作的时候是很方便的,为了容易理解数据源的相关概念,我们自己编写一个数据源:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.datasource;  
  2.   
  3. import java.io.PrintWriter;  
  4. import java.sql.Connection;  
  5. import java.sql.DriverManager;  
  6. import java.sql.SQLException;  
  7. import java.util.LinkedList;  
  8.   
  9. import javax.sql.DataSource;  
  10.   
  11. /** 
  12.  * 大部分时间都是浪费在数据库连接这一块 
  13.  * 这个类是我们自己编写的一个数据源 
  14.  * @author weijiang204321 
  15.  * 
  16.  */  
  17. public class MyDataSource implements DataSource{  
  18.   
  19.     private static String user = "root";  
  20.     private static String password = "123456";  
  21.     private static String dbName = "test";  
  22.     private static  String url = "jdbc:mysql://localhost:3306/"+dbName+"?user="+user+"&password="+password+"&useUnicode=true&characterEncoding=gb2312";  
  23.       
  24.     private static int initCount = 5;//初始化的连接数  
  25.     private static int maxCount = 10;//最大连接数  
  26.     private static int currentCount = 0;//当前的连接数  
  27.     //可能频繁的取出连接和删除连接,所以用LinkedList  
  28.     private LinkedList<Connection> connectionsPool = new LinkedList<Connection>();  
  29.       
  30.     public MyDataSource(){  
  31.         try{  
  32.             for(int i=0;i<initCount;i++){  
  33.                 this.connectionsPool.addLast(createConnection());  
  34.                 currentCount++;  
  35.             }  
  36.         }catch(Exception e){  
  37.             throw new ExceptionInInitializerError(e);  
  38.         }  
  39.     }  
  40.       
  41.     public Connection getConnection() throws SQLException{  
  42.         //也有可能获取不到连接,而且这个方法也是可能被多线程访问的  
  43.         synchronized(connectionsPool){  
  44.             if(connectionsPool.size() > 0){  
  45.                 return this.connectionsPool.removeFirst();  
  46.             }  
  47.             if(currentCount < maxCount){  
  48.                 currentCount++;  
  49.                 return createConnection();  
  50.             }  
  51.               
  52.             
  53.             throw new SQLException("已经没有连接了");  
  54.               
  55.             
  56.             //如果内存够大,cpu给力的话,数据库可以建立的连接数也会增加的  
  57.         }  
  58.     }  
  59.       
  60.     public void free(Connection conn) throws SQLException{  
  61.         this.connectionsPool.addLast(conn);  
  62.     }  
  63.       
  64.     private Connection createConnection() throws SQLException{  
  65.         return DriverManager.getConnection(url);  
  66.     }  
  67.   
  68.     public Connection getConnection(String username, String password)throws SQLException {  
  69.         return null;  
  70.     }  
  71.   
  72.     public PrintWriter getLogWriter() throws SQLException {  
  73.         return null;  
  74.     }  
  75.   
  76.     public int getLoginTimeout() throws SQLException {  
  77.         return 0;  
  78.     }  
  79.   
  80.     public void setLogWriter(PrintWriter arg0) throws SQLException {  
  81.           
  82.     }  
  83.   
  84.     public void setLoginTimeout(int arg0) throws SQLException {  
  85.           
  86.     }  
  87.       
  88. }  

package com.weijia.datasource;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.LinkedList;import javax.sql.DataSource;/** * 大部分时间都是浪费在数据库连接这一块 * 这个类是我们自己编写的一个数据源 * @author weijiang204321 * */public class MyDataSource implements DataSource{private static String user = "root";private static String password = "123456";private static String dbName = "test";private static String url = "jdbc:mysql://localhost:3306/"+dbName+"?user="+user+"&password="+password+"&useUnicode=true&characterEncoding=gb2312";private static int initCount = 5;//初始化的连接数private static int maxCount = 10;//最大连接数private static int currentCount = 0;//当前的连接数//可能频繁的取出连接和删除连接,所以用LinkedListprivate LinkedList<Connection> connectionsPool = new LinkedList<Connection>();public MyDataSource(){try{for(int i=0;i<initCount;i++){this.connectionsPool.addLast(createConnection());currentCount++;}}catch(Exception e){throw new ExceptionInInitializerError(e);}}public Connection getConnection() throws SQLException{//也有可能获取不到连接,而且这个方法也是可能被多线程访问的synchronized(connectionsPool){if(connectionsPool.size() > 0){return this.connectionsPool.removeFirst();}if(currentCount < maxCount){currentCount++;return createConnection();}//在这里可以让当前线程等待,抛出异常,返回null都是可以的,要视情况而定throw new SQLException("已经没有连接了");//不能无限制的创建连接的,因为这样的话对数据库的压力很大,连接越多,最后数据库的运行速度就会变得很慢了(很硬件相关)//如果内存够大,cpu给力的话,数据库可以建立的连接数也会增加的}}public void free(Connection conn) throws SQLException{this.connectionsPool.addLast(conn);}private Connection createConnection() throws SQLException{return DriverManager.getConnection(url);}public Connection getConnection(String username, String password)throws SQLException {return null;}public PrintWriter getLogWriter() throws SQLException {return null;}public int getLoginTimeout() throws SQLException {return 0;}public void setLogWriter(PrintWriter arg0) throws SQLException {}public void setLoginTimeout(int arg0) throws SQLException {}}

然后修改一下JdbcUtils中的代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.firstdemo;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.ResultSet;  
  5. import java.sql.SQLException;  
  6. import java.sql.Statement;  
  7.   
  8. import javax.sql.DataSource;  
  9.   
  10. import com.weijia.datasource.MyDataSource;  
  11.   
  12. public class JdbcUtils {  
  13.       
  14.     private static String user = "root";  
  15.     private static String password = "123456";  
  16.     private static String dbName = "test";  
  17.     private static  String url = "jdbc:mysql://localhost:3306/"+dbName+"?user="+user+"&password="+password+"&useUnicode=true&characterEncoding=gb2312&generateSimpleParameterMetadata=true";  
  18.       
  19.     private static MyDataSource dataSource = null;  
  20.       
  21.     /** 
  22.      * 加载驱动 
  23.      */  
  24.     static{  
  25.         try{  
  26.             Class.forName("com.mysql.jdbc.Driver");  
  27.             dataSource = new MyDataSource();//初始化数据源  
  28.         }catch(Exception e){  
  29.             System.out.println("Exception:"+e.getMessage()+"");  
  30.             throw new ExceptionInInitializerError(e);  
  31.         }  
  32.     }  
  33.       
  34.     private JdbcUtils(){  
  35.     }  
  36.       
  37.     /** 
  38.      * 获取连接 
  39.      * @return 
  40.      * @throws SQLException 
  41.      */  
  42.     public static Connection getConnection() throws SQLException{  
  43.         return dataSource.getConnection();  
  44.     }  
  45.       
  46.     public static DataSource getDataSource(){  
  47.         return dataSource;  
  48.     }  
  49.       
  50.     /** 
  51.      * 释放资源 
  52.      * @param rs 
  53.      * @param st 
  54.      * @param conn 
  55.      */  
  56.     public static void free(ResultSet rs,Statement st,Connection conn){  
  57.         try{  
  58.             if(rs != null){  
  59.                 rs.close();  
  60.             }  
  61.         }catch(SQLException e){  
  62.             e.printStackTrace();  
  63.         }finally{  
  64.             try{  
  65.                 if(st != null){  
  66.                     st.close();  
  67.                 }  
  68.             }catch(SQLException e){  
  69.                 e.printStackTrace();  
  70.             }finally{  
  71.                 try{  
  72.                     dataSource.free(conn);  
  73.                 }catch(SQLException e){  
  74.                     e.printStackTrace();  
  75.                 }  
  76.             }  
  77.         }  
  78.               
  79.     }  
  80.   
  81. }  

package com.weijia.firstdemo;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.sql.DataSource;import com.weijia.datasource.MyDataSource;public class JdbcUtils {private static String user = "root";private static String password = "123456";private static String dbName = "test";private static String url = "jdbc:mysql://localhost:3306/"+dbName+"?user="+user+"&password="+password+"&useUnicode=true&characterEncoding=gb2312&generateSimpleParameterMetadata=true";private static MyDataSource dataSource = null;/** * 加载驱动 */static{try{Class.forName("com.mysql.jdbc.Driver");dataSource = new MyDataSource();//初始化数据源}catch(Exception e){System.out.println("Exception:"+e.getMessage()+"");throw new ExceptionInInitializerError(e);}}private JdbcUtils(){}/** * 获取连接 * @return * @throws SQLException */public static Connection getConnection() throws SQLException{return dataSource.getConnection();}public static DataSource getDataSource(){return dataSource;}/** * 释放资源 * @param rs * @param st * @param conn */public static void free(ResultSet rs,Statement st,Connection conn){try{if(rs != null){rs.close();}}catch(SQLException e){e.printStackTrace();}finally{try{if(st != null){st.close();}}catch(SQLException e){e.printStackTrace();}finally{try{dataSource.free(conn);}catch(SQLException e){e.printStackTrace();}}}}}

我们看到,在我们自定义的数据源中,主要有这么几个变量:

初始化连接数,最大连接数,当前的连接数,连接池(因为我们可能需要频繁的添加连接和删除连接所以使用LinkedList,因为这个list是链表结构的,增加和删除效率高)

主要流程是:初始化数据源的时候,初始化一定量的连接放到池子中,当用户使用getConnection()方法取出连接的时候,我们会判断这个连接池中还有没有连接了,有就直接取出第一个连接返回,没有的话,我们在判断当前的连接数有没有超过最大连接数,超过的话,就抛出一个异常(其实这里还可以选择等待其他连接的释放,这个具体实现是很麻烦的),没有超过的话,就创建连接,并且将其放入池子中。

我们自定义的数据源是实现了JDBC中的DataSource接口的,这个接口很重要的,后面我们会说到apache的数据源都是要实现这个接口的,这个接口统一了数据源的标准,这个接口中有很多实现的,所以看到我们的数据源类中有很多没必要的方法,但是那个方法都是要实现的,最重要的就是要实现getConnection方法,其他的实现都只需要调用super.XXX就可以了。

在JdbcUtils类中我们也是需要修改的,首先我们要在静态代码块中初始化我们的数据源,在getConnection方法中调用数据源的getConnection方法,在free方法中调用数据源的free方法即可。

看一下测试类:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.datasource;  
  2.   
  3. import java.sql.Connection;  
  4.   
  5. import com.weijia.firstdemo.JdbcUtils;  
  6.   
  7. public class Test {  
  8.       
  9.     public static void main(String[] args) throws Exception{  
  10.         for(int i=0;i<10;i++){  
  11.             Connection conn = JdbcUtils.getConnection();  
  12.             System.out.println(conn);  
  13.             JdbcUtils.free(null, null, conn);  
  14.         }  
  15.     }  
  16.   
  17. }  

package com.weijia.datasource;import java.sql.Connection;import com.weijia.firstdemo.JdbcUtils;public class Test {public static void main(String[] args) throws Exception{for(int i=0;i<10;i++){Connection conn = JdbcUtils.getConnection();System.out.println(conn);JdbcUtils.free(null, null, conn);}}}

运行结果:

jdbc [转载]JavaEE学习篇之--JDBC详解

我们可以看到,我们在测试代码中申请了10个连接,从结果上可以看出前五个是不同的连接,后五个连接和前五个是一样的,这是因为我们在释放连接的时候就是free方法中,是将连接重新放到池子中的,上面显示的是五个,是因为我们初始化的连接数是5个,当第一个连接释放的时候这个连接其实已经放到了池子的第六个位置,以此类推。

下面我们继续来看下个问题,我们在上面的数据源中可以看到,我们定义了一个free方法来释放连接的,然后在JdbcUtils中调用这个方法即可,但是这个貌似不太符合我们的使用习惯,因为之前我们看到我们释放连接的时候都是使用close方法的,所以这里面我们在修改一下,至于怎么修改呢?

首先我们知道那个close方法是JDBC中的Connection接口中的,所有自定义的连接都是需要实现这个接口的,那么我们如果我们想让我们free中的逻辑放到close中的话,就需要实现这个接口了,我们可以看到

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. DriverManager.getConnection(url)  

DriverManager.getConnection(url)

通过这种方式获取到的Connection也是mysql中实现了Connection的接口的,那么现在我们可能需要自定一个我们自己的连接,然后实现Connection接口,将free方法中的逻辑搬到close方法中,同时我们还要在连接类中保持一个mysql中的连接对象,这里面的逻辑有点不好理解,先看代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.datasource;  
  2.   
  3. import java.sql.CallableStatement;  
  4. import java.sql.Connection;  
  5. import java.sql.DatabaseMetaData;  
  6. import java.sql.PreparedStatement;  
  7. import java.sql.SQLException;  
  8. import java.sql.SQLWarning;  
  9. import java.sql.Savepoint;  
  10. import java.sql.Statement;  
  11. import java.util.Map;  
  12.   
  13. public class MyConnection implements Connection{  
  14.       
  15.     //组合方式:静态代理  
  16.     private Connection realConnection;  
  17.     private MyDataSource2 dataSource;  
  18.     //当前连接的使用的次数  
  19.     private int maxUseCount = 5;  
  20.     private int currentUseCount = 0;  
  21.       
  22.     public MyConnection(Connection conn,MyDataSource2 dataSource){  
  23.         this.realConnection = conn;  
  24.         this.dataSource = dataSource;  
  25.     }  
  26.       
  27.     public void close() throws SQLException {  
  28.         this.currentUseCount++;  
  29.         if(this.currentUseCount < this.maxUseCount){  
  30.             this.dataSource.free(this);  
  31.         }else{  
  32.             dataSource.currentCount--;  
  33.             this.realConnection.close();  
  34.         }  
  35.     }  
  36.   
  37.     public void clearWarnings() throws SQLException {  
  38.         this.realConnection.clearWarnings();  
  39.     }  
  40.   
  41.     public void commit() throws SQLException {  
  42.         this.realConnection.commit();  
  43.     }  
  44.   
  45.     public Statement createStatement() throws SQLException {  
  46.         return this.realConnection.createStatement();  
  47.     }  
  48.   
  49.     public Statement createStatement(int resultSetType, int resultSetConcurrency)throws SQLException {  
  50.         return this.realConnection.createStatement(resultSetType, resultSetConcurrency);  
  51.     }  
  52.   
  53.     public Statement createStatement(int resultSetType,int resultSetConcurrency, int resultSetHoldability)throws SQLException {  
  54.         return this.realConnection.createStatement(resultSetType, resultSetConcurrency, resultSetHoldability);  
  55.     }  
  56.   
  57.     public boolean getAutoCommit() throws SQLException {  
  58.         return this.realConnection.getAutoCommit();  
  59.     }  
  60.   
  61.     public String getCatalog() throws SQLException {  
  62.         return this.realConnection.getCatalog();  
  63.     }  
  64.   
  65.     public int getHoldability() throws SQLException {  
  66.         return this.realConnection.getHoldability();  
  67.     }  
  68.   
  69.     public DatabaseMetaData getMetaData() throws SQLException {  
  70.         // TODO Auto-generated method stub  
  71.         return null;  
  72.     }  
  73.   
  74.     public int getTransactionIsolation() throws SQLException {  
  75.         // TODO Auto-generated method stub  
  76.         return 0;  
  77.     }  
  78.   
  79.     public Map<String, Class<?>> getTypeMap() throws SQLException {  
  80.         // TODO Auto-generated method stub  
  81.         return null;  
  82.     }  
  83.   
  84.     public SQLWarning getWarnings() throws SQLException {  
  85.         // TODO Auto-generated method stub  
  86.         return null;  
  87.     }  
  88.   
  89.     public boolean isClosed() throws SQLException {  
  90.         // TODO Auto-generated method stub  
  91.         return false;  
  92.     }  
  93.   
  94.     public boolean isReadOnly() throws SQLException {  
  95.         // TODO Auto-generated method stub  
  96.         return false;  
  97.     }  
  98.   
  99.     public String nativeSQL(String sql) throws SQLException {  
  100.         // TODO Auto-generated method stub  
  101.         return null;  
  102.     }  
  103.   
  104.     public CallableStatement prepareCall(String sql) throws SQLException {  
  105.         // TODO Auto-generated method stub  
  106.         return null;  
  107.     }  
  108.   
  109.     public CallableStatement prepareCall(String sql, int resultSetType,  
  110.             int resultSetConcurrency) throws SQLException {  
  111.         // TODO Auto-generated method stub  
  112.         return null;  
  113.     }  
  114.   
  115.     public CallableStatement prepareCall(String sql, int resultSetType,  
  116.             int resultSetConcurrency, int resultSetHoldability)  
  117.             throws SQLException {  
  118.         // TODO Auto-generated method stub  
  119.         return null;  
  120.     }  
  121.   
  122.     public PreparedStatement prepareStatement(String sql) throws SQLException {  
  123.         // TODO Auto-generated method stub  
  124.         return null;  
  125.     }  
  126.   
  127.     public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)  
  128.             throws SQLException {  
  129.         // TODO Auto-generated method stub  
  130.         return null;  
  131.     }  
  132.   
  133.     public PreparedStatement prepareStatement(String sql, int[] columnIndexes)  
  134.             throws SQLException {  
  135.         // TODO Auto-generated method stub  
  136.         return null;  
  137.     }  
  138.   
  139.     public PreparedStatement prepareStatement(String sql, String[] columnNames)  
  140.             throws SQLException {  
  141.         // TODO Auto-generated method stub  
  142.         return null;  
  143.     }  
  144.   
  145.     public PreparedStatement prepareStatement(String sql, int resultSetType,  
  146.             int resultSetConcurrency) throws SQLException {  
  147.         // TODO Auto-generated method stub  
  148.         return null;  
  149.     }  
  150.   
  151.     public PreparedStatement prepareStatement(String sql, int resultSetType,  
  152.             int resultSetConcurrency, int resultSetHoldability)  
  153.             throws SQLException {  
  154.         // TODO Auto-generated method stub  
  155.         return null;  
  156.     }  
  157.   
  158.     public void releaseSavepoint(Savepoint savepoint) throws SQLException {  
  159.         // TODO Auto-generated method stub  
  160.           
  161.     }  
  162.   
  163.     public void rollback() throws SQLException {  
  164.         // TODO Auto-generated method stub  
  165.           
  166.     }  
  167.   
  168.     public void rollback(Savepoint savepoint) throws SQLException {  
  169.         // TODO Auto-generated method stub  
  170.           
  171.     }  
  172.   
  173.     public void setAutoCommit(boolean autoCommit) throws SQLException {  
  174.         // TODO Auto-generated method stub  
  175.           
  176.     }  
  177.   
  178.     public void setCatalog(String catalog) throws SQLException {  
  179.         // TODO Auto-generated method stub  
  180.           
  181.     }  
  182.   
  183.     public void setHoldability(int holdability) throws SQLException {  
  184.         // TODO Auto-generated method stub  
  185.           
  186.     }  
  187.   
  188.     public void setReadOnly(boolean readOnly) throws SQLException {  
  189.         // TODO Auto-generated method stub  
  190.           
  191.     }  
  192.   
  193.     public Savepoint setSavepoint() throws SQLException {  
  194.         // TODO Auto-generated method stub  
  195.         return null;  
  196.     }  
  197.   
  198.     public Savepoint setSavepoint(String name) throws SQLException {  
  199.         // TODO Auto-generated method stub  
  200.         return null;  
  201.     }  
  202.   
  203.     public void setTransactionIsolation(int level) throws SQLException {  
  204.         // TODO Auto-generated method stub  
  205.           
  206.     }  
  207.   
  208.     public void setTypeMap(Map<String, Class<?>> map) throws SQLException {  
  209.         // TODO Auto-generated method stub  
  210.           
  211.     }  
  212.   
  213. }  

package com.weijia.datasource;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.SQLWarning;import java.sql.Savepoint;import java.sql.Statement;import java.util.Map;public class MyConnection implements Connection{//组合方式:静态代理private Connection realConnection;private MyDataSource2 dataSource;//当前连接的使用的次数private int maxUseCount = 5;private int currentUseCount = 0;public MyConnection(Connection conn,MyDataSource2 dataSource){this.realConnection = conn;this.dataSource = dataSource;}public void close() throws SQLException {this.currentUseCount++;if(this.currentUseCount < this.maxUseCount){this.dataSource.free(this);}else{dataSource.currentCount--;this.realConnection.close();}}public void clearWarnings() throws SQLException {this.realConnection.clearWarnings();}public void commit() throws SQLException {this.realConnection.commit();}public Statement createStatement() throws SQLException {return this.realConnection.createStatement();}public Statement createStatement(int resultSetType, int resultSetConcurrency)throws SQLException {return this.realConnection.createStatement(resultSetType, resultSetConcurrency);}public Statement createStatement(int resultSetType,int resultSetConcurrency, int resultSetHoldability)throws SQLException {return this.realConnection.createStatement(resultSetType, resultSetConcurrency, resultSetHoldability);}public boolean getAutoCommit() throws SQLException {return this.realConnection.getAutoCommit();}public String getCatalog() throws SQLException {return this.realConnection.getCatalog();}public int getHoldability() throws SQLException {return this.realConnection.getHoldability();}public DatabaseMetaData getMetaData() throws SQLException {// TODO Auto-generated method stubreturn null;}public int getTransactionIsolation() throws SQLException {// TODO Auto-generated method stubreturn 0;}public Map<String, Class<?>> getTypeMap() throws SQLException {// TODO Auto-generated method stubreturn null;}public SQLWarning getWarnings() throws SQLException {// TODO Auto-generated method stubreturn null;}public boolean isClosed() throws SQLException {// TODO Auto-generated method stubreturn false;}public boolean isReadOnly() throws SQLException {// TODO Auto-generated method stubreturn false;}public String nativeSQL(String sql) throws SQLException {// TODO Auto-generated method stubreturn null;}public CallableStatement prepareCall(String sql) throws SQLException {// TODO Auto-generated method stubreturn null;}public CallableStatement prepareCall(String sql, int resultSetType,int resultSetConcurrency) throws SQLException {// TODO Auto-generated method stubreturn null;}public CallableStatement prepareCall(String sql, int resultSetType,int resultSetConcurrency, int resultSetHoldability)throws SQLException {// TODO Auto-generated method stubreturn null;}public PreparedStatement prepareStatement(String sql) throws SQLException {// TODO Auto-generated method stubreturn null;}public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)throws SQLException {// TODO Auto-generated method stubreturn null;}public PreparedStatement prepareStatement(String sql, int[] columnIndexes)throws SQLException {// TODO Auto-generated method stubreturn null;}public PreparedStatement prepareStatement(String sql, String[] columnNames)throws SQLException {// TODO Auto-generated method stubreturn null;}public PreparedStatement prepareStatement(String sql, int resultSetType,int resultSetConcurrency) throws SQLException {// TODO Auto-generated method stubreturn null;}public PreparedStatement prepareStatement(String sql, int resultSetType,int resultSetConcurrency, int resultSetHoldability)throws SQLException {// TODO Auto-generated method stubreturn null;}public void releaseSavepoint(Savepoint savepoint) throws SQLException {// TODO Auto-generated method stub}public void rollback() throws SQLException {// TODO Auto-generated method stub}public void rollback(Savepoint savepoint) throws SQLException {// TODO Auto-generated method stub}public void setAutoCommit(boolean autoCommit) throws SQLException {// TODO Auto-generated method stub}public void setCatalog(String catalog) throws SQLException {// TODO Auto-generated method stub}public void setHoldability(int holdability) throws SQLException {// TODO Auto-generated method stub}public void setReadOnly(boolean readOnly) throws SQLException {// TODO Auto-generated method stub}public Savepoint setSavepoint() throws SQLException {// TODO Auto-generated method stubreturn null;}public Savepoint setSavepoint(String name) throws SQLException {// TODO Auto-generated method stubreturn null;}public void setTransactionIsolation(int level) throws SQLException {// TODO Auto-generated method stub}public void setTypeMap(Map<String, Class<?>> map) throws SQLException {// TODO Auto-generated method stub}}

首先看到了这个类中有很多恶心的代码,那些方法都是Connection接口中的,我们这里只需要实现close方法就可以了,其他的方法中可以添加:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. return this.realConnection.XXX  

return this.realConnection.XXX

我们看到会在类中保留一个Connection对象,这个对象就是真实的连接对象,即我们使用

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. DriverManager.getConnection(url)  

DriverManager.getConnection(url)

这种方法获取到的,因为我们要在close方法中使用到这个真实的连接

我们看一下close方法吧:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. public void close() throws SQLException {  
  2.         this.currentUseCount++;  
  3.         if(this.currentUseCount < this.maxUseCount){  
  4.             this.dataSource.free(this);  
  5.         }else{  
  6.             dataSource.currentCount--;  
  7.             this.realConnection.close();  
  8.         }  
  9.     }  

public void close() throws SQLException {this.currentUseCount++;if(this.currentUseCount < this.maxUseCount){this.dataSource.free(this);}else{dataSource.currentCount--;this.realConnection.close();}}

首先看到我们定义了一个类变量:currentUseCount用来表示当前连接的使用次数,同时还有一个类变量就是maxUseCount表示当前连接的最大使用次数,我们看一下close方法的逻辑:

首先当用户调用close方法的时候当前连接的使用数就加一,这里有些同学可能不能理解,我们想想上面还记得我们释放连接的时候是怎么做的,是将这个连接重新放到池子中,所以这个连接又被用了一次,所以这里面是加一,当这个连接的当前使用次数没有超过他的最大使用次数的话,就还把他放到池子中(就是数据源中的free方法,这个方法中传递的参数是我们自定义的连接对象,因为我们不是真的需要关闭这个连接的),如果使用次数超过了最大使用次数的话,我们就将这个连接真正的释放关闭了,同时需要将数据源中当前的连接数减去一,这里我们是调用真实连接的关闭方法的,所以我们需要在我们自定义的连接中保持一个真实连接的对象,其实我们采用的是组合的方法,在一个要想调用另外类中的方法,我们需要在本类中维持一个他的对象,然后进行调用他特定的方法,这种方式也是一种设计模式叫做:静态代理,相当于我们本类是另外一个类的代理。

同时我们需要在构造函数中传递一个数据源对象进来的,当然我们这时候需要在之前的数据源中修改一下,这里修改很简单的,只需要修改数据源中的createConnection方法就可以了:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. private Connection createConnection() throws SQLException{  
  2.         Connection realConn = DriverManager.getConnection(url);  
  3.         MyConnection myConnection = new MyConnection(realConn,this);  
  4.         return myConnection;  
  5.     }  

private Connection createConnection() throws SQLException{Connection realConn = DriverManager.getConnection(url);MyConnection myConnection = new MyConnection(realConn,this);return myConnection;}

我们返回的其实是我们自己的定义的连接,这个连接其实也是真实连接的一个代理对象。这样我们在JdbcUtils中的free方法中直接调用:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. conn.close();  

conn.close();

而不需要调用:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. dataSource.free(conn);  

dataSource.free(conn);

这样的释放方式就和我们之前普通连接的释放方式是一样的。其实我们上面做的这么多的操作就是为了这个,想让用户能够还是直接调用conn.close方法就可以释放连接,我们还是运行一下之前的测试类:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.datasource;  
  2.   
  3. import java.sql.Connection;  
  4.   
  5. import com.weijia.firstdemo.JdbcUtils;  
  6.   
  7. public class Test {  
  8.       
  9.     public static void main(String[] args) throws Exception{  
  10.         for(int i=0;i<10;i++){  
  11.             Connection conn = JdbcUtils.getConnection();  
  12.             System.out.println(conn);  
  13.             JdbcUtils.free(null, null, conn);  
  14.         }  
  15.     }  
  16.   
  17. }  

package com.weijia.datasource;import java.sql.Connection;import com.weijia.firstdemo.JdbcUtils;public class Test {public static void main(String[] args) throws Exception{for(int i=0;i<10;i++){Connection conn = JdbcUtils.getConnection();System.out.println(conn);JdbcUtils.free(null, null, conn);}}}

运行结果如下:

jdbc [转载]JavaEE学习篇之--JDBC详解

我们看到前五个用的是同一个连接对象,这个原因就是我们在我们自定义的连接MyConnection类中使用了当前连接的最大使用次数是5次

我们看到在定义我们自己的连接类的时候,需要实现Connection接口,这个接口中需要实现的方法很多,其实我们只需要一个close方法就可以了,这时候我们还可以将我们的代码在修改一下,下面是我们修改之后的自定义连接类:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.datasource;  
  2.   
  3. import java.lang.reflect.InvocationHandler;  
  4. import java.lang.reflect.Method;  
  5. import java.lang.reflect.Proxy;  
  6. import java.sql.Connection;  
  7.   
  8. public class MyConnectionHandler implements InvocationHandler{  
  9.       
  10.     private Connection realConnection = null;  
  11.     private Connection warpedConnection = null;  
  12.     private MyDataSource2 dataSource = null;  
  13.       
  14.     //当前连接的使用的次数  
  15.     private int maxUseCount = 5;  
  16.     private int currentUseCount = 0;  
  17.       
  18.     public MyConnectionHandler(MyDataSource2 dataSource){  
  19.         this.dataSource = dataSource;  
  20.     }  
  21.       
  22.     public Connection bind(Connection conn){  
  23.         this.realConnection = conn;  
  24.         warpedConnection = (Connection)Proxy.newProxyInstance(this.getClass().getClassLoader(),new Class[]{Connection.class},this);  
  25.         return warpedConnection;  
  26.     }  
  27.   
  28.     public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {  
  29.         if("close".equals(method.getName())){  
  30.             this.currentUseCount++;  
  31.             if(this.currentUseCount < this.maxUseCount){  
  32.                 this.dataSource.free(warpedConnection);  
  33.             }else{  
  34.                 dataSource.currentCount--;  
  35.                 this.realConnection.close();  
  36.             }  
  37.         }  
  38.         return method.invoke(this.realConnection, args);  
  39.     }  
  40.   
  41. }  

package com.weijia.datasource;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Connection;public class MyConnectionHandler implements InvocationHandler{private Connection realConnection = null;private Connection warpedConnection = null;private MyDataSource2 dataSource = null;//当前连接的使用的次数private int maxUseCount = 5;private int currentUseCount = 0;public MyConnectionHandler(MyDataSource2 dataSource){this.dataSource = dataSource;}public Connection bind(Connection conn){this.realConnection = conn;warpedConnection = (Connection)Proxy.newProxyInstance(this.getClass().getClassLoader(),new Class[]{Connection.class},this);return warpedConnection;}public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {if("close".equals(method.getName())){this.currentUseCount++;if(this.currentUseCount < this.maxUseCount){this.dataSource.free(warpedConnection);}else{dataSource.currentCount--;this.realConnection.close();}}return method.invoke(this.realConnection, args);}}

这里我们看到了并没有实现Connection接口了,而且代码也是很简洁的,其实这个就是动态代理的模式,我们通过bind方法传递进来一个真实的连接对象,然后使用Proxy类实例化一个代理对象,newProxyInstance方法的参数说明:

第一个:需要代理对象的类加载器

第二个:需要代理对象实现的接口

第三个:InvocationHandler回调接口,我们主要的工具都是实现这个接口中的invoke方法

然后我们在invoke方法中拦截close方法即可,将之前的close方法中的逻辑搬到这里就可以了。我们使用上面的测试代码运行如下:

jdbc [转载]JavaEE学习篇之--JDBC详解

这里我们就看到了使用动态代理很简单的,但是有一个限制,就是代理对象必须要实现一个接口,这里正好是Connection接口,他比静态代理优雅了很多的,后面我们在说到Spring的时候还会说到这个动态代理模式的

好了,上面我们就可以看到我们自己定义了一个数据源,连接,这样对我们后面的操作优化了很多。

下面我们在来看一下apache的数据源DataSource,其实这个数据源大体上和我们上面设计的以一样的,只是他做了更优化,更好。

首先我们导入需要的jar包:

jdbc [转载]JavaEE学习篇之--JDBC详解

然后我们定义一个dbcpconfig.properties文件,用于配置数据源的相关信息:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. #连接设置  
  2. driverClassName=com.mysql.jdbc.Driver  
  3. url=jdbc:mysql://localhost:3306/test  
  4. username=root  
  5. password=123456  
  6.   
  7. #<!-- 初始化连接 -->  
  8. initialSize=10  
  9.   
  10. #最大连接数量  
  11. maxActive=50  
  12.   
  13. #<!-- 最大空闲连接 -->  
  14. maxIdle=20  
  15.   
  16. #<!-- 最小空闲连接 -->  
  17. minIdle=5  
  18.   
  19. #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->  
  20. maxWait=60000  
  21.   
  22.   
  23. #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]   
  24. #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。  
  25. connectionProperties=useUnicode=true;characterEncoding=gbk;generateSimpleParameterMetadata=true  
  26.   
  27. #指定由连接池所创建的连接的自动提交(auto-commit)状态。  
  28. defaultAutoCommit=true  
  29.   
  30. #driver default 指定由连接池所创建的连接的只读(read-only)状态。  
  31. #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)  
  32. defaultReadOnly=  
  33.   
  34. #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。  
  35. #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE  
  36. defaultTransactionIsolation=READ_UNCOMMITTED  
  37.   
  38. 从这些配置上我们可以看到前面的几个参数的含义就是我们自定义数据源中的使用到的,这里还有一个参数是maxWait是超时,这个就是我们在获取连接的时候,当连接数超过最大连接数的时候,需要等待的时间,在前面我们自己定义的数据源中我们是采用抛出异常的问题来解决的,这里我们看到apache是采用线程等待的方式来解决的。  
  39. 我们在代码里面修改的东西也是很少的,在JdbcUtils中的静态代码块中使用apache的数据源即可:  
  40. //使用Apache的DBCP数据源  
  41. Properties prop = new Properties();  
  42. prop.load(JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"));  
  43. dataSource = BasicDataSourceFactory.createDataSource(prop);  

#连接设置driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/testusername=rootpassword=123456#<!-- 初始化连接 -->initialSize=10#最大连接数量maxActive=50#<!-- 最大空闲连接 -->maxIdle=20#<!-- 最小空闲连接 -->minIdle=5#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->maxWait=60000#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。connectionProperties=useUnicode=true;characterEncoding=gbk;generateSimpleParameterMetadata=true#指定由连接池所创建的连接的自动提交(auto-commit)状态。defaultAutoCommit=true#driver default 指定由连接池所创建的连接的只读(read-only)状态。#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)defaultReadOnly=#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLEdefaultTransactionIsolation=READ_UNCOMMITTED从这些配置上我们可以看到前面的几个参数的含义就是我们自定义数据源中的使用到的,这里还有一个参数是maxWait是超时,这个就是我们在获取连接的时候,当连接数超过最大连接数的时候,需要等待的时间,在前面我们自己定义的数据源中我们是采用抛出异常的问题来解决的,这里我们看到apache是采用线程等待的方式来解决的。我们在代码里面修改的东西也是很少的,在JdbcUtils中的静态代码块中使用apache的数据源即可://使用Apache的DBCP数据源Properties prop = new Properties();prop.load(JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"));dataSource = BasicDataSourceFactory.createDataSource(prop);

apache中的连接也是经过改装的,我们直接调用conn.close方法即可,和我们上面实现的是一样的。

JDBC中CRUD的模板模式

我们从前面的例子中可以看到,我们在操作CRUD的时候,返现有很多重复的代码,比如现在一个UserDao来操作查询操作,写了一段查询代码,然后有一个ProductDao也来操作查询操作,也写了一段查询代码,其实我们会发现这两个查询代码中有很多是重复的,这时候我们就想了,能不能够进行代码的优化,我们想到了模板模式,就是将相同的代码提取出来放到父类中做,不同的代码放到各自的子类中去做,这样重复的代码只会出现一次了,下面来看一下实例,首先我们看一下抽象出来的Dao代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.template;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.PreparedStatement;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7.   
  8. import com.weijia.domain.DaoException;  
  9. import com.weijia.firstdemo.JdbcUtils;  
  10.   
  11. public abstract class AbstractDao {  
  12.       
  13.     /** 
  14.      * 更新 
  15.      */  
  16.     protected int update(String sql,Object[] args) {  
  17.         //这里需要做判断的,可能args为null  
  18.         Connection conn = null;  
  19.         PreparedStatement st = null;  
  20.         try{  
  21.             conn = JdbcUtils.getConnection();  
  22.             st = conn.prepareStatement(sql);  
  23.             for(int i=0;i<args.length;i++){  
  24.                 st.setObject(i+1, args[i]);  
  25.             }  
  26.             int count = 0;  
  27.             count = st.executeUpdate();  
  28.             System.out.println("更新的记录数:"+count);  
  29.             return count;  
  30.         }catch(Exception e){  
  31.             throw new DaoException(e.getMessage(),e);  
  32.         }finally{  
  33.             JdbcUtils.free(null, st, conn);  
  34.         }  
  35.     }  
  36.       
  37.     /** 
  38.      * 查询 
  39.      * @param sql 
  40.      * @param args 
  41.      * @return 
  42.      */  
  43.     protected Object find(String sql,Object[] args){  
  44.         Connection conn = null;  
  45.         PreparedStatement st = null;  
  46.         ResultSet rs = null;  
  47.         try{  
  48.             conn = JdbcUtils.getConnection();  
  49.             st = conn.prepareStatement(sql);  
  50.             for(int i=0;i<args.length;i++){  
  51.                 st.setObject(i+1, args[i]);  
  52.             }  
  53.             rs = st.executeQuery();  
  54.             Object obj = null;  
  55.             while(rs.next()){  
  56.                 //不同的部分放到子类去做  
  57.                 obj = rowMapper(rs);  
  58.             }  
  59.             return obj;  
  60.         }catch(Exception e){  
  61.             throw new DaoException(e.getMessage(),e);  
  62.         }finally{  
  63.             JdbcUtils.free(null, st, conn);  
  64.         }  
  65.     }  
  66.       
  67.     //子类需要实现的结果集处理方法  
  68.     protected abstract Object rowMapper(ResultSet rs) throws SQLException;  
  69.   
  70. }  

package com.weijia.template;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import com.weijia.domain.DaoException;import com.weijia.firstdemo.JdbcUtils;public abstract class AbstractDao {/** * 更新 */protected int update(String sql,Object[] args) {//这里需要做判断的,可能args为nullConnection conn = null;PreparedStatement st = null;try{conn = JdbcUtils.getConnection();st = conn.prepareStatement(sql);for(int i=0;i<args.length;i++){st.setObject(i+1, args[i]);}int count = 0;count = st.executeUpdate();System.out.println("更新的记录数:"+count);return count;}catch(Exception e){throw new DaoException(e.getMessage(),e);}finally{JdbcUtils.free(null, st, conn);}}/** * 查询 * @param sql * @param args * @return */protected Object find(String sql,Object[] args){Connection conn = null;PreparedStatement st = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();st = conn.prepareStatement(sql);for(int i=0;i<args.length;i++){st.setObject(i+1, args[i]);}rs = st.executeQuery();Object obj = null;while(rs.next()){//不同的部分放到子类去做obj = rowMapper(rs);}return obj;}catch(Exception e){throw new DaoException(e.getMessage(),e);}finally{JdbcUtils.free(null, st, conn);}}//子类需要实现的结果集处理方法protected abstract Object rowMapper(ResultSet rs) throws SQLException;}

看一下UserDaoImpl类:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.template;  
  2.   
  3. import java.sql.ResultSet;  
  4. import java.sql.SQLException;  
  5.   
  6. import com.weijia.domain.User;  
  7.   
  8. public class UserDaoImpl extends AbstractDao{  
  9.   
  10.     /** 
  11.      * 更新用户信息 
  12.      */  
  13.     public int update(User user) {  
  14.         String sql = "udpate user set name=?,birthday=?,money=?,where id=?";  
  15.         Object[] args = new Object[]{user.getName(),user.getBirthday(),user.getMoney(),user.getId()};  
  16.         return super.update(sql, args);//相同的代码调用父类的方法即可  
  17.     }  
  18.       
  19.     /** 
  20.      * 删除用户 
  21.      * @param user 
  22.      */  
  23.     public void delete(User user){  
  24.         String sql = "delete from user where id=?";  
  25.         Object[] args = new Object[]{user.getId()};  
  26.         super.update(sql, args);  
  27.     }  
  28.       
  29.     /** 
  30.      * 查找用户 
  31.      * @param loginName 
  32.      * @param password 
  33.      * @return 
  34.      */  
  35.     public User findUser(String loginName){  
  36.         String sql = "select id,name,money,birthday from user where name=?";  
  37.         Object[] args = new Object[]{loginName};  
  38.         return (User)super.find(sql, args);  
  39.     }  
  40.   
  41.     @Override  
  42.     protected Object rowMapper(ResultSet rs) throws SQLException{  
  43.         User user = new User();  
  44.         user.setId(rs.getInt("id"));  
  45.         user.setName(rs.getString("name"));  
  46.         user.setMoney(rs.getFloat("money"));  
  47.         user.setBirthday(rs.getDate("birthday"));  
  48.         return user;  
  49.     }  
  50.       
  51.     //不同的地方放到子类来实现  
  52.     //首先要区分哪些是变动的部分,哪些是不变的部分即可  
  53.       
  54. }  

package com.weijia.template;import java.sql.ResultSet;import java.sql.SQLException;import com.weijia.domain.User;public class UserDaoImpl extends AbstractDao{/** * 更新用户信息 */public int update(User user) {String sql = "udpate user set name=?,birthday=?,money=?,where id=?";Object[] args = new Object[]{user.getName(),user.getBirthday(),user.getMoney(),user.getId()};return super.update(sql, args);//相同的代码调用父类的方法即可}/** * 删除用户 * @param user */public void delete(User user){String sql = "delete from user where id=?";Object[] args = new Object[]{user.getId()};super.update(sql, args);}/** * 查找用户 * @param loginName * @param password * @return */public User findUser(String loginName){String sql = "select id,name,money,birthday from user where name=?";Object[] args = new Object[]{loginName};return (User)super.find(sql, args);}@Overrideprotected Object rowMapper(ResultSet rs) throws SQLException{User user = new User();user.setId(rs.getInt("id"));user.setName(rs.getString("name"));user.setMoney(rs.getFloat("money"));user.setBirthday(rs.getDate("birthday"));return user;}//如果insert的时候不需要获取主键的话,也可以使用super.update方法实现的,这样代码就显得很整洁,相同的代码只需要一份即可(放在父类中)//不同的地方放到子类来实现//首先要区分哪些是变动的部分,哪些是不变的部分即可}

ProductDaoImpl类:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.template;  
  2.   
  3. import java.sql.ResultSet;  
  4.   
  5. public class ProductDaoImpl extends AbstractDao{  
  6.       
  7.     public int update(){  
  8.         String sql = "update product set pname=?,price=? where pid=?";  
  9.         Object[] args = new Object[]{"drug",11,1};  
  10.         return super.update(sql, args);  
  11.     }  
  12.   
  13.     @Override  
  14.     protected Object rowMapper(ResultSet rs) {  
  15.         return null;  
  16.     }  
  17.   
  18. }  

package com.weijia.template;import java.sql.ResultSet;public class ProductDaoImpl extends AbstractDao{public int update(){String sql = "update product set pname=?,price=? where pid=?";Object[] args = new Object[]{"drug",11,1};return super.update(sql, args);}@Overrideprotected Object rowMapper(ResultSet rs) {return null;}}

接着看,现在有一个问题,就是查询,其实update的方式很简单的,完全可以统一化的,因为查询需要处理查询之后的结果集,所以很纠结的,上面的例子中我们看到,我们查询的是一个User对象,假如现在我只是想查询一个用户的name,那么我们只能在写一个findUserName方法了,同时还需要在AbstractDao父类中添加一个抽象方法的行映射器,这种方式就很纠结了,假如我们还有其他的查询需要的话,重复的代码又开始多了,这里我们将采用策略模式进行解决,我们只需要定义行映射器的接口:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.strategy;  
  2.   
  3. import java.sql.ResultSet;  
  4. import java.sql.SQLException;  
  5.   
  6. public interface RowMapper {  
  7.   
  8.     public Object mapRow(ResultSet rs) throws SQLException;  
  9.       
  10. }  

package com.weijia.strategy;import java.sql.ResultSet;import java.sql.SQLException;public interface RowMapper {public Object mapRow(ResultSet rs) throws SQLException;}

在父类中只需要修改一下查询的方法:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. /** 
  2.      * 查找用户 
  3.      * @param sql 
  4.      * @param args 
  5.      * @param rowMapper 
  6.      * @return 
  7.      */  
  8.     protected Object find(String sql,Object[] args,RowMapper rowMapper){  
  9.         Connection conn = null;  
  10.         PreparedStatement st = null;  
  11.         ResultSet rs = null;  
  12.         try{  
  13.             conn = JdbcUtils.getConnection();  
  14.             st = conn.prepareStatement(sql);  
  15.             for(int i=0;i<args.length;i++){  
  16.                 st.setObject(i+1, args[i]);  
  17.             }  
  18.             rs = st.executeQuery();  
  19.             Object obj = null;  
  20.             while(rs.next()){  
  21.                 obj = rowMapper.mapRow(rs);  
  22.             }  
  23.             return obj;  
  24.         }catch(Exception e){  
  25.             throw new DaoException(e.getMessage(),e);  
  26.         }finally{  
  27.             JdbcUtils.free(null, st, conn);  
  28.         }  
  29.     }  

/** * 查找用户 * @param sql * @param args * @param rowMapper * @return */protected Object find(String sql,Object[] args,RowMapper rowMapper){Connection conn = null;PreparedStatement st = null;ResultSet rs = null;try{conn = JdbcUtils.getConnection();st = conn.prepareStatement(sql);for(int i=0;i<args.length;i++){st.setObject(i+1, args[i]);}rs = st.executeQuery();Object obj = null;while(rs.next()){obj = rowMapper.mapRow(rs);}return obj;}catch(Exception e){throw new DaoException(e.getMessage(),e);}finally{JdbcUtils.free(null, st, conn);}}

添加了一个RowMapper接口变量

然后在子类中实现这个接口即可:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. /** 
  2.      * 查询名称 
  3.      * @param id 
  4.      * @return 
  5.      */  
  6.     public String findUserName(int id){  
  7.         String sql = "select name from user where id=?";  
  8.         Object[] args = new Object[]{id};  
  9.         Object user = super.find(sql, args,new RowMapper(){  
  10.             public Object mapRow(ResultSet rs) throws SQLException {  
  11.                 return rs.getObject("name");  
  12.             }  
  13.         });  
  14.         return ((User)user).getName();  
  15.     }  
  16.       
  17.     /** 
  18.      * @param loginName 
  19.      * @param password 
  20.      * @return 
  21.      */  
  22.     public User findUser(String loginName){  
  23.         String sql = "select id,name,money,birthday from user where name=?";  
  24.         Object[] args = new Object[]{loginName};  
  25.         return (User)super.find(sql, args,new RowMapper(){  
  26.   
  27.             public Object mapRow(ResultSet rs) throws SQLException {  
  28.                 User user = new User();  
  29.                 user.setId(rs.getInt("id"));  
  30.                 user.setName(rs.getString("name"));  
  31.                 user.setMoney(rs.getFloat("money"));  
  32.                 user.setBirthday(rs.getDate("birthday"));  
  33.                 return user;  
  34.             }  
  35.               
  36.         });  
  37.     }  

/** * 查询名称 * @param id * @return */public String findUserName(int id){String sql = "select name from user where id=?";Object[] args = new Object[]{id};Object user = super.find(sql, args,new RowMapper(){public Object mapRow(ResultSet rs) throws SQLException {return rs.getObject("name");}});return ((User)user).getName();}/** * 采用策略模式:传递不同的行为:C++中可以使用函数指针来实现,Java中可以使用接口的回调来实现 * @param loginName * @param password * @return */public User findUser(String loginName){String sql = "select id,name,money,birthday from user where name=?";Object[] args = new Object[]{loginName};return (User)super.find(sql, args,new RowMapper(){public Object mapRow(ResultSet rs) throws SQLException {User user = new User();user.setId(rs.getInt("id"));user.setName(rs.getString("name"));user.setMoney(rs.getFloat("money"));user.setBirthday(rs.getDate("birthday"));return user;}});}

通过上面的CRUD优化之后,我们在进行操作的时候,代码编写是很方便和简洁的

Spring框架中的JdbcTemplate

说完了上面的我们自定义的CRUD模板,下面我来看一下Spring框架给我们提供的CRUD模板(JdbcTemplate),其实他的实现原理和我们上面是一样的,只是他的功能会更强。

下面来看一下实例代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.springtemplate;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.PreparedStatement;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7. import java.sql.Statement;  
  8. import java.util.List;  
  9. import java.util.Map;  
  10.   
  11. import org.springframework.dao.DataAccessException;  
  12. import org.springframework.jdbc.core.BeanPropertyRowMapper;  
  13. import org.springframework.jdbc.core.ConnectionCallback;  
  14. import org.springframework.jdbc.core.JdbcTemplate;  
  15. import org.springframework.jdbc.core.RowMapper;  
  16.   
  17. import com.weijia.domain.User;  
  18. import com.weijia.firstdemo.JdbcUtils;  
  19.   
  20. public class JdbcTemplateTest {  
  21.       
  22.     public static void main(String[] args){  
  23.         User user = new User();  
  24.         user.setMoney(20);  
  25.         user.setId(1);  
  26.         update(user);  
  27.     }  
  28.       
  29.     /** 
  30.      * 更新操作 
  31.      * @param user 
  32.      */  
  33.     static void update(User user){  
  34.         JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());  
  35.         String sql = "update user set money=? where id=?";  
  36.         Object[] args = new Object[]{user.getMoney(),user.getId()};  
  37.         jdbc.update(sql, args);  
  38.     }  
  39.   
  40.     /** 
  41.      * 通过用户名查询用户 
  42.      * @param name 
  43.      * @return 
  44.      */  
  45.     static User findUser(String name){  
  46.         //需要传递一个数据源  
  47.         JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());  
  48.         String sql = "select id,name,money,birthday from user where name=?";  
  49.         Object[] args = new Object[]{name};  
  50.         
  51.         Object user = jdbc.queryForObject(sql,args,new RowMapper(){  
  52.             public Object mapRow(ResultSet rs, int rowNum) throws SQLException {  
  53.                 User user = new User();  
  54.                 user.setId(rs.getInt("id"));  
  55.                 user.setName(rs.getString("name"));  
  56.                 user.setMoney(rs.getFloat("money"));  
  57.                 user.setBirthday(rs.getDate("birthday"));  
  58.                 return user;  
  59.             }});  
  60.         return (User)user;  
  61.     }  
  62.       
  63.     /** 
  64.      * 通过用户名查询实体类 
  65.      * @param name 
  66.      * @return 
  67.      */  
  68.     static User findUsers(String name){  
  69.         JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());  
  70.         String sql = "select id,name,money,birthday from user where name=?";  
  71.         Object[] args = new Object[]{name};  
  72.         //如果没有记录或者返回多个记录的话,这个方法是会报异常的  
  73.         
  74.         //如果不相等的话,就是用默认值对其属性进行赋值  
  75.         Object user = jdbc.queryForObject(sql,args,new BeanPropertyRowMapper(User.class){});  
  76.         return (User)user;  
  77.     }  
  78.       
  79.     /** 
  80.      * 查询多个用户 
  81.      * @param id 
  82.      * @return 
  83.      */  
  84.     static List findUser1(int id){  
  85.         JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());  
  86.         String sql = "select id,name,money,birthday from user where id<?";  
  87.         Object[] args = new Object[]{id};  
  88.         List users = jdbc.query(sql,args,new BeanPropertyRowMapper(User.class){});  
  89.         return users;  
  90.     }  
  91.       
  92.     //求最大值,记录总数等情况,查询结果只有一个值  
  93.     //返回8种基本类型  
  94.     static int getUserCount(){  
  95.         String sql = "select count(*) from user";  
  96.         //JdbcTemplate是线程安全的  
  97.         JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());  
  98.         return jdbc.queryForInt(sql);  
  99.     }  
  100.     //返回String  
  101.     static String getUserName(int id){  
  102.         JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());  
  103.         String sql = "select name from user where id="+id;  
  104.         Object name = jdbc.queryForObject(sql, String.class);  
  105.         return (String)name;  
  106.     }  
  107.     //返回map  
  108.     static Map getUser(int id){  
  109.         JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());  
  110.         String sql = "select id,name,birthday from user where id=?";  
  111.         return jdbc.queryForMap(sql,new Object[]{id});  
  112.     }  
  113.       
  114.     //添加完用户之后返回主键  
  115.     static User addUser(final User user){  
  116.         JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());  
  117.         //这个和RowMapper接口差不多,RowMapper是传回来一个ResultSet  
  118.         //而这个接口返回的是一个Connection,给我们更多的权限了  
  119.         jdbc.execute(new ConnectionCallback(){  
  120.             public Object doInConnection(Connection conn) throws SQLException,DataAccessException {  
  121.                 String sql = "insert into user(name,birtdhday,birthday) values('jiangwei','1987-01-01',400)";  
  122.                 PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);  
  123.                 ps.executeUpdate();  
  124.                 //可能是组合主键,可能会返回一个ResultSet  
  125.                 ResultSet rs = ps.getGeneratedKeys();  
  126.                 if(rs.next()){  
  127.                     user.setId(rs.getInt(1));  
  128.                 }  
  129.                 return null;  
  130.             }});  
  131.         return user;  
  132.     }  
  133.       
  134. }  

package com.weijia.springtemplate;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.List;import java.util.Map;import org.springframework.dao.DataAccessException;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.ConnectionCallback;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import com.weijia.domain.User;import com.weijia.firstdemo.JdbcUtils;public class JdbcTemplateTest {public static void main(String[] args){User user = new User();user.setMoney(20);user.setId(1);update(user);}/** * 更新操作 * @param user */static void update(User user){JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());String sql = "update user set money=? where id=?";Object[] args = new Object[]{user.getMoney(),user.getId()};jdbc.update(sql, args);}/** * 通过用户名查询用户 * @param name * @return */static User findUser(String name){//需要传递一个数据源JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());String sql = "select id,name,money,birthday from user where name=?";Object[] args = new Object[]{name};//queryForObject方法和我们之前采用策略模式设置的模板很类似呀,这个方法只会返回一个记录,如果有多个记录返回或者没有记录返回的话,这个方法就会报告异常的Object user = jdbc.queryForObject(sql,args,new RowMapper(){public Object mapRow(ResultSet rs, int rowNum) throws SQLException {User user = new User();user.setId(rs.getInt("id"));user.setName(rs.getString("name"));user.setMoney(rs.getFloat("money"));user.setBirthday(rs.getDate("birthday"));return user;}});return (User)user;}/** * 通过用户名查询实体类 * @param name * @return */static User findUsers(String name){JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());String sql = "select id,name,money,birthday from user where name=?";Object[] args = new Object[]{name};//如果没有记录或者返回多个记录的话,这个方法是会报异常的//使用这个方法直接将返回的结果集映射到实体类,这里返回的结果集中的字段和实体类中的属性名必须相等//如果不相等的话,就是用默认值对其属性进行赋值Object user = jdbc.queryForObject(sql,args,new BeanPropertyRowMapper(User.class){});return (User)user;}/** * 查询多个用户 * @param id * @return */static List findUser1(int id){JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());String sql = "select id,name,money,birthday from user where id<?";Object[] args = new Object[]{id};List users = jdbc.query(sql,args,new BeanPropertyRowMapper(User.class){});return users;}//求最大值,记录总数等情况,查询结果只有一个值//返回8种基本类型static int getUserCount(){String sql = "select count(*) from user";//JdbcTemplate是线程安全的JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());return jdbc.queryForInt(sql);}//返回Stringstatic String getUserName(int id){JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());String sql = "select name from user where id="+id;Object name = jdbc.queryForObject(sql, String.class);return (String)name;}//返回mapstatic Map getUser(int id){JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());String sql = "select id,name,birthday from user where id=?";return jdbc.queryForMap(sql,new Object[]{id});}//添加完用户之后返回主键static User addUser(final User user){JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());//这个和RowMapper接口差不多,RowMapper是传回来一个ResultSet//而这个接口返回的是一个Connection,给我们更多的权限了jdbc.execute(new ConnectionCallback(){public Object doInConnection(Connection conn) throws SQLException,DataAccessException {String sql = "insert into user(name,birtdhday,birthday) values('jiangwei','1987-01-01',400)";PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);ps.executeUpdate();//可能是组合主键,可能会返回一个ResultSetResultSet rs = ps.getGeneratedKeys();if(rs.next()){user.setId(rs.getInt(1));}return null;}});return user;}}

首先看一下,我们开始使用一个数据源来初始化一个JdbcTemplate模板

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());  

JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());

update(String sql,Object[] args):第一个参数是sql语句,第二参数是需要填充的更新参数queryForObject(String sql,Object[] args, RowMapper rowMapper):第一参数是sql语句,第二参数是需要填充的查询参数,第三个参数是行映射器(和前面我们设计的一样),这个方法只适用查询结果是一个的情况,如果查询结果是多个的话,这个方法会报异常的,同时这个方法第三个参数我们也可以传递一个:new BeanPropertyRowMapper(User.class){}对象,这个就可以将查询结果填充到User实体类中了,当然这里有一个限制就是要求查询出来的结果集中的字段名和实体类中的属性名一样,其实这内部使用的是反射技术来实现的,我们之前写过这样的方法的。

query(String sql,Object[]args,RowMapper rowMapper):这个方法和上面的那个方法不同的就是返回的结果,这个方法返回的是一个List,针对于查询结果是多个的情况

queryForInt(String sql,Object[] args):这个方法是针对查询结果是一个整型的,比如我们需要查询出用户的总数

queryForLong(String sql,Object[] args):这个方法是查询出long类型的

queryForObject(String sql, Class requiredType):这个方法是对于那些没有特定查询类型的方法同一使用这个方法,比如现在想查询一个用户的名称是String类型的,或者想查询用户的money,是float类型的,这里我们只需要在第二个参数中指定类型即可

queryForMap(String sql,Object[] args):查询返回的是一个Map集合

queryForList(String sql,Object[] args):查询返回的是一个List集合

上面的方法我们就足够了

下面再来看一个需求,如果我们想得到插入一条记录之后的主键的操作,这里改如何操作呢?

在之前我们操作的是需要将PreparedStatement中设置一个参数,不然会报错的,我们通过上面的方法可以知道其内部都是使用PreparedStatement实现的,因为有占位符,需要设置查询参数的。但是他并没有提供一个方法能够设置这个PreparedStatement的一些参数,但是如果我们想获取到主键值的话,必须要设置PreparedStatement的第二参数为:Statement.RETURN_GENERATED_KEYS,那么这时候,JdbcTemplate还给我们提供了一个方法:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. jdbc.execute(new ConnectionCallback(){  
  2.     public Object doInConnection(Connection con) throws SQLException,DataAccessException {  
  3.         //do something  
  4.         return null;  
  5.     }  
  6. });  

jdbc.execute(new ConnectionCallback(){public Object doInConnection(Connection con) throws SQLException,DataAccessException {//do somethingreturn null;}});

这样一来,上面提到的JdbcTemplate中的方法就可以满足我们的日常需求了

加强版的JdbcTemplate

1.NamedParameterJdbcTemplate

这个模板其实我们见名知意,他的最大的作用应该是参数名称的功能,我们在上面的模板中可以看到,我们每次传递的参数数组中的参数顺序必须和查询语句中的占位符的顺序要相同,但是这个模板给我们提供了一个便捷的好处就是,不需要关心参数的顺序:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. static User findUsers(User user){  
  2.         String sql = "select id,name,money,birthday from user where name=:n and money>:m and id<:id";  
  3.         //参数的顺序必须一致,不然报错  
  4.         
  5.         //如果没有记录或者返回多个记录的话,这个方法是会报异常的  
  6.         
  7.         Map<String,Object> params = new HashMap<String,Object>();  
  8.         params.put("n", user.getName());  
  9.         params.put("m", user.getMoney());  
  10.         params.put("id", user.getId());  
  11.         Object users = named.queryForObject(sql, params, new BeanPropertyRowMapper(User.class));  
  12.         return (User)users;  
  13.     }  

static User findUsers(User user){String sql = "select id,name,money,birthday from user where name=:n and money>:m and id<:id";//参数的顺序必须一致,不然报错//Object[] args = new Object[]{user.getName(),user.getMoney(),user.getId()};//如果没有记录或者返回多个记录的话,这个方法是会报异常的//使用Map代替数据进行传递参数,这样就不需要在乎传递的顺序了(其实内部源代码是先解析这个map,将从新组装sql然后交给JdbcTemplate来处理)Map<String,Object> params = new HashMap<String,Object>();params.put("n", user.getName());params.put("m", user.getMoney());params.put("id", user.getId());Object users = named.queryForObject(sql, params, new BeanPropertyRowMapper(User.class));return (User)users;}

:参数名

这个参数名,我们会在下面的HashMap中当做key来进行参数的填充,然后将这个HashMap变量传递到queryForObject方法中,而不是在使用数组的方式了,这种方式其实就是将数组类型的参数传递变成了Map类型的参数传递,其实方法的功能都是没有改变的,只是相对应的方法中的参数不再是Object[]数组了,而是Map集合类型的

同样的假如是JavaBean类型的怎么填充参数呢?这里也提供了一个方法:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. SqlParameterSource ps = new BeanPropertySqlParameterSource(user);  

SqlParameterSource ps = new BeanPropertySqlParameterSource(user);

这样直接进行参数的填充,但是这里有一个限制就是sql中的参数名称必须要和JavaBean中的属性名称一样(内部使用反射技术实现的)

最后我们获取主键的值的方式也变化了:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. SqlParameterSource ps = new BeanPropertySqlParameterSource(user);  
  2. //将插入之后的记录的id放到keyHolder中  
  3. KeyHolder keyHolder = new GeneratedKeyHolder();  
  4. named.update(sql, ps, keyHolder);  
  5. //也有可能是组合主键  
  6. Map map = keyHolder.getKeys();  
  7. int id = keyHolder.getKey().intValue();  

SqlParameterSource ps = new BeanPropertySqlParameterSource(user);//将插入之后的记录的id放到keyHolder中KeyHolder keyHolder = new GeneratedKeyHolder();named.update(sql, ps, keyHolder);//也有可能是组合主键Map map = keyHolder.getKeys();int id = keyHolder.getKey().intValue();

这样比JdbcTemplate中的方法更简单了。

下面看一下完整的实例代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. package com.weijia.springtemplate;  
  2.   
  3. import java.util.Date;  
  4. import java.util.HashMap;  
  5. import java.util.Map;  
  6.   
  7. import org.springframework.jdbc.core.BeanPropertyRowMapper;  
  8. import org.springframework.jdbc.core.JdbcTemplate;  
  9. import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;  
  10. import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;  
  11. import org.springframework.jdbc.core.namedparam.SqlParameterSource;  
  12. import org.springframework.jdbc.support.GeneratedKeyHolder;  
  13. import org.springframework.jdbc.support.KeyHolder;  
  14.   
  15. import com.weijia.domain.User;  
  16. import com.weijia.firstdemo.JdbcUtils;  
  17.   
  18. /** 
  19.  * 可以实现命名参数 
  20.  * 这样就不会担心占位符?和传递参数的位置了错乱的问题了 
  21.  * 将数组参数变成hashmap类型的参数 
  22.  * @author weijiang204321 
  23.  * 
  24.  */  
  25. public class NamedJdbcTemplate {  
  26.       
  27.     public static void main(String[] args) throws Exception{  
  28.         System.out.println("add id:"+addUser(new User(1,"jiangwei",new Date(System.currentTimeMillis()),100)));  
  29.     }  
  30.       
  31.     public static NamedParameterJdbcTemplate named = new NamedParameterJdbcTemplate(JdbcUtils.getDataSource());  
  32.       
  33.     static User findUser(User user){  
  34.         JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());  
  35.         String sql = "select id,name,money,birthday from user where name=? and money>? and id<?";  
  36.         //参数的顺序必须一致,不然报错  
  37.         Object[] args = new Object[]{user.getName(),user.getMoney(),user.getId()};  
  38.         //如果没有记录或者返回多个记录的话,这个方法是会报异常的  
  39.         Object users = jdbc.queryForObject(sql,args,new BeanPropertyRowMapper(User.class){});  
  40.         return (User)users;  
  41.     }  
  42.       
  43.     static User findUsers(User user){  
  44.         String sql = "select id,name,money,birthday from user where name=:n and money>:m and id<:id";  
  45.         //参数的顺序必须一致,不然报错  
  46.         
  47.         //如果没有记录或者返回多个记录的话,这个方法是会报异常的  
  48.           
  49.         
  50.         Map<String,Object> params = new HashMap<String,Object>();  
  51.         params.put("n", user.getName());  
  52.         params.put("m", user.getMoney());  
  53.         params.put("id", user.getId());  
  54.         Object users = named.queryForObject(sql, params, new BeanPropertyRowMapper(User.class));  
  55.         return (User)users;  
  56.     }  
  57.       
  58.     static User findUser1(User user){  
  59.         String sql = "select id,name,money,birthday from user where name=:name and money>:money and id<:id";  
  60.         //参数名必须和User中的属性名相同的,内部还是通过反射技术实现的  
  61.         SqlParameterSource ps = new BeanPropertySqlParameterSource(user);  
  62.         Object users = named.queryForObject(sql, ps, new BeanPropertyRowMapper(User.class));  
  63.         return (User)users;  
  64.     }  
  65.       
  66.     static int addUser(User user){  
  67.         String sql = "insert into user(name,birthday,money) values(:name,:birthday,:money)";  
  68.         //参数名必须和User中的属性名相同的,内部还是通过反射技术实现的  
  69.         SqlParameterSource ps = new BeanPropertySqlParameterSource(user);  
  70.         //将插入之后的记录的id放到keyHolder中  
  71.         KeyHolder keyHolder = new GeneratedKeyHolder();  
  72.         named.update(sql, ps, keyHolder);  
  73.         //也有可能是组合主键  
  74.         Map map = keyHolder.getKeys();  
  75.         int id = keyHolder.getKey().intValue();  
  76.         return keyHolder.getKey().intValue();  
  77.     }  
  78.   
  79. }  

package com.weijia.springtemplate;import java.util.Date;import java.util.HashMap;import java.util.Map;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;import org.springframework.jdbc.core.namedparam.SqlParameterSource;import org.springframework.jdbc.support.GeneratedKeyHolder;import org.springframework.jdbc.support.KeyHolder;import com.weijia.domain.User;import com.weijia.firstdemo.JdbcUtils;/** * 可以实现命名参数 * 这样就不会担心占位符?和传递参数的位置了错乱的问题了 * 将数组参数变成hashmap类型的参数 * @author weijiang204321 * */public class NamedJdbcTemplate {public static void main(String[] args) throws Exception{System.out.println("add id:"+addUser(new User(1,"jiangwei",new Date(System.currentTimeMillis()),100)));}//其内部有一个JdbcTemplate对象,有些事情还是交给JdbcTemplate来处理的(静态代理)public static NamedParameterJdbcTemplate named = new NamedParameterJdbcTemplate(JdbcUtils.getDataSource());static User findUser(User user){JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());String sql = "select id,name,money,birthday from user where name=? and money>? and id<?";//参数的顺序必须一致,不然报错Object[] args = new Object[]{user.getName(),user.getMoney(),user.getId()};//如果没有记录或者返回多个记录的话,这个方法是会报异常的Object users = jdbc.queryForObject(sql,args,new BeanPropertyRowMapper(User.class){});return (User)users;}static User findUsers(User user){String sql = "select id,name,money,birthday from user where name=:n and money>:m and id<:id";//参数的顺序必须一致,不然报错//Object[] args = new Object[]{user.getName(),user.getMoney(),user.getId()};//如果没有记录或者返回多个记录的话,这个方法是会报异常的//使用Map代替数据进行传递参数,这样就不需要在乎传递的顺序了(其实内部源代码是先解析这个map,将从新组装sql然后交给JdbcTemplate来处理)Map<String,Object> params = new HashMap<String,Object>();params.put("n", user.getName());params.put("m", user.getMoney());params.put("id", user.getId());Object users = named.queryForObject(sql, params, new BeanPropertyRowMapper(User.class));return (User)users;}static User findUser1(User user){String sql = "select id,name,money,birthday from user where name=:name and money>:money and id<:id";//参数名必须和User中的属性名相同的,内部还是通过反射技术实现的SqlParameterSource ps = new BeanPropertySqlParameterSource(user);Object users = named.queryForObject(sql, ps, new BeanPropertyRowMapper(User.class));return (User)users;}static int addUser(User user){String sql = "insert into user(name,birthday,money) values(:name,:birthday,:money)";//参数名必须和User中的属性名相同的,内部还是通过反射技术实现的SqlParameterSource ps = new BeanPropertySqlParameterSource(user);//将插入之后的记录的id放到keyHolder中KeyHolder keyHolder = new GeneratedKeyHolder();named.update(sql, ps, keyHolder);//也有可能是组合主键Map map = keyHolder.getKeys();int id = keyHolder.getKey().intValue();return keyHolder.getKey().intValue();}}

2.SimpleJdbcTemplate

见名知意,这个模板会操作变得更简单的,他的主要变化就是两点:

第一、实现可变参数了 第二、查询出来的对象无须进行类型转换了

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. //将类型也作为参数传入的,无须进行类型转换操作了  
  2. static User findUser(int id,String name,Class<User> clazz){  
  3.     String sql = "select id,name,money,birthday from user where id=? and name=?";  
  4.     //参数名必须和User中的属性名相同的,内部还是通过反射技术实现的  
  5.     //simple.getJdbcOperations();//得到Jdbc对象  
  6.     return simple.queryForObject(sql, ParameterizedBeanPropertyRowMapper.newInstance(clazz),id,name);  
  7. }  

//将类型也作为参数传入的,无须进行类型转换操作了static User findUser(int id,String name,Class<User> clazz){String sql = "select id,name,money,birthday from user where id=? and name=?";//参数名必须和User中的属性名相同的,内部还是通过反射技术实现的//simple.getNamedParameterJdbcOperations();//得到一个NamedParameterJdbcOperateions对象//simple.getJdbcOperations();//得到Jdbc对象//这个方法在传递参数的时候使用的是可变参数,参数的顺序和占位符?要必须一致return simple.queryForObject(sql, ParameterizedBeanPropertyRowMapper.newInstance(clazz),id,name);}

最后一个参数其实是可变参数,可以传递多个值的,但是这个传递的值的顺序必须要和上面sql中占位符的顺序一致,下面是测试代码:

[java]view plaincopyprint?jdbc [转载]JavaEE学习篇之--JDBC详解jdbc [转载]JavaEE学习篇之--JDBC详解

  1. System.out.println(findUser(1505,"jiangwei",User.class));  

System.out.println(findUser(1505,"jiangwei",User.class));

总结:

至此我们就将JDBC的相关知识都介绍完毕了,因为JDBC本身的内容是很多的,我们也只有遇到问题的时候采取解决,上面的只是对于开发来说应该没有多大的问题了,可能会有一些细节上的问题,这个只能在后续进行完善了。上面说到的内容,可能有些不全,我将整个讲解的项目功能放到了网上,下载地址:

http://download.csdn.net/detail/jiangwei0910410003/7373133

这个需要注意的是一定记得连接上正确的数据库,这个可以查看连接数据库的那段代码。。

如果发现有问题,请及时提醒,我做修改,希望能够和大家一起做到百分百的成功。。

本文标题:材料力学习题详细解答-秦九韶算法与K进制练习题(含详细解答)
本文地址: http://www.61k.com/1073295.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1