如何在循环中相应地将数据存储在数据库列中

How to store data in database columns accordingly within a loop

我在矢量 table 中有一个项目列表,但项目大小可能有不同的大小,我如何根据项目编号相应地将这些项目存储在数据库列中。示例:我有 [apple,red,24] 的列表项 我想通过循环将此项目相应地存储在数据库列 value1= applevalue2=redvalue3=24 中?下面是当前的示例代码和数据库列。

数据库设计示例

VALUE1 | VALUE2 | VALUE3 |VALUE4 | VALUE5

jsp 文件

    for(int i =0; i <2; i++)
        {

            Vector vTables = (Vector)session.getAttribute("SES_VALUE"+i); 
            //first vector list [[apple,red,5],[orange,orange,3]]
            //second vector list [[apple,red,5,big],[orange,orange,4,small]]

                for(int k = 0; k < vTables.size(); k++) 
                { 

                    Vector vTemp2           = (Vector) vTables.elementAt(i); 
                   //first loop vTemp2 list [[apple,red,5],[orange,orange,3]] 

                        DB_BS.makeConnection();
                        iRowAffected = DB_BS.insert_table_value(vTemp2);
                        DB_BS.takeDown();   
                }

        }

java 文件——我卡在这部分

public int insert_table_value(Vector vtTable)throws Exception 
{
    //vtTable item will be  [[apple,red,5],[orange,orange,3]] 

    for(int k = 1; k <= vtTable.size(); k++) 
    { 
        //in this sValue will get each items from the vtTable
        String sValue           = (String) vtTable.elementAt(k); 

       //how to write an sql query at here??  
       //what i plan to do is, if sValue have 3 item, it will store the value in database per columns accodingly
        String myQuery = "INSERT INTO TB_BS_VALUE ( ) VALUES ( )"; 

        pstmt2 = new PreparedStatementLogable(myConn, myQuery);
        pstmt2.setString(k, sValue);

        myQuery = pstmt2.toString();
        pstmt = myConn.prepareStatement(myQuery);
        RowsAffected = pstmt.executeUpdate();

        if (RowsAffected > 0) 
            insertSQLLog("SQL", myQuery, "", "", "", "");
    }
    return RowsAffected;
}

字符串 sValue 是单个字符串,因此首先应该将其拆分(根据您的评论,用“,”)

String[] result = sValue.split(",");

那么你可以

String columns = "";
String values = "";

for (int i = 0; i <= result.size(); i++) {
   columns += "VALUE" + (i+1) +",";
   values+="?,";
}

// get rid of trailing ,
columns = b.replace(columns.lastIndexOf(","), columns.lastIndexOf(",") + 1,""); 
values = b.replace(values.lastIndexOf(","), values.lastIndexOf(",") + 1,"");

String myQuery = "INSERT INTO TB_BS_VALUE ("+columns+") VALUES ("+values+")"; 

pstmt = new PreparedStatementLogable(myConn, myQuery);

for (int i = 0; i <= result.size(); i++) {
    pstmt.setString(i, result[i]);
}

两个 for 循环可以合并为一个,不确定这个想法,也不能在 atm 上尝试。

注意

RowsAffected = pstmt.executeUpdate(); 

不应该编译,应该是

int rowsAffected = pstmt.executeUpdate();