如何在循环中相应地将数据存储在数据库列中
How to store data in database columns accordingly within a loop
我在矢量 table 中有一个项目列表,但项目大小可能有不同的大小,我如何根据项目编号相应地将这些项目存储在数据库列中。示例:我有 [apple,red,24]
的列表项 我想通过循环将此项目相应地存储在数据库列 value1= apple
、value2=red
、value3=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();
我在矢量 table 中有一个项目列表,但项目大小可能有不同的大小,我如何根据项目编号相应地将这些项目存储在数据库列中。示例:我有 [apple,red,24]
的列表项 我想通过循环将此项目相应地存储在数据库列 value1= apple
、value2=red
、value3=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();