• 所有异常


    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包拷贝进去就可以了

  • 相关阅读:
    android adb常用命令
    weblogic 优化设置 http://wenku.baidu.com/view/c42e7a5bbe23482fb4da4cf2.html
    Ajax+json实现菜单动态级联
    浏览器兼容性
    登录相关
    Java 日期处理
    QBC分页查询
    WebService
    MD5加密
    JSON与JAVA数据的转换
  • 原文地址:https://www.cnblogs.com/shuilangyizu/p/6018668.html
Copyright © 2020-2023  润新知