jar包导出链接gp报错越界

java项目,在eclipse运行正常,但是导出jar包,单独运行时,gp数据库连接失败,报错是字符串下标越界
开始以为哪里写的有问题,重新创建了一个测试工程,还是报错


```java

//如下是连接GP的类和方法
public class GPCON {
    public static String connectionString = "jdbc:pivotal:greenplum://172.26.32.25:5432;DatabaseName=mtp";
    public static String user = "admin";
    public static String password = "admin*";
    Connection connection = null;
    
    /**连接数据库*/
    public void con(){
        try {
        Class.forName("com.pivotal.jdbc.GreenplumDriver");
        connection = DriverManager.getConnection(connectionString,user,password);
        System.out.println("GP数据库连接成功!!!");
        } catch (Exception e) {
        System.err.println("数据库连接出现异常 " + e.getMessage());
        e.printStackTrace();
        return;
        }
    }    
    
}



//如下是调用的类和方法
public class T {
public static void main(String[] args) {
    GPCON gpcon =new GPCON();
    gpcon.con();
}
}








打包jar运行报错如下
数据库连接出现异常 String index out of range: -6
java.lang.StringIndexOutOfBoundsException: String index out of range: -6
        at java.lang.String.substring(Unknown Source)
        at com.pivotal.jdbc.greenplumbase.ddda.<init>(Unknown Source)
        at com.pivotal.jdbc.greenplumbase.BaseConnection.a(Unknown Source)
        at com.pivotal.jdbc.greenplumbase.BaseDriver.connect(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at GPCON.con(GPCON.java:18)
        at T.main(T.java:5)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)

```

下标越界与在 eclipse 中运行还是打包成 jar 包运行无关,而是访问了超出字符串最大下标的字符,建议在程序中加一个判断,如果下标位置超过字符串的最大下标位置,就不要取字符串中的字符了。

终于找到问题了,不是驱动的问题,报错不符,实际报错应该是找不到驱动类,之所以报错下标越界,应该是eclipse工具的问题,生成jar包的配置文件,类路径下多了一行,就是这一行导致的报错,删除后就会有真正的报错。解压驱动包把com文件夹复制到根目录下解决