【问题标题】:Write arraylist to a database java将arraylist写入数据库java
【发布时间】:2012-08-21 01:56:24
【问题描述】:

我有两个数组列表插入到数据库表的 2 列中,如下所示:

arraylist1: 123444, 324555, 6423643, 532326
arraylist2: jkfdsl, nkjfsdlj, jdslkfjdlkj, jfsldjfsk, fjdlskjfs

我编写了以下代码来插入数组列表,但它不起作用。感谢您的帮助。

try {
// Prepare a statement to insert a record

String sql = "INSERT INTO soundsdata.splog (arraylist1, arraylist2) VALUES(?,?)";
pstmt = (PreparedStatement) con.prepareStatement(sql);

pstmt.setArray(1,sptospring);
pstmt.setString(2,eachList.toString());

// Insert the row
pstmt.executeUpdate();
}finally {
pstmt.close();
}

【问题讨论】:

  • 这些列是什么类型的?
  • 让我直截了当地说:arraylist1 的全部内容放在一列,arraylist2 的全部内容放在第二列?并且这些值将以逗号分隔的格式存储?这就是你要找的东西吗?
  • 使用ArrayList可以插入多条记录
  • Sujay,是的,这就是我要找的。​​span>
  • 那么基本上,你会创建一行?

标签: java database jdbc insert arraylist


【解决方案1】:

String[] stringArray = lists.toArray(new String[lists.size()]);

            String string1 = stringArray[0];
            String string2 = stringArray[1];
            String string3 = stringArray[2];
            String string4 = stringArray[3];
            String string5 = stringArray[4];

//然后写查询插入到数据库中

插入表名值(string1 ......)

【讨论】:

    【解决方案2】:

    插入多条记录:

    public String saveOrder(ArrayList<KIT0053MBean> insertList){     
        System.out.println("SaveOrder DAO  Method is calling " +insertList.size());
        Connection con=null;
        PreparedStatement ps2=null;
        try {
            con=open();
            con.setAutoCommit(false);
            con.getTransactionIsolation();
            ps2=con.prepareStatement(sql1);             
            Iterator<KIT0053MBean> it=insertList.iterator();            
            while(it.hasNext()){
                KIT0053MBean order=(KIT0053MBean)it.next();                 
                ps2.setString(1, model.getCustomerid());
                ps2.setString(2, model.getSerialid());                  
                ps2.addBatch();
            }               
            int i[]=ps2.executeBatch();
            System.out.println("###### insertion1### row   "+i.length);    
            con.commit();
            con.setAutoCommit(true);                
        } catch (Exception e) 
        {               
            System.out.println(e.getMessage());     
        }finally{
            close(con);         
            close(ps2);             
        }
    }
    

    【讨论】:

    • 您是否只是粘贴了您最近编写的代码的一部分?在这里有con.getTransactionIsolation(); 有什么具体原因吗? OP 也从未在任何地方使用过KIT0053MBean!我可以在这里找到你的代码的很多问题,更不用说你会让 OP 对这个答案感到多么困惑!我真的不明白你发布这个答案背后的原因,当你在这里已经有另一个答案时(显然你可以编辑)
    【解决方案3】:
    PreparedStatement ps = connection.prepareStatement(query);            
    for (Record record : arraylist1) {
        int index=1;                        
        ps.setString(index++,record.getItem());
        ps.setString(index++,record.getItem2());
        //
    }
    ps.executeBatch();
    conn.commit(); 
    

    【讨论】:

    • 谢谢。我对“记录记录:arraylist1”有点困惑。 Record 是我需要导入的类库吗?它带有下划线作为错误,我不知道如何处理记录。顺便说一句,我是新手,谢谢。
    • Record是list泛型的实体对象,record是item.eg。书本
    • @MohammodHossain:将index 初始化为1,然后尝试在同一个循环中increment 它有什么意义?您基本上最终会将索引重置为 1
    • 对于每个循环都将在 list size 上继续。插入一条记录后索引将重新初始化
    • 插入一个记录后,索引将被重新初始化,每个循环继续直到列表大小为 0
    【解决方案4】:

    您可以这样做:

    假设您尝试创建一行,其中第一个 column 将包含第一个 ArrayList 的内容(以逗号分隔),第二个 column 将包含第二个ArrayList

    StringBuilder buffer = new StringBuilder();
    boolean processedFirst = false;
    String firstParam = null, secondParam = null;
    
    try{
        for(String record: arrayList1){
            if(processedFirst)
                buffer.append(",");
            buffer.append(record);
            processedFirst = true;
        }
        firstParam = buffer.toString();
    }finally{
        buffer = null;
    }
    processedFirst = false;
    buffer = new StringBuilder();
    try{
        for(String record: arrayList2){
            if(processedFirst)
                buffer.append(",");
            buffer.append(record);
            processedFirst = true;
        }
        secondParam = buffer.toString();
    }finally{
        buffer = null;
    }
    secondParam = buffer.toString();
    
    String sql = "INSERT INTO soundsdata.splog (arraylist1, arraylist2) VALUES(?,?)";
    try{
        psmt = (PreparedStatement) con.prepareStatement(sql);
        pstmt.setString(1,firstParam);
        pstmt.setString(2,secondParam);
        pstmt.executeUpdate();
    }finally {
        pstmt.close();
    }
    

    【讨论】:

    • @bdfios:很高兴为您提供帮助!让我知道这是否对您有用:)
    【解决方案5】:

    您不能将 ArrayList 存储在 varchar 列中。

    你需要存储一个字符串。

    【讨论】:

    • 他正在将列表转换为String
    • 谢谢。有没有办法即时将数组列表转换为字符串?我尝试了一个演员表,但它不起作用。
    • 或者您认为我可以将列更改为什么数据类型以便接受数组列表?
    • @bdfios:你想让字符串说什么?大多数数据库不支持数组列。
    • @Slaks,我要做的就是以“123444、324555、6423643、532326”的形式将数据存储到每一列。正如我在帖子中所描述的,我已经在 arraylist 中有数据,但是由于我无法将它作为 arraylist 写入数据库,这就是为什么我正在寻找一种解决方法,因此我的问题是,询问是否可以转换将 arraylist 动态转换为字符串,以便我可以将字符串存储在数据库中。
    猜你喜欢
    • 2022-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 2018-03-23
    • 2014-07-28
    相关资源
    最近更新 更多