
# 处理SQL异常
当JDBC操作（如执行SQL语句、处理结果集等）发生错误时，JDBC程序会抛出SQL异常。SQLException有getMessage()和printStackTrace()等常用方法，详细介绍请参见[java.sql.SQLException](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0116.html)。
以下代码展示了如何捕捉SQL异常。
```
try { 
   <some code>
   } 
 } catch(SQLException e) { 
     // System.out.println("exception: " + e.getMessage());      // 返回错误的描述信息 
     e.printStackTrace ();      // 将当前异常的堆栈信息打印到标准错误流 
}
```
以使用错误的列索引为例，展示捕捉到SQL异常后的报错信息。若在处理结果集的[示例步骤](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0088.html#ZH-CN_TOPIC_0000002620639983__section1468313117109)中，将rs.getString(2)写为rs.getString(3)。
- getMessage()方法使用示例
  ```
  try { 
     while (rs.next()) { 
        int c_customer_sk = rs.getInt(1);       
        String c_customer_name = rs.getString(3);      // 使用错误的列索引
        System.out.println("c_customer_sk: " + c_customer_sk + ", c_customer_name: " + c_customer_name);
     } 
   } catch(SQLException e) { 
       System.out.println("exception: " + e.getMessage());      // 返回错误的描述信息 
  }
  ```
  运行程序后会出现以下信息：
  ```
  exception: 栏位索引超过许可范围：3，栏位数：2。
  ```
  
- printStackTrace()方法使用示例
  ```
  try { 
     while (rs.next()) { 
        int c_customer_sk = rs.getInt(1);       
        String c_customer_name = rs.getString(3);      // 使用错误的列索引
        System.out.println("c_customer_sk: " + c_customer_sk + ", c_customer_name: " + c_customer_name);
     } 
   } catch(SQLException e) { 
       e.printStackTrace ();      // 将当前异常的堆栈信息打印到标准错误流 
  }
  ```
  运行程序后会出现以下信息：
  ```
  com.huawei.gaussdb.jdbc.util.PSQLException: 栏位索引超过许可范围：3，栏位数：2。
  at com.huawei.gaussdb.jdbc.jdbc.PgResultSet.checkColumnIndex(PgResultSet.java:4005)
  at com.huawei.gaussdb.jdbc.jdbc.PgResultSet.checkResultSet(PgResultSet.java:4041)
  at com.huawei.gaussdb.jdbc.jdbc.PgResultSet.getString(PgResultSet.java:2754)
  at Customer.main(Customer.java:54)
  ```
  
 
