小项目的经验积累

1.在用eclipse对MySQL数据库进行操作时,用String储存sql操作语句经常会出现各种问题,可以将需要的操作先用数据库操作一遍,再翻译为代码。下面列出一个很难发现的问题:


String sql2="update book_information set 数量="+number.toString()+"where 书名='"+bookname+"';";

这行代码我在数据库中照着打了一遍并没有问题,但是再程序中总是出现错误,最后在程序中增加了一个输出语句将这个String输出做了比较才恍然大悟,操作如下:

String sql2="update book_information set 数量="+number.toString()+"where 书名='"+bookname+"';";
				System.out.println(sql2);

结果:
在这里插入图片描述
错误的地方是在连接的地方忘记了用空格隔开导致单词相连系统无法识别。而我在数据库中操作则习惯性的将单词隔开。

再者数据库中插入数据时字符串和日期等需要用包含在单引号内,否则数据库无法识别,在eclipse中编写sql语句时经常忘记加上。

2.swing中图片路径问题
获取根目录:

System.getProperty("user.dir")

详情参考
https://liuyanzhao.com/4082.html

3.用Java中的swing做界面时 ,初始化主页面的代码应该放在最后,否则会出现页面组件无法显示,只有拉伸扩大窗口才发现组件在窗口中(与自己的代码所期待的布局不一致)
可以参考下该博主的博文
https://blog.csdn.net/GuLu_GuLu_jp/article/details/50211353

4.最新的servlet版本Servlet3.0 的特性,
在servlet文件创建的时候就自动添加了@WebServlet 这个注解,可以做到不配置web.xml就能使用。

5.Java网页制作中的web.xml配置文件必须放在WEB-INF中间中的lib文件下,否则运行调试jsp文件或其他会一直报错404
在这里插入图片描述
在这里插入图片描述

6.在网页中的表单提交信息时,用getParameter方法获取数据时,若用户没有输入信息,则获取得到的字符串对象为“”,而不是null,在判断用户是否输入数据时要注意,这个小错误很难发现。

7.数据库executeQuery方法返回一个ResultSet类型的数据集,判断数据集是否有内容用next()方法??有则返回true,无则返回false。

===================
boolean execute(String sql); 可执行任何SQL语句,返回一个布尔值,表示是否返回ResultSet 。
ResultSet executeQuery(String sql); 执行SQL查询,并返回ResultSet 对象。
int executeUpdate(String sql); 可执行增,删,改,返回执行受到影响的行

8.情况如下:
照着教科书打的代码一直报错,报错的地方及原因:
在这里插入图片描述
在这里插入图片描述
报错原因是“ ”中的“没有转义 ,因此在”前加了\转义,可以运行。
在这里插入图片描述
9.中文显示乱码的解决方案
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019040614294319.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzEyMjMyOA==,size_16,color_FFFFFF,t_70
tomcat 7之前默认编码iso-8859-1,tomcat 8 默认编码utf-8

10.web路径
在这里插入图片描述
在这里插入图片描述
11.解决数据库的
No suitable driver found for jdbc:mysql://127.0.0.1:3306/qunit 错误
引起错误的主要原因:
一是:连接URL格式出现了问题(Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/XX”,“root”,“XXXX”)

二是:驱动字符串出错(com.mysql.jdbc.Driver)

三是Classpath中没有加入合适的mysql_jdbc驱动

四是把 mysql-connector-java-5.1.22-bin.jar放到$JAVA_HOME/jre/lib/ext中

五是 sql语句有语法错误

12.解决eclipse出现 “ The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path ”的问题

①项目右击–>build path -->添加libraries–>server runtime–>ok

在这里插入图片描述

在这里插入图片描述

13.jsp中的response.encodeURL("")

用response.sendRedirect(response.encodeURL(url))的好处就是他能将用户的session追加到网址的末尾,也就是能够保证用户在不同的页面时的session对象是一致的.
这样做的目的是防止某些浏览器不支持或禁用了COOKIE导致session跟踪失败

14.sendRedirect 和 getRequestDispatcher的forward方法 执行后对于剩下代码的区别
无论是 request.getRequestDispatcher(path).forward(request, response)还是response.sendRedirect,程序都会在执行完该句的情况下继续向下执行,因此在必要的时候应该使用return终止该方法.

对于 request.getRequestDispatcher(path).forward(request, response),在执行完该方法的时候再进行对request的操作已经没有任何意义,如果在该方法之后再进行request.setAttribute(),该值将不会被放进当前请求的request中.

response.setRedirect:该方法执行之后,接下来的方法也会被执行.但是使用该方法的时候,会发送一个全新的request,将不再使用原先的request,因此不论在该方法执行之前,还是在该方法执行之后,对request操作,都是无效的.

作者:liuyong0507
来源:CSDN
原文:https://blog.csdn.net/liuyong0507/article/details/73279119
版权声明:本文为博主原创文章,转载请附上博文链接!

15.swing中JPanel组件设置大小函数为setPrefrredSize() 而不是setSize()方法

16.源代码中的数据可以抽取到一个类中 (静态公有常量),用常量标识符去表示数字,有利于后期的维护。

17.在eclipse 修改包的名称后调试抛出 包中的类 ClassNotNFoundException 异常,可以将 Tomcat 的工作空间 和 项目清除后再调试一下,得以解决。

18.在表示价格是应选择 BigDecimal 类 ,选择float和double 是近似值,不是精确的值。因为float与double都是浮点数,浮点数参与的运算通常伴随着因为无法精确表示而进行的近似或舍入,所以导致结果会有丝毫的偏差,而涉及金额的计算是绝对不予许存在偏差的。java对财务这块有一个专门的数据类型BigDecimal,它有很多构造函数,但是唯独参数为String的构造函数才能计算出精确的数值 ,参数Double构造出来的BigDecimal运算值失去精度,应该是跟参数为Double有关的。
在这里插入图片描述
转载自https://blog.csdn.net/tiankong_12345/article/details/80259911
https://blog.csdn.net/Certain_/article/details/89222283

18.java中需要利用反射的原理获取自定义注解的信息时,需要将自定义的注解作用域标为 RetentionPolicy.RUNTIME JVM会把注解加载到内存中。

package java.lang.annotation;
public enum RetentionPolicy {
     SOURCE, //注解不会被编译到 .class 文件中,如: @SuppressWarnings
注解
     CLASS,  / 注解会被编译到 .class文件中,但不会被JVM加载,缺省 默认这个
     RUNTIME //JVM会把注解加载到内存里,运行期间可见,所以可以通过反射读取注解的信息。
}
package java.lang.annotation;
public enum ElementType {
     TYPE, //适用class, interface, enum
     FIELD, //适用field
     METHOD, //适用method
     PARAMETER, //适用method上之parameter
     CONSTRUCTOR, //适用constructor
     LOCAL_VARIABLE, //适用局部变量
     ANNOTATION_TYPE, //适用annotation型态
     PACKAGE //适用package
}

参考博文:https://blog.csdn.net/HaHa_Sir/article/details/80753682

  1. 使用 mybatis-generator 组件自动生成 mapper ,若重复生成,新生成的内部不会覆盖原来的东西,而是追加到原来内容的后边,这边运行会抛出错误:
 Result Maps collection already contains value for lllr.test.breast.dao.mapper.AdministratorMapper.BaseResultMap

解决的方法:删除原来的内容
https://blog.csdn.net/qq_31815507/article/details/81137826

20.使用html中的input 调用手机摄像头实现视频上传

在这里插入图片描述21. idea中将springboot项目 打包成 war过程中会先将整个项目包括测试用例运行一遍,如果测试用例不通过则会报错,解决的办法:

1.解决方法一种是直接在pom文件中配置

            <!--执行测试用例的插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <!--跳过项目运行测试用例-->
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>

2.第二种解决方法是直接在命令行后面添加参数

mvn clean package -Dmaven.test.skip=true

https://blog.csdn.net/yaomingyang/article/details/92799328

22.html中组件disabled设置了true的字段在表单提交时不会加上。

23.Oracle中 null=null 是不成立的 在做连接查询时候要格外注意

24.在设置单选框的 ‘checked’ 属性时,对于jQuery 1.6.0+ 的版本,要使用prop方法,不能使用attr ,是没有效果的。

25.springmvc项目中 web.xml 关于 servlet路径的设置区别

<servlet-mapping>  
    <servlet-name>spring</servlet-name>  
    <url-pattern>/*</url-pattern>  
</servlet-mapping> 

该设置表示路径映射,*表示匹配所有,因此所有传入的路径都会被匹配到,进而交由DispatcherServlet处理,而[/myspring/WEB-INF/jsp/hello.jsp]没有对应的Controller,自然会发生报错。此时你需要<mvc:resources location="" mapping="">进行静态资源映射。

<servlet-mapping>  
    <servlet-name>spring</servlet-name>  
    <url-pattern>/</url-pattern>  
</servlet-mapping> 

该设置表示将DispatcherServlet作为default Servlet(默认是org.apache.catalina.servlets.DefaultServlet),所有其他路径映射未匹配情况下才会交由它处理。而由于隐式映射的关系,使得 .jsp 扩展名被映射到静态资源进而被执行。

转载自 https://www.iteye.com/problems/36433

26.Okhttp 访问自签名证书 HTTPS 地址解决方案

报错信息:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
 PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: 
 unable to find valid certification path to requested target

解决方法:
https://www.jianshu.com/p/cc7ae2f96b64

27.linux系统中mysql服务的启动报错

Can't start server: can't check PID filepath: No such file or directory

原因:一般是由于服务器强制关机导致pid文件丢失

解决方法:在 /etc/rc.local中添加

mkdir -p /var/run/mysql
chown mysql.mysql /var/run/mysqld

转自https://blog.csdn.net/qq_31977125/article/details/84318745

28.Mybaits的foreach注解和XML两种写法是不一样的
1.注解

@Select("<script>" +
        "SELECT * FROM t_test WHERE id IN " +
        "<foreach collection='list' index='index' item='item' open='(' separator=',' close=')'>" +
        "#{item}" +
        "</foreach>" +
        "</script>")
@Results(value = { @Result(column = "id", property = "id") })

2.XML

<select id="test" parameterType="java.util.List" resultType="Test">
  select * from t_test where id in 
  <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
    #{item}
  </foreach>
</select>

参考自https://chentaoqian.com/?p=81

28.postman模拟http请求json字符串解析错误

JSON parse error: Unexpected end-of-input within/between Object entries; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected end-of-input within/between Object entries\n at [Source: (PushbackInputStream); line: 18, column: 23]

原因:http中Content-Length字段的长度和实际不一样
解决方法:去掉Content-Length字段,http在请求时会自动添加

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值