当前位置:   article > 正文

所有异常

nosuchfiled double

1. java.lang.NullPointerException(空指针异常)

调用了未经初始化的对象或者是不存在的对象

经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,

即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,

依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)。

====================================================================================================

2. java.lang.ClassNotFoundException  

   指定的类不存在

这里主要考虑一下类的名称和路径是否正确即可,通常都是程序试图通过字符串来加载某个类时可能引发 异常

比如:调用Class.forName();

        或者调用ClassLoadfinaSystemClass();或者LoadClass();

====================================================================================================

 

3. java.lang.NumberFormatException

   字符串转换为数字异常

 当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常.如现在讲字符型的数据“123456”转换为数值型数据时,是允许的。

但是如果字符型数据中包含了非数字型的字符,如123#56,此时转换为数值型时就会出现异常。系统就会捕捉到这个异常,并进行处理.

====================================================================================================

 

4. java.lang.IndexOutOfBoundsException

  数组下标越界异常

 查看调用的数组或者字符串的下标值是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。

====================================================================================================

 

5. java.lang.IllegalArgumentException

 方法的参数错误

比如g.setColor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。

====================================================================================================

 

6. java.lang.IllegalAccessException

 没有访问权限

当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情况下要注意这个异常

====================================================================================================

 

7. java.lang.ArithmeticException

 数学运算异常

当算术运算中出现了除以零这样的运算就会出这样的异常。

====================================================================================================

 

8. java.lang.ClassCastException

 数据类型转换异常

当试图将对某个对象强制执行向下转型,但该对象又不可转换又不可转换为其子类的实例时将引发该异常,如下列代码

                             Object obj = new Integer(0);

                             String str = obj;

====================================================================================================

 

9. java.lang.FileNotFoundException

 文件未找到异常

当程序试图打开一个不存在的文件进行读写时将会引发该异常。该异常由FileInputStream,FileOutputStream,RandomAccessFile的构造器声明抛出

即使被操作的文件存在,但是由于某些原因不可访问,比如打开一个只读文件进行写入,这些构造方法仍然会引发异常

====================================================================================================

 

10. java.lang.ArrayStoreException

 数组存储异常

 当试图将类型不兼容类型的对象存入一个Object[]数组时将引发异常

                          Object[] obj = new String[3];

                          obj[0] = new Integer(0);

====================================================================================================

 

11. java.lang.NoSuchMethodException

方法不存在异常

当程序试图通过反射来创建对象,访问(修改或读取)某个方法,但是该方法不存在就会引发异常

 ====================================================================================================

 

12. java.lang.NoSuchFiledException

方法不存在异常

当程序试图通过反射来创建对象,访问(修改或读取)某个filed,但是该filed不存在就会引发异常

 ====================================================================================================

 

13. java.lang.EOFException

文件已结束异常

当程序在输入的过程中遇到文件或流的结尾时,引发异常。因此该异常用于检查是否达到文件或流的结尾

====================================================================================================

 

14. java.lang.InstantiationException

实例化异常

当试图通过ClassnewInstance()方法创建某个类的实例,但程序无法通过该构造器来创建该对象时引发

  • Class对象表示一个抽象类,接口,数组类,基本类型
  • Class表示的类没有对应的构造器

====================================================================================================

 

15java.lang.InterruptedException

被中止异常

当某个线程处于长时间的等待、休眠或其他暂停状态,而此时其他的线程通过Threadinterrupt方法终止该线程时抛出该异常。 

====================================================================================================

 

16java.lang.CloneNotSupportedException
不支持克隆异常

当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常

====================================================================================================

 

17java.lang.OutOfMemoryException
内存不足错误

当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。

====================================================================================================

 

18java.lang.NoClassDefFoundException
未找到类定义错误

Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。

违背安全原则异常:SecturityException

操作数据库异常:SQLException

输入输出异常:IOException

通信异常:SocketException

====================================================================================================

19: org.hibernate.MappingException: No Dialect mapping for JDBC type: -9

 

原因:Hibernate框架的方言(Dialect )没有数据库中数据类型nvarchar的映射,只有varchar类型的映射。所以在启动时出现此异常。

解决方法:

方法一:

将数据库字段的类型改为varchar类型。

方法二:

org.hibernate.MappingException: No Dialect mapping for JDBC type: -9

org.hibernate.MappingException: No Dialect mapping for JDBC type: -15

 

笔者在做连接SQLServer2008数据库的时候遇到了上述的错误,解决办法如下:

package com.shihuan.core.framework.extend;

 

import java.sql.Types;

 

import org.hibernate.Hibernate;

import org.hibernate.dialect.SQLServer2008Dialect;

 

public class SqlServer2008Dialect extends SQLServer2008Dialect {

 

    public SqlServer2008Dialect() {  

        super();  

        registerHibernateType(Types.CHAR, Hibernate.STRING.getName());

        registerHibernateType(Types.NCHAR, Hibernate.STRING.getName());

        registerHibernateType(Types.NVARCHAR, Hibernate.STRING.getName());  

        registerHibernateType(Types.LONGNVARCHAR, Hibernate.STRING.getName());  

        registerHibernateType(Types.DECIMAL, Hibernate.DOUBLE.getName());  

    }

}

 

java.sql.Types对应的值请参考http://blog.sina.com.cn/s/blog_4f925fc30102ep0v.html

java.sql.Types对应的sql server2008中的一些值:

public final static int BIT   =  -7;

public final static int TINYINT  =  -6;

public final static int SMALLINT =   5;

public final static int INTEGER  =   4;

public final static int BIGINT   =  -5;

public final static int FLOAT   =   6;

public final static int REAL   =   7;

public final static int DOUBLE   =   8;

public final static int NUMERIC  =   2;

public final static int DECIMAL  =   3;

public final static int CHAR  =   1;

public final static int VARCHAR  =  12;

public final static int LONGVARCHAR  =  -1;

public final static int DATE   =  91;

public final static int TIME   =  92;

public final static int TIMESTAMP  =  93;

public final static int BINARY  =  -2;

public final static int VARBINARY  =  -3;

public final static int LONGVARBINARY  =  -4;

public final static int NULL  =   0;

public final static int OTHER  = 1111;

public final static int JAVA_OBJECT         = 2000;

public final static int DISTINCT            = 2001;

public final static int STRUCT              = 2002;

public final static int ARRAY               = 2003;

public final static int BLOB                = 2004;

public final static int CLOB                = 2005;

public final static int REF                 = 2006;

public final static int DATALINK = 70;

public final static int BOOLEAN = 16;

public final static int ROWID = -8;

public static final int NCHAR = -15;

public static final int NVARCHAR = -9;

public static final int LONGNVARCHAR = -16;

public static final int NCLOB = 2011;

public static final int SQLXML = 2009;

 

 

Hibernate SQL方言(hibernate.dialect:

RDBMS

Dialect

DB2

org.hibernate.dialect.DB2Dialect

DB2 AS/400

org.hibernate.dialect.DB2400Dialect

DB2 OS390

org.hibernate.dialect.DB2390Dialect

PostgreSQL

org.hibernate.dialect.PostgreSQLDialect

MySQL5

org.hibernate.dialect.MySQL5Dialect

MySQL5 with InnoDB

org.hibernate.dialect.MySQL5InnoDBDialect

MySQL with MyISAM

org.hibernate.dialect.MySQLMyISAMDialect

Oracleany version

org.hibernate.dialect.OracleDialect

Oracle 9i

org.hibernate.dialect.Oracle9iDialect

Oracle 10g

org.hibernate.dialect.Oracle10gDialect

Oracle 11g

org.hibernate.dialect.Oracle10gDialect

Sybase

org.hibernate.dialect.SybaseASE15Dialect

Sybase Anywhere

org.hibernate.dialect.SybaseAnywhereDialect

Microsoft SQL Server 2000

org.hibernate.dialect.SQLServerDialect

Microsoft SQL Server 2005

org.hibernate.dialect.SQLServer2005Dialect

Microsoft SQL Server 2008

org.hibernate.dialect.SQLServer2008Dialect

SAP DB

org.hibernate.dialect.SAPDBDialect

Informix

org.hibernate.dialect.InformixDialect

HypersonicSQL

org.hibernate.dialect.HSQLDialect

H2 Database

org.hibernate.dialect.H2Dialect

Ingres

org.hibernate.dialect.IngresDialect

Progress

org.hibernate.dialect.ProgressDialect

Mckoi SQL

org.hibernate.dialect.MckoiDialect

Interbase

org.hibernate.dialect.InterbaseDialect

Pointbase

org.hibernate.dialect.PointbaseDialect

FrontBase

org.hibernate.dialect.FrontbaseDialect

Firebird

org.hibernate.dialect.FirebirdDialect

 

====================================================================================================

20com.atomikos.icatch.SysException: Error in init(): Log already in use

原因:在往客户服务器上面部署项目的时候碰到的问题。

 

解决方法:部署之后不可以用tomcat启动,必须要重新启动平台服务。

在项目中使用atomikos,如果在同一个环境中部署两个以上这 种项目,则可能会报出com.atomikos.icatch.SysException: Error in init(): Log already in use异常,这个信息是因为atomikos在默认情况下是将console_file_namelog_base_name设置为默认 值:tm.outtmlog0.log,并且会将这两个文件上锁,导致其他线程无法访问,所以当多个项目都未指定这一名称时就会出现上述异常信息

解决办法:

在每一个项目中都指定atomikos的文件名称,修改jta.properties文件中的

com.atomikos.icatch.console_file_name
com.atomikos.icatch.log_base_name

两个属性的值,保证每个项目的名称都不一样

例如:

第一个项目中使用默认值,则自动生成为tm.outtm.out.lcktmlog0.logtmlog.log.lck四个文件;

第二个项目中在jta.properties文件中指定属性名称:

com.atomikos.icatch.console_file_name = rm.out

com.atomikos.icatch.log_base_name = rmlog.log

启动服务时就会自动生成rm.outrm.out.lckrmlog0.logrmlog.log.lck四个文件;

这时两个项目使用的文件就不会产生冲突

====================================================================================================

21 无法执行该操作,因为链接服务器”Server_202”OLE DB 访问接口 “SQLNCLI10″ 无法启动分布式事务

原因:调用存储过程的方式有问题,必须用JDBC方式调用存储过程才可以正常调用。咋一看以为是分布式事务的问题。

解决方法:使用JDBC的方式调用存储过程代替普通调用方式。

代码如下:

运行报错的代码(普通方式:只有dao.impl中写代码):

/**

 * 查找符合条件的排污企业放入Map集合

 * @param userName 登录名

 * @return Map<String,Object> 键值对的集合

 */

@Override

public Map<String,Object> findAllCommunication(String userName) {

//创建用于存储键值对的map集合

Map<String, Object> map = new HashMap<String, Object>();

//创建session对象

Session session = this.getSession();

//创建事务的对象

Transaction trans = session.beginTransaction();

//调用存储过程

SQLQuery query = session.createSQLQuery("{Call ProcYB_GetPSList(?)}");

//为存储过程设置输入参数

query.setString(0,userName == null ? "" : userName);

//提交事务

trans.commit();

//获取存储过程的运行结果(得到的结果是Object类型的数组集合)存入list集合

List list = query.list();

//循环遍历该结果集合

for (int i = 0; i < list.size(); i++) {

//Object数组类型的对象objs接收每一次外层循换得到的对象

Object[] objs = (Object[]) list.get(i);

//通过内层循环取出每一个objs集合中的数据放入map集合中

for (int j = 0; j < objs.length; j++) {

if (j==0&&StringUtils.isNotEmpty(objs[j].getClass().getName())) {

map.put("psCode"+i,objs[0].toString());

}else{

map.put("psName"+i,objs[1].toString());

}

}

}

return map;

}

 

 

/**

 * 根据所获的的企业的PSName获取他的监控点

 * @param pscode 企业代码

 * @return Map<String,Object> 键值对的集合

 */

@Override

public Map<String, Object> findAllOutPutCode(String psCode) {

//设置Long类型的变量,用于将String类型的企业代码转换为数据库中的bigint类型的数据

Long psCode1;

//创建用于存储键值对的map集合

Map<String, Object> map = new HashMap<String, Object>();

//创建session对象

Session session = this.getSession();

//创建事务的对象

Transaction trans = session.beginTransaction();

//调用存储过程

SQLQuery query = session.createSQLQuery("{Call ProcYB_GetOutputInfoByPSCode(?)}");

if ("".equals(psCode)||psCode==null) {

psCode1 = (long) -1;

}else{

psCode1 = Long.parseLong(psCode);

}

//为存储过程设置输入参数

query.setLong(0,psCode1 == null ? 0 : psCode1);

//提交事务

trans.commit();

//获取存储过程的运行结果(得到的结果是Object类型的数组集合)存入list集合

List list = query.list();

//循环遍历该结果集合

for (int i = 0; i < list.size(); i++) {

//Object数组类型的对象objs接收每一次外层循换得到的对象

Object[] objs = (Object[]) list.get(i);

//通过内层循环取出每一个objs集合中的数据放入map集合中

for (int j = 0; j < objs.length; j++) {

if (j==2&&StringUtils.isNotEmpty(objs[j].getClass().getName())) {

map.put("outPutName"+i,objs[2].toString());

}else if(j==1&&StringUtils.isNotEmpty(objs[j].getClass().getName())){

map.put("outPutCode"+i,objs[1].toString());

}

}

}

return map;

}

 

 

 

正常运行的代码(JDBC方式:不光是dao.impl层中,而且web层中还要有类JdbcUtil.java并且要有sqljdbc4.jar包的驱动支持,还要在MANIFEST.MF文件中配置,还要在build.properties文件中配置):

Dao.impl层中的方法:

/**

 * 查找符合条件的排污企业放入Map集合(JDBC方式)

 * @return Map<String,Object> 键值对的集合

 */

@Override

public Map<String,Object> findAllCommunication(String userName) {

//创建用于存储键值对的map集合

Map<String, Object> map = new HashMap<String, Object>();

List<Records> recordList = new ArrayList<Records>();

try {

Connection dbConn = JdbcUtil.getConn();

CallableStatement statement = dbConn.prepareCall("SET NOCOUNT ON exec dbo.ProcYB_GetPSList ?");

statement.setString(1, userName==null ? "" : userName);

ResultSet rs = statement.executeQuery();

while (rs.next()) {

Records c = new Records();

String psCode = rs.getString("psCode");

String psName = rs.getString("psName");

 

c.setPsCode(psCode);

c.setPsName(psName);

 

recordList.add(c);

}

statement.close();

} catch (Exception e1) {

e1.printStackTrace();

}

if (recordList!=null&&recordList.size()>0) {

for (int i = 0; i < recordList.size(); i++) {

Records record = recordList.get(i);

if (record!=null&&StringUtils.isNotEmpty(record.getPsCode())) {

map.put("psCode"+i,record.getPsCode());

}

if(record!=null&&StringUtils.isNotEmpty(record.getPsName())){

map.put("psName"+i,record.getPsName());

}

}

}

 

return map;

}

 

 

/**

 * 根据所获的的企业的PSName获取他的监控点(JDBC方式)

 * @param pscode 企业代码

 * @return Map<String,Object> 键值对的集合

 */

@Override

public Map<String, Object> findAllOutPutCode(String psCode) {

//设置Long类型的变量,用于将String类型的企业代码转换为数据库中的bigint类型的数据

Long psCode1;

//创建用于存储键值对的map集合

Map<String, Object> map = new HashMap<String, Object>();

List<Records> recordList = new ArrayList<Records>();

try {

Connection dbConn = JdbcUtil.getConn();

CallableStatement statement = dbConn

.prepareCall("SET NOCOUNT ON exec dbo.ProcYB_GetOutputInfoByPSCode ?");

statement.setString(1, psCode==null ? "" : psCode);

ResultSet rs = statement.executeQuery();

while (rs.next()) {

Records c = new Records();

String outPutCode = rs.getString("outPutCode");

String outPutName = rs.getString("outPutName");

 

c.setOutPutCode(outPutCode);

c.setOutPutName(outPutName);

 

recordList.add(c);

}

statement.close();

} catch (Exception e1) {

e1.printStackTrace();

}

if (recordList!=null&&recordList.size()>0) {

for (int i = 0; i < recordList.size(); i++) {

Records record = recordList.get(i);

if (record!=null&&StringUtils.isNotEmpty(record.getOutPutCode())) {

map.put("outPutCode"+i,record.getOutPutCode());

}

if(record!=null&&StringUtils.isNotEmpty(record.getOutPutName())){

map.put("outPutName"+i,record.getOutPutName());

}

}

}

 

return map;

}

 

Web层中JdbcUtil.java类中的代码:

package com.jointsky.jointframe.record.management.web;

 

import java.sql.Connection;

import java.sql.DriverManager;

 

public class JdbcUtil {

public static Connection getConn() {

String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

 

String dbURL = "jdbc:sqlserver://10.194.136.131:1433;SelectMethod=cursor;DatabaseName=JointFrame31";

// String dbURL = "jdbc:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=JointFrame31";

 

String userName = "sa";

 

String userPwd = "123.com";

 

// String userPwd = "joint@123";

Connection dbConn = null;

try {

 

Class.forName(driverName);

 

dbConn = DriverManager.getConnection(dbURL, userName, userPwd);

 

System.out.println("连接数据库成功");

 

} catch (Exception e) {

 

e.printStackTrace();

 

System.out.print("连接失败");

 

}

return dbConn;

}

}

 

MANIFEST.MF文件中配置:

 

Build.properties文件中的配置:

 

sqljdbc4.jar包放入lib文件夹中,添加支持。

 

====================================================================================================

 

22org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

原因:再给数据库中放入新数据的时候加了id,然而有了id,系统默认为修改方法就回去在库中查找,所以出错。

解决方法:将生成的id去掉。

 

 

23:该语句没有返回结果集

如果查询执行的时候数据库返回”该语句没有返回结果集。“这样的错误,存储过程中少了一句代码:SET NOCOUNT ON
 

 

 

24:org.springframework.beans.factory.BeanCreationException

tomcat的lib文件夹下为加载上对应的jar包,将对应的jar包拷贝进去就可以了

转载于:https://www.cnblogs.com/shuilangyizu/p/6018668.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/153262
推荐阅读
相关标签
  

闽ICP备14008679号