zoukankan      html  css  js  c++  java
  • 每日日报8月19日

    1.今天学习

    编写 DBBean.
    对数据库操作的基本过程如下:
    l         加载驱动程序;
    l         创建连接;
    l         编写SQL语句;
    l         创建语句对象;
    l         执行SQL语句;
    l         对结果进行处理;
    l         关闭相关对象。
    在上面的过程中,很多操作都是相同的,不同的方面包括:不同的功能需要编写不同的SQL语句,对结果的处理。
    对这个过程进行封装,得到下面的代码(封装的方式有很多种):
    package javabean;
     
    import java.sql.*;
    import java.util.*;
    public class DBBean {
           private Connection con;
           private PreparedStatement stmt;
           private ResultSet rs;
          
           // 获取连接对象
           public Connection getConnection() throws Exception{
                  if(con == null){
                         // 指出连接数据库所需要的驱动程序
                         Class.forName("oracle.jdbc.driver.OracleDriver");
     
                         // 建立与数据库之间的连接
                         con = DriverManager.getConnection(
                                       "jdbc:oracle:thin:@192.168.0.170:1521:fhdn", "scott",
                                       "tiger");
                  }
                  return con;
           }
          
           // 创建语句对象
           public PreparedStatement getStatement(String sql) throws Exception{
                  con = getConnection();
                  stmt = con.prepareStatement(sql);
                  return stmt;   
           }
          
           // 执行有结果集的查询
           public ResultSet executeQuery(String sql,ArrayList paras) throws Exception{
                  stmt = getStatement(sql);
                  if (paras != null) {
                         Object o[] = paras.toArray();
                         for (int i = 0; i < o.length; i++) {
                                if (o[i] instanceof String) {
                                       stmt.setString(i + 1, (String) o[i]);
                                }
                         }
                  }
                  return stmt.executeQuery();
           }
           // 执行没有结果集的查询
           public int executeUpdate(String sql,ArrayList paras) throws Exception{
                  stmt = getStatement(sql);
                  if (paras != null) {
                         Object o[] = paras.toArray();
                         for (int i = 0; i < o.length; i++) {
                                if (o[i] instanceof String) {
                                       stmt.setString(i + 1, (String) o[i]);
                                }
                         }
                  }
                  return stmt.executeUpdate();       
           }
          
           // 关闭对象
           public void close(){
                  try{
                         rs.close();
                  }catch(Exception e){}
                  try{
                         stmt.close();
                  }catch(Exception e){}
                  try{
                         con.close();
                  }catch(Exception e){}
           }
    }
    注意:因为采用预编译的语句对象,所以在执行SQL语句的时候需要提供参数,因为参数的个数不定,所以采用ArrayList对象进行封装,而代码中只对String类型的参数进行了处理,如果使用其它类型的参数,需要再编写支持代码。
    2、 修改getUserByPage方法
    使用DBBean中方法的基本过程如下:
    l         创建DBBean的对象;
    l         编写SQL语句;
    l         封装SQL语句需要的参数;
    l         执行SQL语句;
    l         关闭对象。
        public ArrayList getUserByPage(int pageNo) {
                  int number = 10;
                  // 每一页显示的记录数
     
                  int begin = (pageNo * number) - 9;
                  int end = pageNo * number;
                  int index = 1;
                 
                  DBBean db = new DBBean();
                  // 要返回的结果对象
                  ArrayList users = new ArrayList();
                 
                  String sql = "select * from usertable";
                  ResultSet rs;
                  try{
                         rs = db.executeQuery(sql,null);
                         while (rs.next()) {
                                // 在begin之前的记录是不显示的
                                if (index < begin) {
                                       index++;
                                       continue;
                                }
     
                                // 在end之后的记录也不显示
                                if (index > end)
                                       break;
     
                                index++;
     
                                String username = rs.getString(1);
                                String userpass = rs.getString(2);
                                // java.util.Date birthday = rs.getDate(3);
                                // int age = rs.getInt(4);
                                User user = new User();
                                user.setUsername(username);
                                user.setUserpass(userpass);
                                users.add(user);
                         }
                  }catch(Exception e){
                         e.printStackTrace();
                  }finally{
                         db.close();
                  }
                  return users;
           }
    3、 修改addUser方法
    以addUser方法为例介绍具有参数的SQL语句的执行。
    基本访问过程与2中介绍的相同,修改后的addUser方法的代码如下:
    public boolean addUser() {
            DBBean db = new DBBean();
            String sql = "insert into usertable values(?,?)";
            ArrayList<String> paras = new ArrayList<String>();
            paras.add(username);
            paras.add(userpass);
            int n=0;
            try{
                   n = db.executeUpdate(sql,paras);
            }catch(Exception e){
                   System.out.println(e.toString());
            }
            db.close();
            boolean b; // 表示添加成功与否
            if (n > 0)
                   b = true;
            else
                   b = false;
            return b;
    }
    4、 使用连接池的好处
    在前面的例子中,对于每个用户的每次访问都要先创建数据库连接,使用完之后释放连接。如果能够让用户多次访问之间共享数据库连接,则可以大幅度提供访问的效率。可以使用数据库连接处完成连接的共享,在服务器启动的时候,创建多个连接,如果用户需要访问数据库,直接从连接池中得到一个连接使用,使用完之后直接放回连接池。
    使用连接池的另外一个好处是,如果客户端太多,连接池可以通过控制连接的数量来保护数据库服务器,不会让数据库的响应变得非常缓慢,从而影响服务器的性能。
    5、 Tomcat中连接池的配置
    连接池的配置包括3个部分:
    l         把数据库JDBC驱动程序放到Tomcat安装目录的lib下面。有些版本的Tomcat应该放在安装目录的common/lib下面。
    l         配置安装目录下的conf/server.xml
    打开server.xml文件,在</host>之前添加如下代码:
    <Context path="/ch10" docBase="ch10"
            debug="5" reloadable="true" crossContext="true">
     <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
                   maxActive="100" maxIdle="30" maxWait="10000"
                   username="scott"
    password="tiger"
    driverClassName="oracle.jdbc.driver.OracleDriver"
                   url="jdbc:oracle:thin:@myserver:1521:mydb"/>
    path是应用的访问路径,docBase是应用的根目录,Resource其他红色部分分别是用户名、口令、驱动程序和url。
    </Context>
    l         配置工程的web.xml文件
    在web.xml中添加如下代码。注意:元素res-ref-name的值应该和前面配置的Resource的名字相同。
     <resource-ref>
          <description>DB Connection</description>
          <res-ref-name>jdbc/TestDB</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
     </resource-ref>
    6、 在Java代码中使用连接池
    修改DBBean.java中的getConnection方法,修改后的代码如下:
    public Connection getConnection() throws Exception{
            if (con == null) {
                   Context initContext = new InitialContext();
                   Context envContext = (Context) initContext.lookup("java:/comp/env");
                   DataSource ds = (DataSource) envContext.lookup("jdbc/TestDB");
                   con = ds.getConnection();
            }
            return con;
    }
    注意:在类头需要引入javax.sql包和javax.naming包。
    2.没有遇到问题
    3.明天打算学习
    信息添加功能演示
  • 相关阅读:
    Javascript中怎么定义类(私有成员、静态成员)?
    Web前端国内的叫法与行业归类吗
    CSS hack,CSS简写,CSS定义应注意的几个问题
    7个在IE和Firefox中不同的JavaScript语法
    IE和Firefox中的事件
    IE8的css hack /9
    CSS hack
    运行,复制,保存,runCode,copyCode,saveCode,运行代码框
    自由使用层的叠加
    WordPress自定义URL的Rewrite规则
  • 原文地址:https://www.cnblogs.com/wanghaoning/p/13591691.html
Copyright © 2011-2022 走看看