JDBC入门学习篇

                    学一个东西前,要知道它是什么,它有什么用,那么先来简单阐述下:

                    1、JDBC的简介

                          1) SUM公司针对java对数据库进行操作,开发出的一套标准接口,各个数据库只需要实现这个接口就可以了 ,

                                 这套标准的接口就是jdbc,而我们就要学习这套标准接口在java中是如何使用的。

                          2)安装数据库驱动,导入Jar包

                                不同的数据库厂商编写了各自实现jdbc接口的jar包,我们只需要导入jar包到项目里面,相当于安装了数据库的驱动

                                首先创建一个文件夹 lib,把jar包复制到lib里面,选中jar包右键点击build path -- add to build path,jar包前面的图标

                                变成了“奶瓶”图标,表示导入jar成功

                

                   2、JDBC中的常用接口和类

                         1.)DriverManager对象 (在java.sql包里面)   :它是用来加载数据库驱动的

                           方法:  加载驱动  

                                                              registerDriver(Driver driver) :参数是数据库的驱动,这个驱动是由数据库提供的

                                                             (1)这个方法在实际开发中,一般不使用,因为这个方法会加载驱动两次

                                                              (2)一般在开发中使用反射的方式加载数据库的驱动

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

                                      

                                      得到数据库的连接

                                                           getConnection(String url, String user, String password),返回Connection

                                                           参数:1.表示要连接的数据库 

                                                                         jdbc:mysql://数据库的ip:数据库的端口号/连接的数据库的名称     

                                                                     ( jdbc:mysql://localhost:3306/csdnData)

                                                                        2.表示连接数据库的用户名

                                                                        3.表示连接数据库的用户密码
                                      

                         2.)Connection对象(在java.sql包里面) :它代表数据库的连接,是接口

                            方法:创建statement对象

                                            createStatement()     返回 Statement 对象

                                       创建预编译对象 PreparedStatement

                                          prepareStatement(String sql)   返回 PreparedStatement 对象
                         

                        3.)Statement对象(在java.sql包里面):它是用来执行SQL的,是接口

                           方法:执行查询操作方法

                                        executeQuery(String sql)  返回查询的结果集对象 ResultSet

                                       执行增加 修改 删除的方法

                                        executeUpdate(String sql) ,返回成功的记录数  int

                                      执行sql语句的方法

                                       execute(String sql) ,返回是布尔类型 boolean

                                      执行批处理的方法

                                      addBatch(String sql):把多个sql语句放到批处理里面

                                      int[] executeBatch():执行批处理里面的所有的sql

                       4.)ResultSet对象(在java.sql包里面):代表查询之后返回的结果,是接口

                          方法:遍历结果集

                                         在最开始的时候在第一行之前,当执行了next方法之后,一行一行的向下进行遍历,

                                         在默认的情况下,只能向下,不能向上,在遍历出来的结果也是不能修改的

                                              next()

                                       得到数据的具体值

                                             string类型,使用getString("字段的名称")

                                             int类型,使用getInt("字段的名称")

                                             不知道类型,使用getObject("字段的名称")

           

            3.jdbc的释放资源    

               jdbc的操作会占用数据库资源,对此官方有一套标准的释放资源的代码写法

               关闭的原则:谁最先打开,谁最后关闭                


        //封装释放资源的代码
        
            public static void clearConn(Connection conn,Statement stmt,ResultSet rs) {
            
            if(rs != null) {
                
                try {
                
                    rs.close();
                
                } catch (Exception e) {
                    
                    e.printStackTrace();
                }
                
                rs = null;
            }
            if(stmt != null) {
                
                try {
                    
                    stmt.close();
                
                } catch (Exception e) {
                    
                    e.printStackTrace();
                }
                stmt = null;
            }
            
            if(conn != null) {
                
                try {
                
                    conn.close();
                } 
                catch (Exception e) {
                    
                    e.printStackTrace();
                }
                conn = null;
            }            
        }    
                

         4.jdbc工具类的封装

            1.)我使用ResourceBundle类 读取的配置文件 db.properties 里存储的数据库信息

               

             private static String driverName;//驱动名称
    
              private static String url;//数据库连接地址
    
               private static String userName;//用户名
    
               private static String userPassword;//密码
    
                private static final ResourceBundle RB= ResourceBundle.getBundle("db");
      
       /***
        * 静态代码块加载配置信息
        */
    
        static {
            
            driverName=RB.getString("drivername");
            
            url=RB.getString("url");
            
            userName = RB.getString("username");
            
            userPassword = RB.getString("password");
            
        }


            2.)写了一个获取数据库连接的方法

                 

        /**
         * 获得数据库连接
         */
        protected static Connection getConnection() {
            
            Connection conn = null;
            
            try{
                
                
                Class.forName(driverName);//加载驱动
                
                conn = DriverManager.getConnection(url, userName, userPassword);
                
            }
            catch(Exception e){
                
                e.printStackTrace();
            }
            
        
            return conn;
                
        }


          3).关闭数据库连接的方法

        

 ./***
         *  关闭数据库连接
         */
     
        protected static void clearConn(Connection conn,Statement stmt,ResultSet rs) {
        
            if(rs != null) {
                
                try {
                
                    rs.close();
                
                } catch (Exception e) {
                    
                    e.printStackTrace();
                }
                
                rs = null;
            }
            if(stmt != null) {
                
                try {
                    
                    stmt.close();
                
                } catch (Exception e) {
                    
                    e.printStackTrace();
                }
                stmt = null;
            }
            
            if(conn != null) {
                
                try {
                
                    conn.close();
                }
                catch (Exception e) {
                    
                    e.printStackTrace();
                }
                conn = null;
            }        
                        
        }    



       4).更新数据的方法

         

 public static int update(String strSql,List<Object> para){  //如果要执行不带参数的SQL更新,第二个参数可以传入null
           
            int rowCount = -1; //执行更新后被影响的行数
          
            Connection conn= null;//连接对象
          
            PreparedStatement stmt = null;//预编译对象
            
            try{
                
                conn= MyUtilsJDBC.getConnection(); //获得连接
                
                stmt= conn.prepareStatement(strSql);//预编译SQL语句
                
                if(para!=null){  //参数不为null时,循环参数集合,并设置值
                    
                    for (int i = 0; i < para.size(); i++) {
                        
                        stmt.setObject(i+1,para.get(i));
                    }
                }
                
                rowCount = stmt.executeUpdate();//执行操作,并返回受影响行数
                
            }
            catch(Exception e){
                
                e.printStackTrace();
            }
            finally{
                
                MyUtilsJDBC.clearConn(conn, stmt, null);//释放资源
            }
            
            return rowCount;//返回受影响行数
                
        }


       5).查询数据并返回一个集合的方法

         

 public static List<Map<String, Object>> query(String Strsql,List<Object> para) {//如果查询不带参数,该方法第二个参数可传入NULL
           
            List<Map<String, Object>> list = null; //返回的集合对象
           
            Connection conn= null;  //连接对象
           
            PreparedStatement stmt= null; //预编译对象
           
            ResultSet rs= null;   //结果集对象
           
            try {
               
                conn= MyUtilsJDBC.getConnection();//获得连接
               
                stmt= conn.prepareStatement(strSql); //预编译SQL
               
                if (para != null) {   //获得参数集合  并设置值
                  
                    for (int i = 0; i < para.size(); i++) {
                        
                        stmt.setObject(i + 1, para.get(i));
                    }
                }
                rs= stmt.executeQuery();  //执行查询操作,并返回结果集
              
                if (rs!= null) {
                  
                    list = new ArrayList<Map<String, Object>>();
    
                  
                    ResultSetMetaData rsmd= rs.getMetaData();// 获得结果集相关属性描述对象
    
               
                    int  rowColumn = rsmd.getColumnCount();    // 获得数据列的数量
    
               
                    while (rs.next()) {    // 循环遍历每一行数据,将行数据存进HashMap
    
                    
                        Map<String, Object> dataRow = new HashMap<String, Object>();   // 创建一个HashMap,以“键值对”的方式存储字段名和值
    
                    
                        for (int i = 1; i <= rowColumn; i++) {   // 循环获得每列数据的列名和值并放进HashMap
                         
                            dataRow.put(rsmd.getColumnName(i),rs.getObject(i));
                        }
                       
                  
                        list.add(dataRow);     // 向数据集合里添加一行数据
                    }
                }
            } catch (Exception e) {
               
                e.printStackTrace();
           
            } finally {
           
                MyUtilsJDBC.clearConn(conn, stmt, rs);//释放资源
            }
            return list;
        }



              

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值