Java jdbc相关

JDBC:java database connectivity --- SUN公司提供的一套操作数据库的标准规范。

JDBC与数据库驱动的关系:接口与实现的关系。

 

JDBC规范:

  DriverManager(类):用于注册驱动

  Connection(接口): 表示与数据库创建的连接

  Statement(接口): 操作数据库sql语句的对象

  ResultSet(接口): 结果集或一张虚拟表

 

实现JDBC操作

              //1、注册驱动

              //2、创建连接

              //3、得到执行sql语句的Statement对象

              //4、执行sql语句,并返回结果

              //5、处理结果

              //6、关闭资源

一  java.sql.DriverManager类:创建连接

  ① 注册驱动

    DriverManager.registerDiver(new com.mysql.jdbc.Driver()); 

    //不建议使用,原因: 导致驱动被注册两次 , 强烈依赖数据库的驱动jar

    解决办法:

    Class.forName("com.mysql.jdbc.Driver);

  ② 与数据库建立连接

   static Connection getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接。

    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/zzzz","root","pass");

二  java.sql.Connection 接口 是一个连接

  接口的实现在数据库驱动中, 所有与数据库交互都是基于连接对象的.

  Statement createStatement(); //创建操作sql语句的对象

  Statement stmt = conn.createStatement();

三  java.sql.Statement 接口 :操作sql语句,并返回相应结果的对象

  接口的实现在数据库驱动中, 用于执行静态sql语句并返回它所生成结果的对象

  ResultSet  executeQuery(String sql) 根据查询语句返回结果集。只能执行select语句。

   int executeUpdate(String sql) 根据执行的DML(insert update delete)语句,返回受影响的行数。

  boolean execute(String sql)  此方法可以执行任意sql语句。返回boolean值,表示是否返回ResultSet结果集。仅当执行select语句,且有返回结果时返回true, 其它语句都返回false;

四  java.sql.ResultSet 接口 : 结果集(客户端存表数据的对象)


 

 

jdbc初试


 1 package com.javaDemo.jdbcDemo;
 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 //使用JDBC技术实现查询数据库数据,并显示在控制台中
10 public class Demo1 {
11 
12     public static void main(String[] args) throws Exception {
13         Connection conn = null;
14         Statement stmt = null;
15         ResultSet rs = null;
16         try {
17             Class.forName("com.mysql.jdbc.Driver");
18             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/zzzz","root","");
19             stmt = conn.createStatement();
20             rs = stmt.executeQuery("select * from users");
21             //处理结果
22             while(rs.next()) {
23                 System.out.println(rs.getObject(1));
24                 System.out.println(rs.getObject(2));
25                 System.out.println(rs.getObject(3));
26                 System.out.println(rs.getObject(4));
27                 System.out.println(rs.getObject(5));
28                 System.out.println("----------------");
29             }
30         } catch (Exception e) {
31             e.printStackTrace();
32         } finally {                //关闭资源
33             if (rs!=null) {
34                 try {
35                     rs.close();
36                 } catch (Exception e) {
37                     e.printStackTrace();
38                 }
           rs=null;
39 } 40 if (stmt!=null) { 41 try { 42 stmt.close(); 43 } catch (Exception e) { 44 e.printStackTrace(); 45 } 46 stmt = null; 47 } 48 if (conn!=null) { 49 try { 50 conn.close(); 51 } catch (Exception e) { 52 e.printStackTrace(); 53 } 54 conn=null; 55 } 56 } 57 } 58 59 } 60

jdbc之CRUD(增删改查)
1.User.java
 1 package com.javaDemo.crud;
 2 
 3 public class User {
 4     private String user_id;
 5     private String first_name;
 6     private String last_name;
 7     public User() {
 8         super();
 9     }
10     public User(String user_id, String first_name, String last_name) {
11         this.user_id = user_id;
12         this.first_name = first_name;
13         this.last_name = last_name;
14     }
15     public String getUser_id() {
16         return user_id;
17     }
18     public void setUser_id(String user_id) {
19         this.user_id = user_id;
20     }
21     public String getFirst_name() {
22         return first_name;
23     }
24     public void setFirst_name(String first_name) {
25         this.first_name = first_name;
26     }
27     public String getLast_name() {
28         return last_name;
29     }
30     public void setLast_name(String last_name) {
31         this.last_name = last_name;
32     }
33     @Override
34     public String toString() {
35         // TODO Auto-generated method stub
36         return user_id + "---" +first_name +"--"+last_name;
37     }
38     
39 }
View Code

2.dbinfo.properties

3.DBUtils.java

 1 package com.javaDemo.util;
 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 import java.util.ResourceBundle;
 9 
10 public class DBUtils {
11     private static String driverClass;
12     private static String url;
13     private static String username;
14     private static String password;
15     static {
16         //此对象是用于加载properties文件数据的
17         ResourceBundle rb = ResourceBundle.getBundle("dbinfo");
18         driverClass = rb.getString("driverClass");
19         url = rb.getString("url");
20         username = rb.getString("username");
21         password = rb.getString("password");
22         try {
23             Class.forName(driverClass);
24         } catch (ClassNotFoundException e) {
25             e.printStackTrace();
26         }
27     }
28     //得到连接的方法
29     public static Connection getConnection() throws Exception {
30         return DriverManager.getConnection(url,username,password);
31     }
32     
33     //关闭资源的方法
34     public static void closeAll(ResultSet rs,Statement stmt,Connection conn) {
35         if (rs!=null) {
36             try {
37                 rs.close();
38             } catch (SQLException e) {
39                 e.printStackTrace();
40             }
41             rs = null;
42         }
43         if (stmt!=null) {
44             try {
45                 stmt.close();
46             } catch (SQLException e) {
47                 e.printStackTrace();
48             }
49             stmt=null;
50         }
51         if (conn!=null) {
52             try {
53                 conn.close();
54             } catch (SQLException e) {
55                 e.printStackTrace();
56             }
57             conn=null;
58         }
59     }
60 }
View Code

4.testCRUD.java

 1 package com.javaDemo.crud;
 2 
 3 import java.sql.Connection;
 4 import java.sql.ResultSet;
 5 import java.sql.Statement;
 6 import java.util.ArrayList;
 7 import java.util.List;
 8 
 9 import org.junit.Test;
10 
11 import com.itheima.util.DBUtils;
12 
13 public class TestCRUD {
14     @Test
15     public void testSelect() {
16         Connection conn = null;
17         Statement stmt = null;
18         ResultSet rs = null;
19         try {
20             conn = DBUtils.getConnection();
21             stmt = conn.createStatement();
22             rs = stmt.executeQuery("select * from users;");
23             List<User> list = new ArrayList<User>();
24             while (rs.next()) {
25                 User u = new User();
26                 u.setUser_id(rs.getString(1));
27                 u.setFirst_name(rs.getString(2));
28                 u.setLast_name(rs.getString(3));
29                 list.add(u);
30             }
31             for (User user : list) {
32                 System.out.println(user);
33                 System.out.println("-----------");
34             }
35         } catch (Exception e) {
36             e.printStackTrace();
37         } finally {
38             DBUtils.closeAll(rs, stmt, conn);
39         }
40         
41     }
42     
43     
44     @Test
45     public void testInsert() {
46         Connection conn = null;
47         Statement stmt = null;
48         
49         try {
50             conn = DBUtils.getConnection();
51             stmt = conn.createStatement();
52             int i = stmt.executeUpdate("INSERT INTO users VALUES(6,'hack','ME','abc','5555','2017',' 2016-11-25 12:54:34','12345');");
53             if (i>0) {
54                 System.out.println("success!");
55             }
56         } catch (Exception e) {
57             e.printStackTrace();
58         } finally {
59             DBUtils.closeAll(null, stmt, conn);
60         }
61         
62     }
63     
64     
65     @Test
66     public void testDelete() {
67         Connection conn = null;
68         Statement stmt = null;
69         
70         try {
71             conn = DBUtils.getConnection();
72             stmt = conn.createStatement();
73             int i = stmt.executeUpdate("DELETE FROM users WHERE user_id=6;");
74             if (i>0) {
75                 System.out.println("success!");
76             }
77         } catch (Exception e) {
78             e.printStackTrace();
79         } finally {
80             DBUtils.closeAll(null, stmt, conn);
81         }
82         
83     }
84 }
View Code

 *************

为了避免sql注入漏洞,需要使用PreparedStatement来代替Statement.

PreparedStatement的第一次执行消耗是很高的. 它的性能体现在后面的重复执行

posted @ 2017-03-29 03:30  Garvey  阅读(160)  评论(0编辑  收藏  举报