`

数据库基础入门(三)——通过JDBC对数据库进行增删改查操作

阅读更多

 

何谓JDBC

   JDK提供了一组API,让我们可以在java程序中连结到网络上的数据库,并执行SQL语句返回执行结果,这组API的应用我们通常称作JDBC技术;相关的API都在包java.sql.*下面。

    Connection对象,则是由java.sql.DriverManager类的静态方法getConnection(…)得到,一但应用程序中得取一个Connection对象,即应用程序与数据库创建立了连结。随后,我们就可以通过操作Connection对象,创建Statement对象以执行sql语句,或从执行结果返回的ResultSet中取得查询结果。

以下是具体代码实现:

1)  连接到数据库:

1
2
3
4
5
6
7
8
9
10
11
12
public Connection getConnection() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQ    LException{

     Connection conn = null;

     String url = "jdbc:mysql://localhost:3306/pets";//连接数据库的URL地址

     String username = "root";//连接数据库的用户名

     String password = "123456";//连接数据库的密码

     String driver = "com.mysql.jdbc.Driver";

     //加载驱动,然后再实例化驱动对象

     Class.forName(driver).newInstance();

     //建立连接对象

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

     return conn;

}

需要注意的是以下的几个参数,URL:本地用户localhost 端口号默认为3306 后面是数据库的名字。Username默认为root,密码就是你设置的数据库密码。DriverMySQL的驱动名应写成(驱动jar包要从www.mysql.org上下载):com.mysql.jdbc.Driver

如果是没有加载驱动将会出现找不到驱动的错误:

找不到驱动.png

2)使用预编译sql

数据库处理SQL语句时,需要一个预编译过程,数据库可以把一些格式固定的SQL编译后,存入在其内存池中,再次执行时即直接使用,不再执行预编译过程,这样可以有效提高数据库操作效率;我们可以通过预编译对象实现,如下代码示例:

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
//添加用户
   //username password mail添加的用户信息
   public void addMember(String username,String password,String mail){
     try{
        Connection con = this.getConnection();
        //定义SQL语句
        String sql = "insert into user(username,password,mail) values(?,?,?)";
        //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
        PreparedStatement pstmt = con.prepareStatement(sql);
        
        //给每一个?占位符指定数据
        pstmt.setString(1, username);
        pstmt.setString(2, password);
        pstmt.setString(3, mail);
  
        int count = pstmt.executeUpdate();//执行并记录次数
        
        if(count>0){
           System.out.println("插入数据成功!影响的记录条数是"+count);
        }else{
           System.out.println("插入数据失败!");
        }
     }catch(Exception e){
        e.printStackTrace();
     }
}

    每一个问号代表了一个表中的数值。其中的:pstmt.setString(1, username);1代表的是第几个占位符,既不能多也不能重复使用。

    连结对象创建成功后,即可通过连结对象创建statement对象,以执行SQL语句。我们可将要执行的SQL语句分为两类,一类为需要返回结果表的select语句;一类为执行insertupdatedelete操作的语句,因用程序只需要这类语句返回操作所生效的行数即可;对于这两种SQL操作,Statement在执行时可采用不同的方法,如是select语句,则使用executeQuery(sql)方法返回一个ResultSet对象,其中包含查询到的数据;如是另外三种,则使用executeUpdate(sql)方法,返回一个int型值,代表语句所影响的行数,如下代码示例:

1
2
3
4
5
6
7
8
Statement stmt=conn.createStatement();
String deleteSQL="delete from post where id=2";
int t=stmt.executeUpdate(sql);
if(count>0){
                System.out.println("删除数据成功!影响的记录条数是"+count);
            }else{
                System.out.println("删除数据失败!");
            }

    一下是针对具体项目的完整代码:

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
214
215
216
217
218
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class Petsdb {
     
    public static void main(String[] args) {
        Petsdb db = new Petsdb();
        //查询
        db.queryMember("昭进");
        //添加
//      db.addMember("昭进","123456","123456");
        //删除字段
        db.delete_field();
        //增加字段
//      db.add_field();
        //删除用户
//      db.delete_user("昭进");
        //修改用户数据
//      db.update("new昭进", 1);
    }
    /**
     * 获取链接对象
     * @return connection对象
     */
    public Connection getConnection() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
        Connection conn = null;
        String url = "jdbc:mysql://localhost:3306/pets";//连接数据库的URL地址
        String username = "root";//连接数据库的用户名
        String password = "123456";//连接数据库的密码
        String driver = "com.mysql.jdbc.Driver";
         
        //加载驱动,然后再实例化驱动对象
        Class.forName(driver).newInstance();
        //建立连接对象
        conn = DriverManager.getConnection(url, username, password);
        return conn;
    }
     
    /**
     * 添加用户
     * @param username用户名
     * @param password密码
     * @param mail邮箱
     */
    public void addMember(String username,String password,String mail){
        try{
            Connection con = this.getConnection();
            //定义SQL语句
            String sql = "insert into user(username,password,mail) values(?,?,?)";
            //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
            PreparedStatement pstmt = con.prepareStatement(sql);
             
            //给每一个?占位符指定数据
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            pstmt.setString(3, mail);
 
            int count = pstmt.executeUpdate();//执行并记录次数
             
            if(count>0){
                System.out.println("插入数据成功!影响的记录条数是"+count);
            }else{
                System.out.println("插入数据失败!");
            }
             
        }catch(Exception e){
            e.printStackTrace();
        }
    }
     
    /** 
     * 查询用户
     * @param condition 查询条件
     */
    public void queryMember(String condition){
        try{
            Connection con = this.getConnection();
            //定义SQL语句
            String sql2 = "select * from user where username = ?";
             
//          //获取拼接SQL的执行对象
//          Statement stmt = con.createStatement();
//          //执行拼接SQL语句返回一个结果集对象
//          ResultSet rs = stmt.executeQuery(sql1);
             
            //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
            PreparedStatement pstmt = con.prepareStatement(sql2);
             
            //给每一个?占位符指定数据
            pstmt.setString(1, condition);
             
            ResultSet rs = pstmt.executeQuery();//执行
             
            System.out.println("id     username    password    mail");
            while(rs.next()){//检测是否还有下一条记录
                int id = rs.getInt("id");
                String username = rs.getString("username");
                String password = rs.getString("password");
                String mail = rs.getString("mail");
                 
                System.out.println(id+"          "+username+"                     "+password+"    "+mail);
            }
             
        }catch(Exception e){
            e.printStackTrace();
        }
    }
     
    /**
     * 删除字段
     */
    public void delete_field(){
        try{
            Connection con = this.getConnection();
            //定义SQL语句
            String sql = "alter table user drop sex";
            //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
            PreparedStatement pstmt = con.prepareStatement(sql);
             
            int count = pstmt.executeUpdate();//执行并记录次数
             
            //判断如何执行成功?pstmt.executeUpdate();只返回被影响行数 count=0;
//          if(count>0){
//              System.out.println("删除字段成功!影响的记录条数是"+count);
//          }else{
//              System.out.println("删除字段失败!"+count);
//          }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
     
        /**
         * 添加字段  
         */
        public void add_field(){
            try{
                Connection con = this.getConnection();
                //定义SQL语句
                String sql = "alter table user add sex boolean";
                //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
                PreparedStatement pstmt = con.prepareStatement(sql);
                 
                int count = pstmt.executeUpdate();//执行并记录次数
                 
                //判断如何执行成功?pstmt.executeUpdate();只返回被影响行数 count=0;
//              if(count>0){
//                  System.out.println("添加字段成功!影响的记录条数是"+count);
//              }else{
//                  System.out.println("添加字段失败!"+count);
//              }
            }catch(Exception e){
                e.printStackTrace();
            }
        }
     
    /**
     * 删除用户
     * @param username 用户名
     */
    public void delete_user(String username){
        try{
            Connection con = this.getConnection();
            //定义SQL语句
            String sql = "delete from user where username = ?";
            //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
            PreparedStatement pstmt = con.prepareStatement(sql);
             
            //给每一个?占位符指定数据
            pstmt.setString(1, username);
             
            int count = pstmt.executeUpdate();//执行并记录次数
             
            if(count>0){
                System.out.println("删除数据成功!影响的记录条数是"+count);
            }else{
                System.out.println("删除数据失败!");
            }
             
        }catch(Exception e){
            e.printStackTrace();
        }
    }
     
    /**
     * 修改用户资料
     * @param username用户名
     * @param id用户id
     */
    public void update(String username,int id){
        try{
             
            Connection con = this.getConnection();
            //定义SQL语句
            String sql = "update user set username = ? where id = ?";
            //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
            PreparedStatement pstmt = con.prepareStatement(sql);
            //给每一个?占位符指定数据
            pstmt.setString(1, username);
            pstmt.setInt(2, id);
             
            int count = pstmt.executeUpdate();//执行并记录次数
             
            if(count>0){
                System.out.println("修改数据成功!影响的记录条数是"+count);
            }else{
                System.out.println("修改数据失败!");
            }
             
        }catch(Exception e){
            e.printStackTrace();
        }
    }
     
}

 

 

 

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics