那些年JAVA开发踩过的坑……

By | 11月 22, 2017

Maven的各种坑

1.Maven配置完成后发现命令行提示mvn -version并不存在,查找环境变量后觉得可能是因为环境变量中不存在JAVA的路径,但是实际一零的电脑中可以正常运行java的代码。

利用java -verbose可以查看当前电脑中jdk的目录位置,发现只有jre没有jdk,于是重新安装JAVA的开发环境。

重装JDK并配置完成后发现还是不行,再在环境变量中将%MAVEN_HOME%\bin; 修改为

%SystemRoot%\system32;%MAVEN_HOME%\bin;

2.利用maven打包时遇到报错,原因是需要在存在pom.xml的目录下执行。

3.解决第一个问题后,在打包项目时又遇到另一个问题:

 [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE 
 rather than a JDK?

这个问题提示打包时只是在jre环境中运行,缺少jdk。一零昨天重装了jdk,虽然java -version命令已经可以看到jdk为最新版本,但是jre还是旧版本没有改变,需要在MyEclipse中重新设置,注意jre要改为jdk工具包中的jre。

JDBC的各种坑

1.要注意利用DB Browser连接数据库,不然报错。

2.存入数据的中文显示为三个???

在连接数据库的url后面添加参数:

private static final String DATABASE_URL="jdbc:mysql://localhost:3306/ylxjava?useUnicode=true&characterEncoding=utf8";

3.错误:java.sql.SQLException:Column count doesn’t match value count at row 1

错误原因:在插入数据时,插入的VALUE的字段数跟数据库表字段个数不一致

4.错误:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column

在操作数据库时String类型的参数必须要用’ ‘把参数引起来才能传递并接收!此处一零上传的参数是String类型,错误原因是没有加单引号。因此,在进行数据库操作时,千万不要漏了两边的单引号。

String sql = "select * from yl_job where jname = '"+jobName+"'";

Mybatis的各种坑

1.错误原因是Config.xml文件的位置和内容本身。

org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance.
Cause: org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 40;
必须声明元素类型 "enviroment"。
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:51)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:35)
at TestMybatis.Test.<clinit>(Test.java:15)
Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance.
Cause: org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 40;
必须声明元素类型 "enviroment"。
at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:253)
at org.apache.ibatis.parsing.XPathParser.<init>(XPathParser.java:117)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.<init>(XMLConfigBuilder.java:60)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:48)
... 2 more
Exception in thread "main" java.lang.NullPointerException
at TestMybatis.Test.main(Test.java:21)

2.错误提示如下,原因是Job类的映射文件JobMapper.xml文件中的mapper标签下namespace目录空间指向错误,因此在写配置文件一定要注意细节。

org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for pers.testMybatis.jobMapper.getJob
### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for pers.testMybatis.jobMapper.getJob
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:107)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:98)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:62)
at pers.testMybatis.Test.main(Test.java:24)
Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for pers.testMybatis.jobMapper.getJob
at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:791)
at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:631)
at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:624)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:103)
... 3 more

具体报错图片如下:

3.org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

原因是接口文件中对数据库操作的SQL语句出现问题,修改SQL语句,并注意引入相应的包,注意下图红色箭头指向的两处。

其他坑

1.如何获取当前时间戳?

注意:import java.util.date;    #引入date库
new Date().getTime();

2.错误:The type Date is ambiguous

意思是“Date类型不明确”,其实是因为冲突造成的。在该文件中,一零同时引入了java.sql.* 和java.util.*,但是两个钟中都存在着Date类型,编译器不清楚使用哪一个,于是报错。

解决办法,将需要的sql的包一个一个引入。

import java.sql.Connection;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.*;

发表评论

邮箱地址不会被公开。