JDBC主要功能的代碼實現及工廠模式

 

存入和讀取大文本文件

publicclass ClobTest {

    publicstaticvoid main(String[] args)throws Exception{

       //create();

       read();

    }

//讀取大文本文件

    publicstaticvoid read()throws Exception{

       Connection conn=null;

       Statement st=null;

       ResultSet rs=null;

       try{

          conn=JDBCUtils.getConnection();

          String sql="select big_text from clob_text";

          st=conn.createStatement();

          rs=st.executeQuery(sql);

          while(rs.next()){

             File file=new File("JDBCUtils_bak.java");

             Writer writer=new BufferedWriter(new FileWriter(file));

             Reader reader=rs.getCharacterStream(1);

             char[] buf=newchar[1024];

             int len=0;

             while((len=reader.read(buf))!=-1){

                 writer.write(buf,0,len);

             }

             writer.close();

             reader.close();

          }

       }finally{

          JDBCUtils.free(conn,st, rs);

       }

    }

    //存入大文本文件

    publicstaticvoid create()throws Exception{

       Connection conn=null;

       PreparedStatement ps=null;

       ResultSet rs=null;

       try{

          conn=JDBCUtils.getConnection();

          String sql="insert into clob_text(big_text)values(?)";

          File file=new File("src/cn/itcast/jdbc/JDBCUtils.java");

          Reader reader=new BufferedReader(new FileReader(file));

          ps=conn.prepareStatement(sql);

          ps.setCharacterStream(1, reader);

          ps.executeUpdate();

       }finally{

          JDBCUtils.free(conn,ps, rs);

       }

    }

}

 

存入和讀取二進制類型的數據:

:blob的大小不能超過64K,若更大用longblob

//讀取二進制數據

package cn.itcast.jdbc;

public class BlobTest {

       public static void main(String[] args) throws Exception{

              read();

       }

       public static void read()throws Exception{

              Connection conn=null;

              Statement st=null;

              ResultSet rs=null;

              try{

                     conn=JDBCUtils.getConnection();

                     String sql="select blob_bit from blob_test";

                     st=conn.createStatement();

                     rs=st.executeQuery(sql);

                     while(rs.next()){

                            File file=new File("11.jpg");

                            OutputStream out=new BufferedOutputStream(new FileOutputStream(file));

                            InputStream in=rs.getBinaryStream(1);

             byte[] buf=newbyte[1024];

             intlen=0;

             while((len=in.read(buf))!=-1){

                 out.write(buf,0,len);

              }                          }

                            out.close();

                            in.close();

                     }

              }finally{

                     JDBCUtils.free(conn, st, rs);

              }

       }

//存入二進制數據

       public static void create()throws Exception{

              Connection conn=null;

              PreparedStatement ps=null;

              ResultSet rs=null;

              try{

                     conn=JDBCUtils.getConnection();

                     String sql="insert into blob_test(blob_bit)values(?)";

                     File file=new File("src/10.jpg");

                     InputStream in=new BufferedInputStream(new FileInputStream(file));

                     ps=conn.prepareStatement(sql);

                     ps.setBinaryStream(1, in,(int)file.length());

                     int i=ps.executeUpdate();

                     System.out.println(i);

              }finally{

                     JDBCUtils.free(conn, ps, rs);

              }

       }

}

JDBC抽出的工具類:

package cn.itcast.jdbc;

public final class JDBCUtils {

       private static final String url = "jdbc:mysql://localhost:3306/jdbc";

       private static final String user = "root";

       private static final String password = "admin";

     private JDBCUtils() {

       }

       static {

              try {

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

              } catch (ClassNotFoundException e) {

                     throw new ExceptionInInitializerError(e);

              }

       }

       public static Connection getConnection() throws SQLException {

              return DriverManager.getConnection(url, user, password);

       }

       public static void free(Connection conn, Statement st, ResultSet rs) {

              try {

                     if (rs != null) {

                            rs.close();

                     }

              } catch (SQLException e) {

                     e.printStackTrace();

              } finally {

                     try {

                            if (st != null) {

                                   st.close();

                            }

                     } catch (SQLException e) {

                            e.printStackTrace();

                     } finally {

                            try {

                                   if (conn != null) {

                                          conn.close();

                                   }

                            } catch (SQLException e1) {

                                   e1.printStackTrace();

                            }

 

                     }

              }

       }

}

接口類:

package cn.itcast.jdbc.dao;

import cn.itcast.jdbc.domain.User;

publicinterface UserDao {

    publicvoid addUser(User user);

    public User getUser(int userId);

    publicvoid update(User user);

    publicvoid delete(intuserId);

}

實現類

package cn.itcast.jdbc.dao.impl;

publicclass UserDaoJdbcImplimplements UserDao{

    @Override

    publicvoid addUser(User user) {

       Connection conn=null;

       PreparedStatement ps=null;

       ResultSet rs=null;

       try{

          conn=JDBCUtils.getConnection();

          String sql="insert into user(id,name,birthday,money)values(?,?,?,?)";

          ps=conn.prepareStatement(sql);

          ps.setInt(1, user.getId());

          ps.setString(2, user.getName());

          ps.setDate(3,new java.sql.Date(user.getBirthday().getTime()));

          ps.setFloat(4, user.getMoney());

          ps.executeUpdate();

       }catch(SQLException e){

          thrownew DaoException(e.getMessage(),e);

       }finally{

          JDBCUtils.free(conn, ps, rs);

       } 

    }

    @Override

    public User getUser(int userId) {

       Connection conn=null;

       PreparedStatement ps=null;

       ResultSet rs=null;

       User user=null;

       try{

          conn=JDBCUtils.getConnection();

          String sql="select id,name,birthday,money from user where id=?";

          ps=conn.prepareStatement(sql);

          ps.setInt(1, userId);

          rs=ps.executeQuery();      

          while(rs.next()){

             user=new User();

             user.setId(rs.getInt("id"));

             user.setName(rs.getString("name"));

             user.setBirthday(rs.getDate("birthday"));

             user.setMoney(rs.getFloat("money"));

          }        

       }catch(SQLException e){

          thrownew DaoException(e.getMessage(),e);

       }finally{

          JDBCUtils.free(conn, ps, rs);

       }

       return user;     

    }

    @Override

    publicvoid update(User user) {

       Connection conn=null;

       PreparedStatement ps=null;

       ResultSet rs=null;

       try{

          conn=JDBCUtils.getConnection();

          String sql="update user set id=?,name=?,birthday=?,money=?";

          ps=conn.prepareStatement(sql);

          ps.setInt(1, user.getId());

          ps.setString(2, user.getName());

          ps.setDate(3,new java.sql.Date(user.getBirthday().getTime()));

          ps.setFloat(4, user.getMoney());

       }catch(SQLException e){

          thrownew DaoException(e.getMessage(),e);

       }finally{

          JDBCUtils.free(conn, ps, rs);

       }      

    }

    @Override

    publicvoid delete(int userId) {

       Connection conn=null;

       PreparedStatement ps=null;

       ResultSet rs=null;

       try{

          conn=JDBCUtils.getConnection();

          String sql="delete from user where id=?";

          ps=conn.prepareStatement(sql);

          ps.setInt(1, userId);

          ps.executeUpdate();

       }catch(SQLException e){

          thrownew DaoException(e.getMessage(),e);    

       }finally{

          JDBCUtils.free(conn, ps, rs);

       }

    }

}

工廠模式:

UserDao userDao=DaoFactory.getInstance().getUserDao();

作用:降低對接口的依賴,使所有關於接口的改動只需要在配置文件改動!

工廠設計:

package cn.itcast.jdbc.dao;

publicclass DaoFactory {

    privatestatic UserDaouserDao=null;

    privatestatic DaoFactoryinstance=new DaoFactory();

//上兩句不能顛倒

    private DaoFactory(){

       try{

          Properties prop=new Properties();

          InputStream inStream=new FileInputStream(new File("src/daoconfig.properties"));

          prop.load(inStream);

          String userDaoClass=prop.getProperty("userDaoClass");

          userDao=(UserDao) Class.forName(userDaoClass).newInstance();         

       }catch(Throwable e){

          thrownewExceptionInInitializerError(e);

       }

    }

    public static DaoFactory getInstance(){

       returninstance;

    }

    publicstatic UserDao getUserDao(){

       returnuserDao;

    }

}

 

 

發佈了59 篇原創文章 · 獲贊 95 · 訪問量 59萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章