Java 拆分对象

Java 拆分对象,java,arraylist,Java,Arraylist,我正在实现一个接口setObject,它将接受String、int、double等数据类型,我将在Insert语句中使用它。但在数据库中插入数据时,它会给我一个值[a,b,c][a,b,c][a,b,c]。如何避免这种输出 接口: public interface CallableStatement { ArrayList<Object> myList = new ArrayList<>(); public void setObject(ArrayList

我正在实现一个接口
setObject
,它将接受String、int、double等数据类型,我将在Insert语句中使用它。但在数据库中插入数据时,它会给我一个值
[a,b,c][a,b,c][a,b,c]
。如何避免这种输出

接口:

public interface CallableStatement
{
    ArrayList<Object> myList = new ArrayList<>();
    public void setObject(ArrayList<Object> myList);

}

public class Position implements CallableStatement
{
    String departmentName;
    String departmentType;
    String departmentDescription;

    public Position()
    {
        array();
    }

    public void array()
    {
        ArrayList<Object> myList = new ArrayList<Object>();
        myList.add(departmentName);
        myList.add(departmentType);
        myList.add(departmentDescription);
    }


    @Override
    public void setObject(ArrayList<Object> myList) 
    {
        String query = "{call insertPositions(?,?,?)}";

        try(Connection con = DBUtil.getConnection(DBType.MYSQL);
            java.sql.CallableStatement cs = con.prepareCall(query);)
                                    //Prepare the stored procedure call
        {
            //Setting the parameters
            cs.setObject(1, myList.toString());
            cs.setObject(2, myList.toString());
            cs.setObject(3, myList.toString());
            cs.executeUpdate();
        }
        catch(SQLException e)
        {
            System.err.println("Error: "+e.getMessage());
            System.err.println("Error: "+e.getErrorCode());
            System.err.println("Error: "+e.getSQLState());
        }
    }
}
公共接口CallableStatement
{
ArrayList myList=新的ArrayList();
public void setObject(ArrayList myList);
}
public类Position实现CallableStatement
{
字符串departmentName;
字符串部门类型;
字符串部门描述;
公共职位()
{
数组();
}
公共空数组()
{
ArrayList myList=新的ArrayList();
myList.add(部门名称);
myList.add(部门类型);
myList.add(部门说明);
}
@凌驾
公共void setObject(ArrayList myList)
{
字符串查询=“{调用插入位置(?,?)}”;
try(Connection con=DBUtil.getConnection(DBType.MYSQL);
java.sql.CallableStatement cs=con.prepareCall(查询);)
//准备存储过程调用
{
//设置参数
cs.setObject(1,myList.toString());
cs.setObject(2,myList.toString());
cs.setObject(3,myList.toString());
cs.executeUpdate();
}
捕获(SQLE异常)
{
System.err.println(“错误:+e.getMessage());
System.err.println(“错误:+e.getErrorCode());
System.err.println(“错误:+e.getSQLState());
}
}
}
图形用户界面:

private void addDepartmentBtnActionPerformed(java.awt.event.ActionEvent evt){
String departmentName=tfDepartmentName.getText();
字符串departmentType=tfDepartmentType.getText();
String departmentDescription=tfDescription.getText();
ArrayList addPositionsList=新的ArrayList();
addPositionsList.add(部门名称);
addPositionsList.add(部门类型);
添加职位列表。添加(部门描述);
CallableStatement cs=新位置();
cs.setObject(addPositionsList);
} 
但是:

很明显,当你这样做的时候,你会得到[a,b,c][a,b,c][a,b,c]作为你的三个对象

相反,尝试

cs.setObject(1, myList.get(0).toString());
cs.setObject(2, myList.get(1).toString());
cs.setObject(3, myList.get(2).toString());

我认为这就是问题所在,
cs.setObject(1,myList.toString())myList.toString()
,这将为每个参数提供输出:
[a,b,c]

您可以使用myList.get(index#int)


PS:在将对象插入列表时,请尝试固定对象的位置,以避免出现超出预期的顺序。

很抱歉,您的代码在几个方面被设计破坏了。请考虑使用java持久化API或Spring数据。我明白为什么在数组中有多个值。Francisunox还有,看起来这里有一种模式。。。类似于
cs.setObject(X,myList.get(X-1.toString());)
cs.setObject(1, myList.toString());
cs.setObject(2, myList.toString());
cs.setObject(3, myList.toString());
myList.toString() = [a,b,c]
cs.setObject(1, myList.get(0).toString());
cs.setObject(2, myList.get(1).toString());
cs.setObject(3, myList.get(2).toString());