将Vector转换为String?

时间:2015-06-18 06:02:06

标签: java vector

当我将 vector转换为String 时,我遇到了问题。

错误:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Vector cannot be cast to java.lang.String
    at Package_Sync.Package_sync.dataToDB(Package_sync.java:98)
    at Package_Sync.Package_sync.<init>(Package_sync.java:29)
    at Package_Sync.Package_sync$3.run(Package_sync.java:319)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

这是我的代码:

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

    Vector temp = new Vector();
    temp.add(vectron1.get(i));

    for(int j=0;j<temp.size();j++){

        String sql = "insert into t_pkg_details(pkgname,classname)   values(?,?)";
        ps = con.prepareStatement(sql);

        String name = (String) temp.get(0);
        String value = (String) temp.get(1);

        ps.setString(1,name);
        ps.setString(2,value);
        ps.execute();

        System.out.println("Extra class Inserted Successfully!");
    }
}

任何人都可以告诉我,我的代码有什么问题吗?。

(注意:相同类型的逻辑可以在我的另一个项目中接受,但在这里抛出异常)。

3 个答案:

答案 0 :(得分:0)

问题可能是对象向量包含的不是String的类型:

使用:
注意:如果NullPointerException返回temp.get,则可能会抛出null。 如果ArrayIndexOutOfBoundsException的大小小于Vector,它也可以抛出2,您必须相应地更改代码。

String name = temp.get(0).toString(); 
String value =  temp.get(1).toString();

或者使用Hiru提到的代码(No NullPointerException但由于上述原因可以抛出ArrayIndexOutOfBoundsException):

String name = String.valueOf(temp.get(0)); 
String value =  String.valueOf(temp.get(1));

更好的方法是使用泛型:

Vector<String> temp = new Vector<String>();

然后您可以使用以下代码:

String name = temp.get(0);
String value = temp.get(1);

答案 1 :(得分:0)

去吧,

    String name = String.valueOf(temp.get(0));
    String value =  String.valueOf(temp.get(1));

如果 Object.toString(),如果实例为null,则会抛出 NullPointerException ,因此,可以说它不太安全。然而,使用 String.valueOf(),您可能无法检查是否为空。

作为 ajb suggested 您可以通过将代码包装在if else中来处理 ArrayIndexOutOfBoundsException

if (temp.size <= Your Max Index){
//your Code
}
else{
    throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

并获取信息 ArrayIndexOutOfBoundsException IndexOutOfBoundsException 的子类。

答案 2 :(得分:0)

 String name = (String) temp.get(0);
 String value = (String) temp.get(1);

我认为,你不能这样做,你试图将一个字符串转换为Vector,这就是java.lang.ClassCastException的原因。这是一个例子:

Vector vec1 = new Vector();
String str1 = vec1.toString();

现在在这个例子中我将一个向量转换为字符串,所以它是一个有效的编译。