首页 > 技术文章 > JDBC操作MySQL数据库案例

fengmingyue 2016-11-07 20:17 原文

JDBC操作MySQL数据库案例

 1 import java.sql.Connection;
 2 import java.sql.DriverManager;
 3 import java.sql.PreparedStatement;
 4 import java.sql.ResultSet;
 5 import java.sql.Statement;
 6 
 7 import org.junit.Test;
 8 
 9 public class JDBCTest {
10     @Test
11     public void test() throws Exception {
12         Connection con = null;//定义引用
13         Statement stmt = null;
14         ResultSet rs = null;
15         //规范的代码格式,try catch finally
16         try {
17             String driverClassName = "com.mysql.jdbc.Driver";
18             String url = "jdbc:mysql://localhost:3306/exam";
19             String username = "root";
20             String password = "123";
21             
22             Class.forName(driverClassName);                                //加载
23             con = DriverManager.getConnection(url, username, password);    //连接
24             stmt = con.createStatement();                                //可以理解为创建SQL语句发射器
25             
26             //executeUpdate方法,可以执行增删改语句(INSERT, UPDATE, DELETE),返回被改变的记录条数
27             String sql="DELETE FROM stu";
28             int r = stmt.executeUpdate(sql);            
29             System.out.println("共删除了"+r+"条记录!");         
30             
31             //executeQuery方法,用于执行查询操作(SELECT),返回结果集
32             String sql2="select * from emp";
33             rs = stmt.executeQuery(sql2);                
34             while(rs.next()) {                            //把光标向下移动一行,并判断下一行是否存在!
35                 int empno = rs.getInt(1);                //通过列编号来获取该列的值!
36                 String ename = rs.getString("ename");    //通过列名称来获取该列的值
37                 double sal = rs.getDouble("sal");
38                 System.out.println(empno +  ", " + ename + ", " + sal);
39             }
40         } catch(Exception e) {
41             throw new RuntimeException(e);
42         } finally {
43             // 一定要关闭!!!!!!
44             if(rs != null) rs.close();
45             if(stmt != null) stmt.close();
46             if(con != null) con.close();
47         }
48     }
49     @Test
50     /**
51      * 预处理方式
52      * 优点:灵活,效率高,防SQL攻击
53      * SQL攻击例子:
54      *   若:sql = "select * from t_user where username='" + username + "' and password='" + password + "'";
55      *   username = "a' or 'a'='a";
56      *     password = "a' or 'a'='a";
57      *     最后拼成的语句为:
58      *  select * from t_user where username='a' or 'a'='a" and password='a' or 'a'='a'
59      *  永远为true。
60      */
61     public void test2() throws Exception {
62         Connection con = null;//定义引用
63         ResultSet rs = null;
64         PreparedStatement pstmt=null;
65         try {
66             String driverClassName = "com.mysql.jdbc.Driver";
67             //mysql默认预处理是关闭的,加上这两个参数之后可以开启预处理
68             String url = "jdbc:mysql://localhost:3306/exam?useServerPrepStmts=true&cachePrepStmts=true";
69             String username = "root";
70             String password = "123";
71             Class.forName(driverClassName);                                
72             con = DriverManager.getConnection(url, username, password);    
73             
74             String sql="select * from emp where empno=? and job=?";
75             pstmt = con.prepareStatement(sql);
76             pstmt.setInt(1, 1001);
77             pstmt.setString(2, "文员");
78             rs =pstmt.executeQuery();
79             if(rs.next())
80             {
81                 System.out.println(rs.getString("ename"));
82             }
83         } catch(Exception e) {
84             throw new RuntimeException(e);
85         } finally {
86             if(rs != null) rs.close();
87             if(pstmt != null) pstmt.close();
88             if(con != null) con.close();
89         }
90     }
91 }
View Code

 

推荐阅读