一、JDBC的主要作用:用Java代码来操作数据库(oracle,mySQL)

1、数据的添加

2、数据的删除

3、数据的更新

4、数据的查询

5、事物

二、编写JDBC的步骤

1、加载驱动——不同的数据库加载不同的驱动。

2、获取数据库连接  connection

3、构建statement 或者preparedstatement 对象   ——执行的SQL

4、执行SQL语句 ——返回结果

5、解析结果

6、关闭statement 或者preparedstatement对象和连接

实现代码如下:

 1 public class last 
 2 {
 3     public static void main(String[] args)
 4     {
 5         Connection conn = null;
 6         PreparedStatement ptem = null;
 7         ResultSet resu = null;
 8         
 9         try {
10             //1、加载驱动——固有写法
11             Class.forName("oracle.jdbc.driver.OracleDriver");
12             //2、连接数据库——固有写法
13             String url = "jdbc:oracle:thin:@localhost:1521:orcl";
14             conn = DriverManager.getConnection(url, "scott", "sbc111");
15             System.out.println(conn);
16             //3、构建preparedstatement对象执行SQL语句
17             String sql = "select empno,ename,job,mgr from emp";
18             ptem = conn.prepareStatement(sql);
19             //4、执行SQL语句
20             resu = ptem.executeQuery(sql);
21             //5、用while遍历 来解析结果
22             while(resu.next())
23             {
24                 int a = resu.getInt("empno");
25                 String b = resu.getString("ename");
26                 String c = resu.getString("job");
27                 String d = resu.getString("mgr");
28                 //e = resu.getDate("hiredate");
29                 //resu.getInt("sal");
30                 //resu.getInt("comm");
31                 //resu.getString("deptno");
32                 
33                 System.out.println(a + " : " + b + " : " + c + " : " + d);
34             }
35             
36         } catch (ClassNotFoundException e) {
37             e.printStackTrace();
38         } catch (SQLException e) {
39             e.printStackTrace();
40         }finally //关闭资源
41         {
42             if(conn !=null)
43             {
44                 try {
45                     conn.close();
46                 } catch (SQLException e) {
47                     e.printStackTrace();
48                 }
49             }
50             if(ptem !=null)
51             {
52                 try {
53                     ptem.cancel();
54                 } catch (SQLException e) {
55                     e.printStackTrace();
56                 }
57             }
58             if(resu !=null)
59             {
60                 try {
61                     resu.close();
62                 } catch (SQLException e) {
63                     e.printStackTrace();
64                 }
65             }
66         }
67     }
68 }

 JDBC实现oracle分页

1、基于内存:

特点:运行速度快,但是非常占用资源,一般用在小数据

  1 public class JDBCSort 
  2 {
  3     /**
  4      * 
  5      * @param page 当前要显示的页数
  6      * @param pageSize 每页显示多少行
  7      * 编写步骤:
  8      *     1. 判断pageSize是否越界
  9      *  2. 判断page是否越界
 10      *  3. 创建一个可以滚动的Statement对象
 11      *  4. 执行sql语句
 12      *  5. 让结果集(ResultSet)里面的指针指向当前分页的第一行
 13      *  6. 往下next pageSize次获取当前分页要显示的所有行
 14      *  7. 关闭所有的资源
 15      * 
 16      * 
 17      */
 18     public static void getData(int page,int pageSize)
 19     {
 20         String sql = "select * from emp";
 21         String count = "select count(*) from emp";
 22         Connection conn = DBUtils.getConnection();
 23         int maxCount;
 24         PreparedStatement pstm = null;
 25         ResultSet set = null;
 26         Statement st = null;
 27         ResultSet set1 = null;
 28         try {
 29             pstm = conn.prepareStatement(count);
 30             set = pstm.executeQuery();
 31             maxCount = 0;
 32             while(set.next())
 33             {
 34                 maxCount = set.getInt(1);
 35             }
 36             
 37             //判断每页显示的行数是否越界
 38             if(pageSize < 10)
 39             {
 40                 pageSize = 10;
 41             }else if(pageSize > maxCount)
 42             {
 43                 pageSize = maxCount;
 44             }
 45             
 46             //计算当前的总条数可以分多少页
 47             if(maxCount % pageSize == 0)
 48             {
 49                 maxCount = maxCount/pageSize;
 50             }else
 51             {
 52                 maxCount = maxCount/pageSize + 1;
 53             }
 54             
 55             //判断page是否有越界
 56             if(page < 1)
 57             {
 58                 page = 1;
 59             }
 60             if(page > maxCount)
 61             {
 62                 page = maxCount; //如果传递过来的页数超过了最大的分页数,那么显示最后一页
 63             }
 64             
 65             /**
 66              * ResultSet.TYPE_SCROLL_INSENSITIVE 设置得到的结果集可以滚动显示
 67              * ResultSet.CONCUR_READ_ONLY : 设置结果集数据为只读
 68              */
 69             st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
 70             set1 = st.executeQuery(sql);
 71             
 72             set1.absolute((page-1)*pageSize + 1);// 定位到当前要显示也的第一行
 73             
 74             for(int i = pageSize; i > 0; i--)
 75             {
 76                 String ename = set1.getString("ename");
 77                 System.out.println(ename);
 78                 
 79                 if(!set1.next())// set1.next()如果没有下一行则返回false,然后在取反,终止循环
 80                 {
 81                     break;
 82                 }
 83             }
 84             
 85             
 86             /*//显示第十一行记录的员工名称
 87             set1.absolute(10); //直接指向结果集里面的某一行记录
 88             System.out.println(set1.getString("ename"));
 89             set1.next(); //指向结果集里面的下一行
 90             System.out.println(set1.getString("ename"));
 91             set1.previous(); // 指向上一行
 92             System.out.println(set1.getString("ename"));
 93             set1.relative(3);//相对于现在的位置移动3个位置
 94             System.out.println(set1.getString("ename"));*/
 95             
 96         } catch (SQLException e) {
 97             e.printStackTrace();
 98         }finally
 99         {
100             DBUtils.closeResultSet(set);
101             DBUtils.closeResultSet(set1);
102             DBUtils.closeStatement(st);
103             DBUtils.closePreparedStatement(pstm);
104             DBUtils.closeConnection(conn);
105         }
106         
107     }
108 }

 

2、基于数据库

特点:占用资源少,但是速度较内存蛮,而且跟数据库交互多,但是可以应对大数据

 1 public class JDBCSort1
 2 {
 3     /**
 4      * 编程步骤:
 5      *     1. 判断pageSize是否越界
 6      *  2. 判断page是否越界
 7      *  3. 计算当前页要显示的第一行和最后一行
 8      *  4. 设置参数,然后执行sql语句
 9      *  5. 解析结果
10      *  6. 关闭资源
11      * @param page
12      * @param pageSize
13      */
14     public static void getData(int page,int pageSize)
15     {
16         String sql = "select r,empno,ename from ( "
17                     +    " select rownum r,empno,ename from emp where rownum <= ? "
18                     +" ) where r>= ? ";
19         String count ="select count(*) from emp";
20         int countMax = 0;
21         Connection conn = DBUtils.getConnection();
22         PreparedStatement pstm = null;
23         ResultSet set = null;
24         try {
25             pstm = conn.prepareStatement(count);
26             set = pstm.executeQuery();
27             while(set.next())
28             {
29                 countMax = set.getInt(1);//得到总行数
30             }
31             DBUtils.closeResultSet(set);
32             DBUtils.closePreparedStatement(pstm);
33             
34             if(pageSize < 10)
35             {
36                 pageSize = 10;
37             }else if(pageSize > countMax)
38             {
39                 pageSize = countMax;
40             }
41             
42             //获取总分页数
43             if(countMax % pageSize == 0)
44             {
45                 countMax = countMax/pageSize;// 得到总分页数
46             }else
47             {
48                 countMax = countMax/pageSize + 1;
49             }
50             
51             if(page < 1)
52             {
53                 page = 1;
54             }else if(page > countMax)
55             {
56                 page = countMax;
57             }
58             
59             //就算当前页的起始位置和结束位置
60             int start = (page-1)*pageSize + 1;
61             int end = page*pageSize;
62             
63             pstm = conn.prepareStatement(sql);
64             pstm.setInt(1, end);
65             pstm.setInt(2, start);
66             
67             set = pstm.executeQuery();
68             while(set.next())
69             {
70                 System.out.println(set.getString("ename"));
71             }
72             
73         } catch (SQLException e) {
74             e.printStackTrace();
75         }finally
76         {
77             DBUtils.closeResultSet(set);
78             DBUtils.closePreparedStatement(pstm);
79             DBUtils.closeConnection(conn);
80         }
81     }
82 }