好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

JAVA jdbc(数据库连接池)学习笔记(一)

1.JDBC的含义...

JDBC想必学过JAVA的就不会陌生,JDBC到底是什么呢?其实就是由JAVA的一些类和接口构成的API,保存在java.sql和javax.sql..包中的一些API...

2.使用JDBC的原因...

  那么为什么要使用,这个想必大家也是更为了解了,一个应用程序如果不和数据库进行连接,那这根本就不算是个应用程序,那么应用程序是不能直接对数据库进行操作的,那么就需要一个辅助工具去连接数据库,从而操作数据库...那这个辅助的工具就是JDBC了,这个仅限于JAVA应用程序...其实总体的规模就是这样:应用程序——>JDBC——>(mysql driver——>mysql)

                       JDBC——>(oracle driver——>oracle)

                       JDBC——>(DB2 driver——>db2)就是这么简单的事...多余的就不罗嗦了...

3.如何使用JDBC...

如何使用JDBC,才是真正的重点...使用JDBC分为几个步骤...

我这里只对链接mysql进行讲解...

i.首先注册驱动

Class.forName("com.mysql.Driver"); //  这种方式是最好的,不会对具体驱动产生依赖... 
DriverManager.registerDriver(com.mysql.jdbc.Driver); //  会产生两个相同的驱动,并会对具体驱动产生依赖... 
System.setProperty("jdbc.drivers","driver1:driver2"); //  基本不常用,所以可以不用记,一般就使用第一种就行了... 

ii.建立连接

Connection conn = DriverManager.getConnection(url, user, password);  

iii.创建执行SQL语句...

Statement st =  conn.createStatement();  
st.executeQuery(sql);  
PreparedStatement  
String sql  = "select * from table_name where col_name=?" ;  
PreparedStatement ps  =  conn.preparedStatement(sql);  
ps.setString( 1, "col_value" );  
ps.executeQuery();   

iv.处理执行结果...

    ResultSet rs =  statement.executeQuery(sql);  
    While(rs.next()){  
    rs.getString([col_name]);  
    rs.getInt([col_name]);   
    }  

v.释放资源...

释放资源这是必须的,使用close()进行关闭...由于数据库的资源是非常珍贵的,因此只要我们不去使用资源的时候,一定要记得释放...

先来个例子:还是例子更加的好理解...

 import  java.sql.*; //  1.引包是必须的... 

 public   class   JDBC_1_1 {
      static   final  String JDBC_DRIVER="com.mysql.jdbc.Driver" ;
      static   final  String DB_URL ="jdbc:mysql://localhost:3306/emp"; //  这个链接是我本机的数据库emp...emp里有个表格叫employees.... 
     /*  表格的信息
     *create table employees
     *(
     *    id int not null,
     *    first varchar(255) not null,
     *    last varchar(255) not null,
     *    age int not null
     *);
       */ 
     static   final  String USER="root"; //  登陆数据库时的用户名... 
     static   final  String PAS="49681888" ;登陆时的密码...
      public   static   void   main(String[] args) {
          //   TODO Auto-generated method stub 
        Connection conn= null  ;
        Statement stmt = null ; //
          try   {
              //  2.注册JDBC驱动程序... 
            Class.forName("com.mysql.jdbc.Driver" );
              //  3.打开一个链接... 
            System.out.println("Connection database...." );
            conn = DriverManager.getConnection(DB_URL,USER,PAS);

              //  4.执行一个操作... 
            System.out.println("Creating statement" );
            stmt = conn.createStatement();
  //            String sql;
  //            sql="select id,first,last,age from employees"; 这个是查询操作...
  //            ResultSet rs=stmt.executeQuery(sql); 
            String sql_1="insert into employees " + "values (7, ‘z‘, ‘yh‘, 20)"; //  插入操作... 
             stmt.executeUpdate(sql_1); 
            
            
             5 .提取数据...
  //            while(rs.next()){    //  rs用来保存sql执行后的结果...
  //                int id=rs.getInt("id");
  //                int age=rs.getInt("age");
  //                String first=rs.getString("first");
  //                String last=rs.getString("last");    
 //                System.out.println(id+" "+age+" "+first+" "+last);
  //            }
              6.清理环境
  //            rs.close(); 
             stmt.close();
            conn.close();
        }   catch   (Exception e) {
              //   TODO Auto-generated catch block 
             e.printStackTrace();
            System.out.println( "no class" );
        }  finally  {
              if (stmt!= null  ){
                  try   {
                    stmt.close();
                }   catch   (SQLException e) {
                      //   TODO Auto-generated catch block 
                     e.printStackTrace();
                }
            }
              if (conn!= null  ){
                  try   {
                    conn.close();
                }   catch   (SQLException e) {
                      //   TODO Auto-generated catch block 
                     e.printStackTrace();
                }
            }
        }
        System.out.println( "Goodbye" );
    }

} 

其他操作,比如说删除啊,更改啊,这个模式基本都差不多...就不进行解释了...

  注意:如果我们使用JDBC的时候,一定要检查检查自己的的jdk的lib文件夹下有没有mysql-connector-java-5.1.18-bin.jar这个压缩文件..如果没有,那么程序运行时会出现错误...解决方法就是我们下一个mysql-connector-java-5.1.18-bin.jar这个文件,几k而已,下载完毕之后直接拷贝到jdk的lib文件夹下即可..

  如果使用的是eclipse,我们还要导入这个文件...右击我们建立的项目文件,然后点击build path——>configure build path,弹出对话框以后,点击Libraries——>Add External JARs...找到这个 mysql-connector-java-5.1.18-bin.jar 文件导入,然后就可以了...

4.使用JDBC实现CURD操作...什么是CURD操作呢?其实就是对数据进行更新,删除等操作...

这里我们采用分层操作...这个代码很长...

首先是User实体...

 package   JDBC_3;
  import   java.util.Date;
  class  User{             //  user类.. 
     private   int   id;
      private   String name;
      private   Date birthday;
      private   float   money;
      public   User(){
    }
      public  User( int  id,String name,Date birthday, float   money){
          this .id= id;
          this .name= name;
          this .birthday= birthday;
          this .money= money;
    }
      public   int   getid(){
          return   id;
    }
       public   void  setId( int   id) {  
              this .id =  id;  
        }  
          public   String getName() {  
              return   name;  
        }  
          public   void   setName(String name) {  
              this .name =  name;  
        }  
          public   Date getBirthday() {  
              return   birthday;  
        }  
          public   void   setBirthday(Date birthday) {  
              this .birthday =  birthday;  
        }  
          public   float   getMoney() {  
              return   money;  
        }  
          public   void  setMoney( float   money) {  
              this .money =  money;  
        }  
      
        @Override  
          public   String toString(){  
              return  "[id="+id+",name="+name+",birthday="+birthday+",money="+money+"]" ;  
        }  
} 

接着是我们的Dao层,就是接口...

 package   JDBC_3;

  interface   UserDao{
      public   abstract   void   addUser(User user);
      public   abstract  User getUserById( int   userid);
      public   abstract   int   update(User user);
      public   abstract   int   delete(User user);
} 

然后是实现接口的类...

 package   JDBC_3;
  import   java.sql.Connection;
  import   java.sql.DriverManager;
  import   java.sql.PreparedStatement;
  import   java.sql.SQLException;
  import   java.sql.Date;
  import   java.sql.ResultSet;
  /*  
 * JDBC实现crud操作
 * crud操作就是对数据进行增删改查...
 *   */ 
 public   class  JDBC_3_1_server  implements   UserDao{
      static   final  String DB_URL="jdbc:mysql://localhost:3306/emp" ;
      static   final  String user_1="root" ;
      static   final  String pas="49681888" ;
      static  {
          try   {
            Class.forName( "com.mysql.jdbc.Driver" );
        }   catch   (ClassNotFoundException e) {
              //   TODO Auto-generated catch block 
             e.printStackTrace();
        }
    }
      public   void   addUser(User user){
        Connection cn = null  ;
        PreparedStatement ps = null  ;
          try   {
            cn = DriverManager.getConnection(DB_URL,user_1,pas);
            String sql ="insert into userr values(2,‘clearlove‘,‘1995-01-26‘,200)" ;
              //  String sql="insert into userr values(?,?,?,?)";这句话是传参数是未知的,需要我们进行获取... 
            ps= cn.prepareStatement(sql);
              //  这四个函数就是为了获取我们插入的信息...上面采用了直接在sql里写入我们要插入的数据,其实我们也可以在主函数里进行传参...见下面主函数...
  //              ps.setInt(1,user.getid());
  //              ps.setString(2,user.getName());
  //              ps.setDate(3, new Date(user.getBirthday().getTime()));
  //              ps.setFloat(4, 20); 
             int  count= ps.executeUpdate();
            System.out.println( "添加的记录数"+ count);
            ps.close();
            cn.close();
            
        }   catch   (Exception e) {
              //   TODO Auto-generated catch block 
             e.printStackTrace();
            
        }  finally  {
              if (ps!= null  ){
                  try   {
                    ps.close();
                }   catch   (SQLException e) {
                      //   TODO Auto-generated catch block 
                     e.printStackTrace();
                }  finally  {
                      if (cn!= null  ){
                          try   {
                            cn.close();
                        }   catch   (SQLException e) {
                              //   TODO Auto-generated catch block 
                             e.printStackTrace();
                        }
                    }
                }
            }
        }
        
    }
      public  User getUserById( int   userid){
        Connection cn = null  ;
        PreparedStatement ps = null  ;
        ResultSet rs = null  ;
          try   {
            cn = DriverManager.getConnection(DB_URL,user_1,pas);
            String sql ="select * from userr where id=1" ;
              //  导入sql语句... 
            ps= cn.prepareStatement(sql);
              //  保存执行sql语句后的结果对象... 
            rs= ps.executeQuery();
            ps.close();
            cn.close();
            rs.close();
        }   catch   (Exception e) {
              //   TODO Auto-generated catch block 
             e.printStackTrace();
        }  finally  {
              if (ps!= null  ){
                  try   {
                    ps.close();
                }   catch   (SQLException e) {
                      //   TODO Auto-generated catch block 
                     e.printStackTrace();
                }
            }
              if (rs!= null  ){
                  try   {
                    rs.close();
                }   catch   (SQLException e) {
                      //   TODO Auto-generated catch block 
                     e.printStackTrace();
                }
            }
              if (cn!= null  ){
                  try   {
                    cn.close();
                }   catch   (SQLException e) {
                      //   TODO Auto-generated catch block 
                     e.printStackTrace();
                }
            }
        }
          return   null  ;
    }
      public   int   update(User user){
        Connection cn = null  ;
        PreparedStatement ps = null  ;
          try   {
            cn = DriverManager.getConnection(DB_URL,user_1,pas);
            String sql ="update userr set name=‘clearlove‘,birthday=‘1994-12-19‘,money=60 where id=1" ;
            ps = cn.prepareStatement(sql);
              int  count= ps.executeUpdate();
              return   count;
        }   catch   (SQLException e) {
              //   TODO Auto-generated catch block 
             e.printStackTrace();
        }  finally  {
              try   {
                cn.close();
                ps.close();
            }   catch   (Exception e) {
                  //   TODO Auto-generated catch block 
                 e.printStackTrace();
            }
        }
          return  0 ;
    }
      public   int   delete(User user){
        Connection cn = null  ;
        PreparedStatement ps = null  ;
          try   {
            cn = DriverManager.getConnection(DB_URL,user_1,pas);
            String sql ="delete from userr where id=1" ;
            ps = cn.prepareStatement(sql);
              int  count=-1 ;
            count = ps.executeUpdate();
              return   count;
        }   catch   (SQLException e) {
              //   TODO Auto-generated catch block 
             e.printStackTrace();
        }  finally  {
              try   {
                cn.close();
                ps.close();
            }   catch   (Exception e) {
                  //   TODO Auto-generated catch block 
                 e.printStackTrace();
            }        
        }
          return  0 ;
    }
} 

接着是服务层...

 package   JDBC_3;
  class   userserves {
    
      private   UserDao userDao;
      public   userserves(){
        userDao  =DaoFactory.getInstance().createUserDao(); //  通过工厂实例化一个例子。。 
        System.out.println("userDao "+ userDao);
    }
    
      public   void   regist(User user){
          if (user== null  ){
            System.out.println( "注册表信息无效..." );
        }  else  {
            userDao.addUser(user);
        }
    }
    
      public  User query( int   userId){  
        User user  =  userDao.getUserById(userId);  
          if (user ==  null  ){  
            System.out.println( "查询结果为空!!" );  
        }  else  {  
            System.out.println(user.getid() +"\t"+user.getName()+"\t"+user.getBirthday()+"\t"+ user.getMoney());  
        }  
          return   userDao.getUserById(userId);  
    }  
    
      public   void   update(User user){
          if (user.getid()<0 ){
            System.out.println( "用户id无效,重新输入" );
        }  else  {
            userDao.update(user);
        }
    }
    
      public   void   delete(User user){
          if (user.getid()<0 ){
            System.out.println( "用户id无效,重新输入" );
        }  else  {
            userDao.delete(user);
        }
    }
} 

定义一个工厂模式来实例化对象UserDao。。。

 package   JDBC_3;
  class   DaoFactory{
      private   static  UserDao userdao= null  ;
      private   static  DaoFactory instance=  new   DaoFactory();
      private   DaoFactory(){
          try   {
            userdao =(UserDao)Class.forName("JDBC_3.JDBC_3_1_server" ).newInstance();
        }   catch   (Exception e) {
              //   TODO Auto-generated catch block 
             e.printStackTrace();
        } 
    }
      public   static   DaoFactory getInstance(){
          return   instance;
    }
      public   UserDao createUserDao(){
          return   userdao;
    }
} 

最后是测试类...

 package   JDBC_3;
  import   java.sql.Date;
  public   class   JDBC_3_1_ceshi {

      public   static   void   main(String[] args) {
          //   TODO Auto-generated method stub 
        userserves userse= new   userserves();
        System.out.println( "添加用户" );
        userse.regist(  new  User());  //  这句话我们也可以这样
          //  userse.regist(new User(1,"clearlove","1995-01-26",300));这样写我们可以固定传参...但是上面的一些代码就要进行修改了... 
     }

} 

上面的代码估计是有点长,但是也没关系...一名优秀的程序员这点代码对于我们来说算什么呢?其实上面的例子是很好理解的...都是一些基本的东西...

我们除了上述那种方式可以对类名进行加载,我们还可以使用proprties...是一种很灵活的方式...

 private   DaoFactory(){  
          /**   
         * 通过读取属性文件来动态的加载Dao层类 
           */    
        Properties prop  =  new   Properties();  
          try  {  
            FileInputStream fis  =  new  FileInputStream("src/com/weijia/domain/daoconfig.properties" );  
            prop.load(fis);  
            String className  = prop.getProperty("userDaoClass" );  
            Class <?> clazz =  Class.forName(className);  
            userDao  =  (UserDao)clazz.newInstance();  
            fis.close();  
        }  catch  (Exception e){    
        }  
    }   

这里的数据库就是一个简单的数据库...

 create   table   userr
( 
    id   int   not   null  ,
    name   varchar ( 255 )  not   null  ,
    birthday Date,
      money   float   not   null  
); 

 

JAVA jdbc(数据库连接池)学习笔记(一)

标签:

查看更多关于JAVA jdbc(数据库连接池)学习笔记(一)的详细内容...

  阅读:22次