• Java项目出现的问题--实际项目01


    1   从Excel中导入指纹图谱数据异常

    在导入指纹图谱时对Excel的规范是有限制的,有时候报空指针异常是因为虽然有些地方看起来没有内容但是可能有空格键;解决方法是新建一个Excel表,把要用到的数据复制过去。

    2   导入mysql数据时报错:Packet for query is too large

    mysql有一个默认的数据表大小上传限制,当需要把Excel中较多的数据传入mysql中可能会超过这个大小的限制,从而引发异Causedby:com.mysql.jdbc.PacketTooBigException: Packet for query is too large

    解决方法时修改默认配置----注意修改后要重启mysql并且也要重新部署项目。

    查看目前配置
    show VARIABLES like '%max_allowed_packet%';                 //默认为1M
    
    改为更大的值:
    set global max_allowed_packet = 2*1024*1024*10;

    3 设置登录网站地址

    如果不设置则默认为localhost:8080 + 项目名称;因此需要对地址重新进行配置。下面这两个是在自己的电脑上进行的配置,在服务器配置还有所不同在word上有记录。

    1、C:WindowsSystem32driversetc中对HOST文件配置  127.0.0.1 food.sjtu.edu.cn

    2、在Tomcatapache-tomcat-8.0.50conf下的service文件中配置。

    在进行服务器设置的时候使用startup.bat开启Tomcat服务器,这样才会把war包解析一开始竟然忘记打开Tomcat了就没自动解析。因为配置不一样在本机输入的是food.sjtu.edu.cn进行访问,在服务器要输入sjtufood.com进行访问。

    4 把数据库中的数据导出--mysql

    右键项目,选择备份导出,然后选择如图所示会生成对应的.sql文件。可以自己创建一个数据库,记得要把.sql文件中的数据库名字修改为自己想要创建的,然后全部选中复制,再执行即可。

    5 不能创建数据库(150)

     问题报错:

    21:52:10,611 ERROR [localhost-startStop-1] SchemaUpdate:212 - Unsuccessful: alter table rice_zheng_zhu add index FK4429F9526D8C31A7 (food_id), add constraint FK4429F9526D8C31A7 foreign key (food_id) references food_list (food_id)
    21:52:10,612 ERROR [localhost-startStop-1] SchemaUpdate:213 - Can't create table 'sjtufoodtest1.#sql-1960_9d' (errno: 150)

    百度的大部分说是外键配置错误,我在几经修改后发现仍然是错误的。最后发现是因为mysql的问题,只需要右键表,把表的类型选择为MyISAM即可。注意,每次新建表都会

    默认为图中的格式,要修改。不过好像即使不修改也没有关系,只是单纯的会报错。

    6 变量首字母最好不要大写

    如果大写的话在自动生成的get set方法中就不会出现this,并且可能会影响后面的配置问题。

    7 变量与数据库命名规范

    数据库中变量是没有大小写的,依靠下划线,Java中是依靠大小写。因为项目包含的配置文件较多,在传入参数时很可能就会发生混淆,因此统一把Java中与数据库相同的名字全部小写,涉及Java内部变量时增加使用名字并依据驼峰规则。

    8 显示查看总是多一列

     点击增删改查后发现总是多了一列,排查了好久发现是在jsp文件里出了问题<td></td>这是一对的,但是如果没写</td>也不会报错,而恰恰就是写了<td>XXX<td>的形式,导致总是多出来一个。

    9 远程连接

    使用TeamViewer进行远程控制连接,不过每次都需要设定ip和密码

    10 Tomcat配置

     指纹图谱图片的显示需要设置下Tomcat中config,配置路径,有一个上交专用配置文件记录的有。

    11 使用hql语句进行条件删除

    //使用的是面向对象因此不能直接用表名,而应该用对象名。:id表示的参数
    final String queryString = "delete Fingerprint2 where fp1_id = :id";
    Query query = getSession().createQuery(queryString);
    query.setString("id", fp1Id); //设置参数的值
    query.executeUpdate();  //执行query语句

     12 指纹图谱导入报错

    在导入指纹图谱时有时会报错,大部分时候是因为格式的问题,一般从2方面查找。1 是否是按照下面的格式标明的,>>>这个符号要有,格式要完全对照如下图所示。2 是否设置了单元格格式为文本格式。

    13 指纹图谱页面分页问题

    在指纹图谱分页时由于采用了同一个分页,会导致没有更新这样在第2页时跳转到子页面就会仍然从第2页开始解决方法是在子页面重新写一个页数获取并在指纹图谱jsp的listUI.jsp页面中重置为1,好像只需要重置为1即可虽然写的有子页面的重新获取页数但有使用。

    14 matlab 与java混合编程

    在导入matlab包时由于选择的mtalab版本过高出现了缺少mclmcrrt8_3.dll文件,在低版本的matlab中找到该文件,一般在D:workSoftMATLABR2016a untimewin64 文件夹下,把该文件拷贝高版本的matlab中该问题解决,但会出现另一个问题,好像是jvm引起的问题,目前还没有解决。

     15 matlab调用出错

    在matlab中运行测试文件一直报错,后来发现是添加文件的问题,只添加了mainFunc 还要把同一文件夹下名字为matlb的添加进去方可

     16 hql语句编写

     在hql语句中:queryHelper.addCondition("pre.fingerprint1.fp1Id = ?", fp1.getFp1Id()); 双引号里面的是hql语句要按照数据库中定义好的属性即fingerprint1是一个属性,而不能直接写为fp1形式

     17 训练模型

    模型中的meanpeak保存到是合并后的x值即时间而不是峰值,在训练的时候根据x取出y,预测的时候输出的是峰值y。对于指纹图谱没有预测对应的列号为了界面显示方便就把预测对应的列号转变意思为对应的峰值序号,直接顺序保存进去,但在程序端没有写是直接在数据库中添加进去的后面可能需要修改一下,这样做主要就是为了模型详情查看时界面好写

     18 数据库中峰值对应存贮

    peaks_x是时间或波长,peaks_y存的是合并后对应的峰值,mean_peaks是合并后的时间或波长

     19 峰值表的对应

    峰值表的第一行是波长或时间,第二行是对应的峰值

     20 指纹图谱输入数据

    点数据中也是一样的所有的输入包含品种必须是数字,这里品种用的是0表示,均质1到5表示,具体对应查看数据表,预测的时候也只是取出来了这两个有效的。

     21 输入峰值界面

    左侧的是对应的峰值数据中自变量,可以是事件也可以是波长

    22 输入数据的数字化 

    输入数据的数字化顺序是根据数据库中的顺序而来的,有些数据库中的顺序与excel中的数据不一致,这一点要注意。

    0.0 1.0
    0.0 2.0
    0.0 3.0
    0.0 4.0
    0.0 5.0
    1.0 6.0
    1.0 7.0
    1.0 8.0

     我在训练的时候好像搞错了,直接写成上面的形式了,测试了下还能用。。。不知道什么情况。

    23 Tomcat配置JVM内存

    因为换了一种预测方法因此需要读入数据,番茄的数据比较多当读入列数较多时就会使JVM内存溢出,因此需要配置一下JVM的内存。在Tomcat/bin/catalina.bat下,网上普遍说的是从非注释的第一行写,我这里是第二行写如下代码即可:

     set JAVA_OPTS=-Xms1024M   -Xmx1024M -XX:MaxPermSize=1024M 

     24 豆腐表峰值点存贮

    在豆腐表峰值点对应的x变量存储时发现mean_peaks是逆序的,这样有可能后面的数据也是逆序的,这一点要注意,记得把数据修改回来(自己写了在idea java中写了一个修改方法)。果然鱼糜的数据一直显示预测错误就是这个问题引起的。

    25 页面跳转的时候为什么可以直接接收到对象

    在jsp页面有如下的跳转代码:document.forms[0].action = "${ctx}/query/home_listUI.action?food.foodId=" + foodId;相应的action中只需要声明private Food food 在写上get和set方法就可以顺利的拿到的id值,但是为什么?

    对于food.foodId这样的请求,jsp会自动的把它封装成对象的形式,food便会对象的名字,所以在action中或取的对象并不是我们在程序中构造真正的对象,而是根据http协议自动封装得到的对象,所以这个对象只能是你在请求时设置了什么参数它就有什么参数,没有设置便不会有该属性。

    26 在进行查询时有些参数丢失

    在tofindUI.jsp中allInput的输入框接收的参数在findUI.jsp中进行下一页时就会造成参数丢失,这样就导致了查询时参数的丢失,在toufu中利用<inpu type="hide" name="allInput" value=${allInput} />这个隐藏属性框即可。

    0

  • 相关阅读:
    【原创】【JNI】OPUS压缩与解压的JNI调用(.DLL版本)
    线性基学习笔记
    杜教筛&Min_25筛学习笔记
    LOJ2540 随机算法
    仙人掌&圆方树学习笔记
    CF487E Tourists
    BZOJ2125 最短路
    [SHOI2008]仙人掌图
    BZOJ4316 小C的独立集
    NOI2015 品酒大会
  • 原文地址:https://www.cnblogs.com/youngao/p/10427708.html
Copyright © 2020-2023  润新知