当我将 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!");
}
}
任何人都可以告诉我,我的代码有什么问题吗?。
(注意:相同类型的逻辑可以在我的另一个项目中接受,但在这里抛出异常)。
答案 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();
现在在这个例子中我将一个向量转换为字符串,所以它是一个有效的编译。