配色: 字号:
javaweb使用JDBC对数据库进行CRUD
2016-08-30 | 阅:  转:  |  分享 
  
javaweb使用JDBC对数据库进行CRUD



一、statement对象介绍



Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。

Statement对象的executeUpdate方法,用于向数据库发送增、删、改的sql语句,executeUpdate执行完后,将会返回一个整数(即增删改语句导致了数据库几行数据发生了变化)。

Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。



1.1、CRUD操作-create



使用executeUpdate(Stringsql)方法完成数据添加操作,示例操作:



1Statementst=conn.createStatement();

2Stringsql="insertintouser(….)values(…..)";

3intnum=st.executeUpdate(sql);

4if(num>0){

5System.out.println("插入成功!!!");

6}

1.2、CRUD操作-update



使用executeUpdate(Stringsql)方法完成数据修改操作,示例操作:



1Statementst=conn.createStatement();

2Stringsql=“updateusersetname=‘’wherename=‘’";

3intnum=st.executeUpdate(sql);

4if(num>0){

5System.out.println(“修改成功!!!");

6}

1.3、CRUD操作-delete



使用executeUpdate(Stringsql)方法完成数据删除操作,示例操作:



1Statementst=conn.createStatement();

2Stringsql=“deletefromuserwhereid=1;

3intnum=st.executeUpdate(sql);

4if(num>0){

5System.out.println(“删除成功!!!");

6}

1.4、CRUD操作-read



使用executeQuery(Stringsql)方法完成数据查询操作,示例操作:



1Statementst=conn.createStatement();

2Stringsql=“selectfromuserwhereid=1;

3ResultSetrs=st.executeUpdate(sql);

4while(rs.next()){

5//根据获取列的数据类型,分别调用rs的相应方法映射到java对象中

6}

二、使用jdbc对数据库增删改查



2.1、搭建实验环境



1、在mysql中创建一个库,并创建user表和插入表的数据。



SQL脚本如下:



复制代码

1createdatabasejdbcStudy;

2

3usejdbcStudy;

4

5createtableusers(

6idintprimarykey,

7namevarchar(40),

8passwordvarchar(40),

9emailvarchar(60),

10birthdaydate

11);

复制代码

2、新建一个JavaWeb工程,并导入MySQL数据库驱动。







3、在src目录下创建一个db.properties文件,如下图所示:







在db.properties中编写MySQL数据库的连接信息,代码如下所示:



1driver=com.mysql.jdbc.Driver

2url=jdbc:mysql://localhost:3306/jdbcStudy

3username=root

4password=XDP

4、编写一个JdbcUtils工具类,用于连接数据库,获取数据库连接和释放数据库连接,代码如下:



复制代码

1packageme.gacl.utils;

2

3importjava.io.InputStream;

4importjava.sql.Connection;

5importjava.sql.DriverManager;

6importjava.sql.ResultSet;

7importjava.sql.SQLException;

8importjava.sql.Statement;

9importjava.util.Properties;

10

11publicclassJdbcUtils{

12

13privatestaticStringdriver=null;

14privatestaticStringurl=null;

15privatestaticStringusername=null;

16privatestaticStringpassword=null;

17

18static{

19try{

20//读取db.properties文件中的数据库连接信息

21InputStreamin=JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");

22Propertiesprop=newProperties();

23prop.load(in);

24

25//获取数据库连接驱动

26driver=prop.getProperty("driver");

27//获取数据库连接URL地址

28url=prop.getProperty("url");

29//获取数据库连接用户名

30username=prop.getProperty("username");

31//获取数据库连接密码

32password=prop.getProperty("password");

33

34//加载数据库驱动

35Class.forName(driver);

36

37}catch(Exceptione){

38thrownewExceptionInInitializerError(e);

39}

40}

41

42/

43@Method:getConnection

44@Description:获取数据库连接对象

45@Anthor:孤傲苍狼

46

47@returnConnection数据库连接对象

48@throwsSQLException

49/

50publicstaticConnectiongetConnection()throwsSQLException{

51returnDriverManager.getConnection(url,username,password);

52}

53

54/

55@Method:release

56@Description:释放资源,

57要释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象

58@Anthor:孤傲苍狼

59

60@paramconn

61@paramst

62@paramrs

63/

64publicstaticvoidrelease(Connectionconn,Statementst,ResultSetrs){

65if(rs!=null){

66try{

67//关闭存储查询结果的ResultSet对象

68rs.close();

69}catch(Exceptione){

70e.printStackTrace();

71}

72rs=null;

73}

74if(st!=null){

75try{

76//关闭负责执行SQL命令的Statement对象

77st.close();

78}catch(Exceptione){

79e.printStackTrace();

80}

81}

82

83if(conn!=null){

84try{

85//关闭Connection数据库连接对象

86conn.close();

87}catch(Exceptione){

88e.printStackTrace();

89}

90}

91}

92}

复制代码

2.2、使用statement对象完成对数据库的CRUD操作



测试代码如下:



复制代码

1packageme.gacl.demo;

2

3importjava.sql.Connection;

4importjava.sql.ResultSet;

5importjava.sql.Statement;

6importme.gacl.utils.JdbcUtils;

7

8importorg.junit.Test;

9

10/

11@ClassName:JdbcCRUDByStatement

12@Description:通过Statement对象完成对数据库的CRUD操作

13@author:孤傲苍狼

14@date:2014-9-15下午11:22:12

15

16/

17publicclassJdbcCRUDByStatement{

18

19@Test

20publicvoidinsert(){

21Connectionconn=null;

22Statementst=null;

23ResultSetrs=null;

24try{

25//获取一个数据库连接

26conn=JdbcUtils.getConnection();

27//通过conn对象获取负责执行SQL命令的Statement对象

28st=conn.createStatement();

29//要执行的SQL命令

30Stringsql="insertintousers(id,name,password,email,birthday)values(3,''白虎神皇'',''123'',''bhsh@sina.com'',''1980-09-09'')";

31//执行插入操作,executeUpdate方法返回成功的条数

32intnum=st.executeUpdate(sql);

33if(num>0){

34System.out.println("插入成功!!");

35}

36

37}catch(Exceptione){

38e.printStackTrace();

39}finally{

40//SQL执行完成之后释放相关资源

41JdbcUtils.release(conn,st,rs);

42}

43}

44

45@Test

46publicvoiddelete(){

47Connectionconn=null;

48Statementst=null;

49ResultSetrs=null;

50try{

51conn=JdbcUtils.getConnection();

52Stringsql="deletefromuserswhereid=3";

53st=conn.createStatement();

54intnum=st.executeUpdate(sql);

55if(num>0){

56System.out.println("删除成功!!");

57}

58}catch(Exceptione){

59e.printStackTrace();

60

61}finally{

62JdbcUtils.release(conn,st,rs);

63}

64}

65

66@Test

67publicvoidupdate(){

68Connectionconn=null;

69Statementst=null;

70ResultSetrs=null;

71try{

72conn=JdbcUtils.getConnection();

73Stringsql="updateuserssetname=''孤傲苍狼'',email=''gacl@sina.com''whereid=3";

74st=conn.createStatement();

75intnum=st.executeUpdate(sql);

76if(num>0){

77System.out.println("更新成功!!");

78}

79}catch(Exceptione){

80e.printStackTrace();

81

82}finally{

83JdbcUtils.release(conn,st,rs);

84}

85}

86

87@Test

88publicvoidfind(){

89Connectionconn=null;

90Statementst=null;

91ResultSetrs=null;

92try{

93conn=JdbcUtils.getConnection();

94Stringsql="selectfromuserswhereid=3";

95st=conn.www.wang027.comcreateStatement();

96rs=st.executeQuery(sql);sql

97if(rs.next()){

98System.out.println(rs.getString("name"));

99}

100}catch(Exceptione){

101e.printStackTrace();

102}finally{

103JdbcUtils.release(conn,st,rs);

104}

105}

106}

复制代码

三、PreparedStatement对象介绍



PreperedStatement是Statement的子类,它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Statement对象而言:PreperedStatement可以避免SQL注入的问题。

Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。



3.1、使用PreparedStatement对象完成对数据库的CRUD操作



测试代码如下:



复制代码

1packageme.gacl.demo;

2

3importjava.sql.Connection;

4importjava.sql.PreparedStatement;

5importjava.sql.ResultSet;

6importjava.util.Date;

7importme.gacl.utils.JdbcUtils;

8importorg.junit.Test;

9

10/

11@ClassName:JdbcCRUDByPreparedStatement

12@Description:通过PreparedStatement对象完成对数据库的CRUD操作

13@author:孤傲苍狼

14@date:2014-9-15下午11:21:42

15

16/

17publicclassJdbcCRUDByPreparedStatement{

18

19@Test

20publicvoidinsert(){

21Connectionconn=null;

22PreparedStatementst=null;

23ResultSetrs=null;

24try{

25//获取一个数据库连接

26conn=JdbcUtils.getConnection();

27//要执行的SQL命令,SQL中的参数使用?作为占位符

28Stringsql="insertintousers(id,name,password,email,birthday)values(?,?,?,?,?)";

29//通过conn对象获取负责执行SQL命令的prepareStatement对象

30st=conn.prepareStatement(sql);

31//为SQL语句中的参数赋值,注意,索引是从1开始的

32/

33SQL语句中各个字段的类型如下:

34+----------+-------------+

35|Field|Type|

36+----------+-------------+

37|id|int(11)|

38|name|varchar(40)|

39|password|varchar(40)|

40|email|varchar(60)|

41|birthday|date|

42+----------+-------------+

43/

44st.setInt(1,1);//id是int类型的

45st.setString(2,"白虎神皇");//name是varchar(字符串类型)

46st.setString(3,"123");//password是varchar(字符串类型)

47st.setString(4,"bhsh@sina.com");//email是varchar(字符串类型)

48st.setDate(5,newjava.sql.Date(newDate().getTime()));//birthday是date类型

49//执行插入操作,executeUpdate方法返回成功的条数

50intnum=st.executeUpdate();

51if(num>0){

52System.out.println("插入成功!!");

53}

54

55}catch(Exceptione){

56e.printStackTrace();

57}finally{

58//SQL执行完成之后释放相关资源

59JdbcUtils.release(conn,st,rs);

60}

61}

62

63@Test

64publicvoiddelete(){

65Connectionconn=null;

66PreparedStatementst=null;

67ResultSetrs=null;

68try{

69conn=JdbcUtils.getConnection();

70Stringsql="deletefromuserswhereid=?";

71st=conn.prepareStatement(sql);

72st.setInt(1,1);

73intnum=st.executeUpdate();

74if(num>0){

75System.out.println("删除成功!!");

76}

77}catch(Exceptione){

78e.printStackTrace();

79}finally{

80JdbcUtils.release(conn,st,rs);

81}

82}

83

84@Test

85publicvoidupdate(){

86Connectionconn=null;

87PreparedStatementst=null;

88ResultSetrs=null;

89try{

90conn=JdbcUtils.getConnection();

91Stringsql="updateuserssetname=?,email=?whereid=?";

92st=conn.prepareStatement(sql);

93st.setString(1,"gacl");

94st.setString(2,"gacl@sina.com");

95st.setInt(3,2);

96intnum=st.executeUpdate();

97if(num>0){

98System.out.println("更新成功!!");

99}

100}catch(Exceptione){

101e.printStackTrace();

102

103}finally{

104JdbcUtils.release(conn,st,rs);

105}

106}

107

108@Test

109publicvoidfind(){

110Connectionconn=null;

111PreparedStatementst=null;

112ResultSetrs=null;

113try{

114conn=JdbcUtils.getConnection();

115Stringsql="selectfromuserswhereid=?";

116st=conn.prepareStatement(sql);

117st.setInt(1,1);

118rs=st.executeQuery();

119if(rs.next()){

120System.out.println(rs.getString("name"));

121}

122}catch(Exceptione){

123

124}finally{

125JdbcUtils.release(conn,st,rs);

126}

127}

128}

献花(0)
+1
(本文系thedust79首藏)