我正在尝试在下面的方法'addClient'中的'data'数组中连接一个名为'update'的String变量中的多个对象:
public int addClient(Object[] data) {
try {
if (((String)data[0]).trim().isEmpty() || ((String)data[1]).trim().isEmpty() || ((int)data[2] < 0) || ((int)data[3] <= 0)) {
return StatusBar.ERR_INVALID_INPUT_CODE;
}
// the line below is causing the exception
String update = "INSERT INTO Client VALUES(" + ((String)data[0]).trim() + "," + ((String)data[1]).trim() + "," + ((Integer)data[3]).intValue() + "," + ((Integer)data[4]).intValue() + "," + ((Boolean)data[2]).booleanValue() + "," + ((String)data[5]).trim() + ")";
if (statement.executeUpdate(update) != 1) {
return StatusBar.ERR_INTERNAL_CODE;
}
}
catch (Exception e) {
e.printStackTrace();
return StatusBar.ERR_INTERNAL_CODE;
}
return StatusBar.ERR_SUCCESS_CODE;
}
但是当上面的代码执行时;引发异常,显示以下消息:
java.lang.ClassCastException:java.lang.Integer无法强制转换为 java.lang.String中 在Model.addClient(Model.java:43)
'data'对象数组是通过调用以下方法获得的:
public Object[] getFields() {
return new Object[]{jTextFieldName.getText(), jTextFieldAddress.getText(),
jComboBoxType.getSelectedIndex(),
jSpinnerPhone.getValue(), jSpinnerFax.getValue(),
jTextFieldWebsite.getText()};
}
我做了很多搜索并尝试了很多方法,包括String.valueOf
和Integer.toString
,但没有取得任何成功..
为什么我会这样做?怎么解决?
答案 0 :(得分:2)
你有很多选项投射到String。
您选择了“简单”选项,该选项仅在对象实际为String时才有效,您只需将其(从Object)向下转换为String。
尝试使用以下选项之一:
让我知道它现在是否正常工作:)
答案 1 :(得分:1)
如果您打算在对象上调用.toString()
方法,而不是强制转换为String。
您正在投射对象
即
if (((String)data[0]).trim().isEmpty() || ((String)data[1]).trim().isEmpty() || ((int)data[2] < 0) || ((int)data[3] <= 0))
到
if (data[0].toString().trim().isEmpty() || (data[1].toString().trim().isEmpty() || ((int)data[2] < 0) || ((int)data[3] <= 0))
假设data[3]
和data[2]
的类型为整数。
* PS:您还可以记录值,以确定值是什么。
答案 2 :(得分:1)
data
数组的元素可以是任何引用类型。因此,如果不首先检查其类型,则无法将它们转换为String
。
幸运的是,您可以简单地调用他们的toString
方法。
更改
((String)data[0])
到
data[0].toString()
答案 3 :(得分:0)
你可以尝试如下,让我知道它是怎么回事。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/css/materialize.min.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js"></script>
<div class="row">
<div class="col s12">
<div class="row">
<div class="input-field col s12">
<i class="material-icons prefix">search</i>
<input type="text" id="autocomplete-input" class="autocomplete">
<label for="autocomplete-input">Autocomplete</label>
</div>
</div>
</div>
</div>