亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

Java 通過(guò)JDBC進(jìn)行數(shù)據(jù)操作(增刪改查)

來(lái)源:二弎壽先生 發(fā)布時(shí)間:2018-11-21 14:04:49 閱讀量:1093

一、連接數(shù)據(jù)庫(kù) 

a.獲取數(shù)據(jù)庫(kù)驅(qū)動(dòng) 

b.從配置文件db.properties中獲取mysql


db.properties配置文件


//mysql驅(qū)動(dòng)

driver:com.mysql.jdbc.Driver

//本機(jī)mysql的路徑

url:jdbc:mysql://localhost:3306/jdbcdemo

//用戶名

username:root

//密碼

password:123

1

2

3

4

5

6

7

8

二、構(gòu)建實(shí)體類(lèi) 

類(lèi)名與數(shù)據(jù)庫(kù)表名一致,字段名與數(shù)據(jù)列名一致


package bean;


public class Users {

    private String username;

    private String password;

    private String phone;


    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

    public String getPhone() {

        return phone;

    }

    public void setPhone(String phone) {

        this.phone = phone;

    }


}

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

三、dbUtils類(lèi) :進(jìn)行數(shù)據(jù)庫(kù)的相關(guān)操作


package utils;


import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.lang.reflect.Field;

import java.lang.reflect.Modifier;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.Properties;


import bean.Users;


/**

 * 

* <p>Title:DbUtil </p>

* <p>Description:數(shù)據(jù)庫(kù)工具類(lèi) </p>

* <p>Company: </p> 

* @author 小桃小濤

* @date 2017年8月23日下午2:28:14

 */

public class DbUtil {

    //1.獲取數(shù)據(jù)庫(kù)驅(qū)動(dòng)

    /**

     * @description 獲取數(shù)據(jù)庫(kù)驅(qū)動(dòng)

     * @return

     */

    public static Connection getConnection(){

        Properties ps = new Properties();

        Connection conn = null;

        FileInputStream inputstream = null;

        String driver;

        String url;

        String username;

        String password;

        try {

            //從配置文件db.properties中獲取mysql配置

            inputstream = new FileInputStream(new File("D:\\Java Example\\Jdbc\\src\\db.properties"));

            ps.load(inputstream);

            driver =ps.getProperty("driver");

            url =ps.getProperty("url");

            username =ps.getProperty("username");

            password =ps.getProperty("password");

            //System.out.println(driver+" "+url+" "+username+""+password);

            //加載驅(qū)動(dòng)

            Class.forName(driver);

            conn = DriverManager.getConnection(url,username,password);


        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        } finally{

            //關(guān)閉流

            if(inputstream!=null){

                try {

                    inputstream.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

        return conn;

    }


    //關(guān)閉資源 Object... 不定參數(shù)

    public static void closeDb(Object... args){

        if(args==null){

            return;

        }

        try {

            for (int i = 0; i < args.length; i++) {

                //判斷是不是預(yù)處理方法

                if(args[i] instanceof PreparedStatement

                        &&args[i]!=null){

                        ((PreparedStatement)args[i]).close();

                }

                //判斷是不是連接

                if(args[i] instanceof Connection

                        &&args[i]!=null){

                        ((Connection)args[i]).close();

                }

                //判斷是不是結(jié)果集

                if(args[i] instanceof ResultSet

                        &&args[i]!=null){

                        ((ResultSet)args[i]).close();

                }

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }


    /**

     * 

     * @Title: update  

     * @Description: TODO(更新數(shù)據(jù))  

     * @param @param sql語(yǔ)句

     * @param @param args

     * @param @return    設(shè)定文件  

     * @return int    返回類(lèi)型  

     * @throws

     */

    public static int update(String sql,String... args){

        int row=0;

        //獲取驅(qū)動(dòng)

        Connection connection = getConnection();

        PreparedStatement ps =null;

        try {

            if(sql==null||sql.equals("")){

                return row;

            }else{

                //sql語(yǔ)句預(yù)處理

                ps =connection.prepareStatement(sql);

                //賦值

                for (int i = 0; i < args.length; i++) {

                    ps.setObject(i+1, args[i]);

                }

                row = ps.executeUpdate();

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }finally{

            closeDb(ps,connection);

        }

        return row;

    }


    /**

     * 

     * @Title: getResult  

     * @Description: TODO(查詢(xún)數(shù)據(jù))  

     * @param @param cls

     * @param @param sql語(yǔ)句

     * @param @param args

     * @param @return    設(shè)定文件  

     * @return ArrayList<T>    返回類(lèi)型  

     * @throws

     */

    public static <T>ArrayList<T> getResult(Class<T> cls,String sql,String... args){

        ArrayList<T> list = new ArrayList<T>();

        Connection connection = getConnection();

        PreparedStatement ps = null;

        ResultSet resultSet=null;

        try {

            if(sql==null||sql.equals("")){

                return null;

            }

            ps =connection.prepareStatement(sql);

            if(args!=null){

                for (int i = 0; i < args.length; i++) {

                    ps.setObject(i+1, args[i]);

                }

                //執(zhí)行查詢(xún)方法

                resultSet = ps.executeQuery();

                //獲取結(jié)果集結(jié)構(gòu)

                ResultSetMetaData metaData = resultSet.getMetaData();

                //獲取列數(shù)

                int columnCount = metaData.getColumnCount();

                while (resultSet.next()) {

                    T t = (T)cls.newInstance();

                    for (int i = 0; i < columnCount; i++) {

                        Object val = resultSet.getObject(i+1);

                        String name =metaData.getColumnLabel(i+1);

                        Field Field = cls.getDeclaredField(name);

                        //暴力反射

                        if(!Modifier.isPublic(Field.getModifiers())){

                            Field.setAccessible(true);

                            Field.set(t,val);

                        }

                    }

                    list.add(t);

                }

            }

        } catch (SQLException e) {

            e.printStackTrace();

        } catch (InstantiationException e) {

            e.printStackTrace();

        } catch (IllegalAccessException e) {

            e.printStackTrace();

        } catch (NoSuchFieldException e) {

            e.printStackTrace();

        } catch (SecurityException e) {

            e.printStackTrace();

        } finally{

            closeDb(ps,connection,resultSet);

        }

        return list;


    }

    public static void main(String[] args) {

        /*String sql="UPDATE users SET username =? WHERE password=?";

        int update = update(sql,"event","123","123456789");

        int update = update(sql,"aaa","123");

        System.out.println(update);*/

        String sql="SELECT username,password,phone From users";

        ArrayList<Users> result = getResult(Users.class,sql);

        for (Users users : result) {

            System.out.println(users.getUsername()+"\t"+users.getPassword()+"\t"+users.getPhone());

        }

    }

}

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

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

在上述對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查的過(guò)程中,可以發(fā)現(xiàn)其共性部分,即通用的流程:


  (1)創(chuàng)建Connection對(duì)象、SQL查詢(xún)命令字符串;


  (2)對(duì)Connection對(duì)象傳入SQL查詢(xún)命令,獲得PreparedStatement對(duì)象;


  (3)對(duì)PreparedStatement對(duì)象執(zhí)行executeUpdate()或executeQurey()獲得結(jié)果;


  (4)先后關(guān)閉PreparedStatement對(duì)象和Connection對(duì)象。


  可見(jiàn),使用JDBC時(shí),最常打交道的是Connection、PreparedStatement這兩個(gè)類(lèi),以及select中的ResultSet類(lèi)。

--------------------- 


標(biāo)簽: 數(shù)據(jù)庫(kù)
分享:
評(píng)論:
你還沒(méi)有登錄,請(qǐng)先