繁体   English   中英

在Java中从Dao类保存数组

[英]Save Array From Dao Class in Java

如何访问从EmployeeEmployeeDao的字符串的ename数组。 我想用一个for循环保存值,例如st.setString(1,ename[l]) 如果我在bean类中编写一个EmployeeSave()方法没有问题,但是我想在EmployeeDao编写它

st.setString(1, E.getEname()) 

给我错误,因为PreparedStatement类型的setString(int, String)方法不适用于参数(int,String [])。

员工班

包com;

public class Employee {

    public String[] getEname() {
        return ename;
    }

    public void setEname(String[] ename) {
        this.ename = ename;
    }

    private String ename[];

}

EmployeeDao.class

package com;
import java.sql.*;
public class EmployeeDao {

    public static void SaveEmployee(Employee E) {
        Connection con = null;
        String sql = "";

        try 
        {
            PreparedStatement st = con.prepareStatement(sql);
            for (int l = 0; l < E.getEname().length; l++) 
            {
                st.setString(1, E.getEname());

            }
        }

    catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}


}

我认为问题出在您定义Employee.ename字符串数组的方式中。 只需使用private String ename; 代替

String [] ename是一个字符串数组,而不是单个字符串。 您可以通过两种方式将其保存在数据库中:

1)单独的名称表

正确的方法是使用列创建单独的ename表:

employeeId
ename

在(employeeId,ename)上创建复合主键。

然后将每个ename保存为ename表中的单独一行。 然后从数据库中读取Employee,您将需要按employeeId从ename表中读取所有ename。

例如,假设我们有一个id为1且ename = [“ name1”,“ name2”]的Employee。 数据库的ename表中将包含以下数据:

employeeId | ename
------------------
          1| name1
          1| name2

2)将String []序列化为String

您可以将ename数组序列化为单个字符串(如JSON,XML,逗号分隔值),并将单个字符串值存储在数据库中。

从数据库读取数据时,需要从String反序列化为String []。

例如,假设我们有一个id为1且ename = [“ name1”,“ name2”]的Employee。 如果数据序列化为JSON,我们将在数据库的Employee表中包含以下数据:

    employeeId | ename
---------------------------------------
             1 | ["name1","name2"]  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM