冲刺总结(三)

完成任务:单位管理模块。

 

一、设计思路:

公文系统管理者在管理系统的时候,肯定会涉及单位的管理,于是我就负责我们小组这一块的内容。

首先是管理者界面的排布:

点进去的单位管理的界面如图

我需要做的就是如何把这个功能实现。

二、功能设计:本功能包括以下几个模块

添加单位、删除单位、单位列表、这个模块需要连接的数据部分

添加的效果如图:

page 指令可以定义下面这些大小写敏感的属性(大致按照使用的频率列出):import、contentType、pageEncoding、session、isELIgnored(只限 JSP 2.0)、buffer、autoFlush、info、errorPage、isErrorPage、isThreadSafe、language 和 extends。

<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="UTF-8"%>

<base href="value">为页面上所有相对 URL 规定基准 URL,href 属性规定页面中所有相对链接的基准 URL。

    <base href="<%=basePath%>">

定义判断输入的值函数:如果为空则弹出警告,不为空则调用。这是jsp的内容,也是该模块的核心。

function checkValue(){
                if(document.form.departmentname.value==""||document.form.departmentname.value==null)
                {
                    alert("不能为空!");
                    document.form.departmentname.focus();
                    return false;
                }
                return true;

之后再进行页面的设计就可以了

其次就是如何把我需要添加的内容进行整个模块的配合,检测调用:

PreparedStatement psm = null;
try {
    psm = conn.prepareStatement("insert into t_department (departmentname) values(?)");
    psm.setString(1, request.getParameter("departmentname")!=null?request.getParameter("departmentname"):"");
    psm.executeUpdate();
    
    response.sendRedirect("list.jsp?flag=success");

} catch (Exception e) {
    out.print(e.getMessage());
} finally {
    if (stmt != null) {
        try {
            stmt.close();
        } catch (Exception e) {
    e.printStackTrace();
        }
    }
    if (psm != null) {
        try {
    psm.close();
        } catch (Exception e) {
    e.printStackTrace();
        }
    }
    if (conn != null) {
        try {
    conn.close();
        } catch (Exception e) {
    e.printStackTrace();
        }
    }
}

我们在添加单位系统的时候肯定会涉及删除我们不需要的单位

代码核心:

PreparedStatement psm = null;

try {
    psm = conn.prepareStatement("delete from  t_department  where id = "+request.getParameter("ID"));
    
    psm.executeUpdate();
    response.sendRedirect("list.jsp?flag=success");

} catch (Exception e) {
    out.print(e.getMessage());
} finally {
    if (psm != null) {
        try {
    psm.close();
        } catch (Exception e) {
    e.printStackTrace();
        }
    }
    if (conn != null) {
        try {
    conn.close();
        } catch (Exception e) {
    e.printStackTrace();
        }
    }
}

下图为单位管理设计的页面:

script处理部分(有注释介绍):

<%
        

        int count = 0;//记录数
        // 进行乱码处理
        request.setCharacterEncoding("GB2312"); 
        // 定义如下分页变量
        // 1、定义没页要显示的记录数
        int lineSize = 5;
        // 2、定义一个当前是第几页
        int currentPage = 1;
        // 计算出总页数
        int pageSize = 0;
        // 总记录数 / 每页显示的记录数
        int allRecorders = 30;
        // 加入查询关键字变量
        // 接收查询关键字
        String keyWord1 = null;
        keyWord1 = request.getParameter("fname");
             if(keyWord1==null){
                 keyWord1="";
                 }else{
                 try{
                     //String(byte[] bytes, Charset charset)
                     //通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String
                         //keyWord1=(new String(keyWord1.getBytes("iso-8859-1"),"UTF-8")).trim();
                 }catch(Exception e){
                         e.printStackTrace(System.err);
                 }
                 }
        // 接收传过来的当前页
        try {
            currentPage = Integer.parseInt(request.getParameter("cp"));
        } catch (Exception e) {
        }
        try {
            
            PreparedStatement pstmt = null; 
            String sql = null;
            if (keyWord1 == null||"".equals(keyWord1)) {
                // 如果为空则没有查询,表示查询出全部
                sql = "select count(*) from t_department c  ";
            } else {
                //如果KeyWord有值 则执行模糊查询
                sql = "select count(*) from t_department c  where c.departmentname like '%"+keyWord1+"%'";
            }
            System.out.println(sql);
            pstmt = conn.prepareStatement(sql);
            ResultSet rs = pstmt.executeQuery();
            if (rs.next()) {
                allRecorders = rs.getInt(1);
            }
            rs.close();
            pstmt.close();

            // 计算总页数
            pageSize = (allRecorders + lineSize - 1) / lineSize;
            if (keyWord1 == null||"".equals(keyWord1)) {
                // 如果为空则没有查询,表示查询出全部
                sql = "select * from t_department c  ";
            } else {
                //如果KeyWord有值 则执行模糊查询
                sql = "select * from t_department c  where c.departmentname like '%"+keyWord1+"%'";
            }    
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            
    %> 

接下来就是数据的添加和删除,毕竟我们要达到的效果就是能够去把这些全部整合起来。

<%
    }
} catch (Exception e) {
    out.print(e.getMessage());
} finally {
    if (rs != null) {
        try {
    rs.close();
        } catch (Exception e) {
    e.printStackTrace();
        }
    }
    if (stmt != null) {
        try {
            stmt.close();
        } catch (Exception e) {
    e.printStackTrace();
        }
    }
    if (conn != null) {
        try {
    conn.close();
        } catch (Exception e) {
    e.printStackTrace();
        }
    }
}
%>

三、遇到的问题

数据库SQL语句方面:

1.java通过JDBC连接MySql数据库方法

        参见:http://hzy3774.iteye.com/blog/1689525

2.出现错误java.sql.SQLException: Can not issue data manipulation statements with executeQuery().

        注意sql语句如果是查询,用executeQuery(),要对表产生修改的话则使用executeUpdate()

3.选取前N条数据时,sqlserver数据库用select top n from table order by class desc,而mysql数据库使用select * from table order by class desc limit n

4.sum()求和函数,注意sum和括号之间不能有空格

5.将一张大表分割成几个小表:CREATE TABLE weibo1 SELECT * FROM weibo ORDER BY mid LIMIT 1,3000000;

   出现错误:[Err] 3 - Error writing file 'C:\Windows\TEMP\MY29' (Errcode: 28)。解决方案参见:www.111cn.net/database/mysql/45657.htm。我的问题是因为C盘空间不足

6.将数据导入Mysql,出现ERROR 1406 : Data too long for column 解决办法:

   在my.ini里找到 sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION”
    把其中的STRICT_TRANS_TABLES,去掉,然后重启mysql就ok了。

   重启Mysql方法:在CMD下,输入 net  stop  mysql 可以停止mysql,输入net  start mysql可以启动mysql,先停止,再启动

 

java语句方面:

1.向量的定义。向量初始化不能使用Vector<String> orimid =null,会导致在像该向量添加元素时发生空指针错误。正确方法:Vector<String> orimid =new Vector<String>();

2.ArrayList和Vector的区别:Vector是同步的, 而ArrayList不是,因为Vector是同步的, 所以它是线程安全的。同样, 因为Vecotr是同步的, 所以他需要额外的开销来维持同步锁, 所以它要比ArrayList要慢.(理论上来说)
    Vector允许用户设置capacityIncrement这样在每次需要扩充数组的size的时候, Vector会尝试按照预先设置的capacityIncrement作为增量来设置, 而ArrayList则会把数组的大小扩大一倍;如果capacityIncrement设为0或者负值, Vector就会做和ArrayList一样, 每次都将数组大小扩大一倍.

3.java.lang.OutOfMemoryError: Java heap space异常。因为要选择的表太大了,造成内存溢出。参考http://my.oschina.net/cimu/blog/175691。更改参数,在eclipse.ini中增加: 

-Xms128M

-Xmx4096M

然而我的表太大了,还是溢出了,决定将该表分成几个小表。

 

posted @ 2020-11-24 20:06  下饭东giao~  阅读(65)  评论(0)    收藏  举报