我正在尝试将excel表中的数据插入到java中的数据库中。因为我已经使用ODBC连接了两个数据库。 excelsheet有2列cname和title。 在查询Excel电子表格后,我将cname和title的resultSet值存储到arraylist中。
List Cname = new ArrayList();
List Title=new ArrayList();
Cname.add(rs.getString("Cname"));
Title.add(rs.getString("Title"));
这样会产生这样的结果
[aaa, bbb,cccc, dddd]
[tree,human,animal,bird]
当我尝试使用插入查询将其插入SQL数据库时,它会像这样存储。
statement1.executeUpdate("INSERT INTO dbo.company (Cname,Title) SELECT
'"+Cname+"','"+Title+"'");
Cname Title
[aaa, bbb,cccc, dddd] [tree,human,animal,bird]
但我希望将其存储为
Cname Title
___________________________
aaa tree
bbb human
cccc animal
ddd bird
我该怎么做?请帮忙解决这个问题。
答案 0 :(得分:1)
在insert语句周围放置一个for
循环:
for(int i = 0; i < Cname.size(); i++)
statement1.executeUpdate("INSERT INTO dbo.company (Cname,Title) values ( '"+Cname.get(i)+"','"+Title.get(i)+"')");
答案 1 :(得分:1)
您必须插入/更新列表值,实际上您正在插入整个列表的字符串表示。
假设两个列表都存在(非空)并且具有相同的长度,那么这是一个简单的解决方案:
for (int i = 0; i < Cname.size(); i++ {
statement1.executeUpdate("INSERT INTO dbo.company (Cname,Title) SELECT
'"+Cname.get(i)+"','"+Title.get(i)+"'");
}
注意 - 每个java类都有一个toString()
方法的实现,当你“将一个对象用作一个字符串”时,就会调用该方法,就像在要创建的表达式中一样SQL语句。对于列表,该方法返回一个String,该String只包含括号中list元素的(String-representationations)。
答案 2 :(得分:0)
如果您的数据库是SQL Server,您可以参考以下Q&amp;答:只需准备xml数据并传递给存储过程。
How to Update SQL Server Table With Data From Other Source (DataTable)
答案 3 :(得分:0)
您可以创建此表单的单个SQL语句:
INSERT INTO dbo.company (Cname, Title)
VALUES ('aaa', 'tree'),
('bbb', 'human'),
('cccc', 'animal'),
('dddd', 'bird')
使用JDBC:
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO dbo.company (Cname,Title) VALUES ");
String glue = "";
for (int i = 0; i < Cname.size(); i++) {
sql.append(glue);
sql.append("('");
sql.append(Cname.get(i).toString().replace("'", "''"));
sql.append("', '");
sql.append(Title.get(i).toString().replace("'", "''"));
sql.append("')");
glue = ", ";
}
statement1.executeUpdate(sql.toString());
另一种语法(如果上述内容不适用于Excel电子表格)是:
INSERT INTO dbo.company (Cname, Title)
SELECT 'aaa', 'tree' UNION ALL
SELECT 'bbb', 'human' UNION ALL
SELECT 'cccc', 'animal' UNION ALL
SELECT 'dddd', 'bird'
或使用JDBC
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO dbo.company (Cname,Title) ");
String glue = "";
for (int i = 0; i < Cname.size(); i++) {
sql.append(glue);
sql.append("SELECT '");
sql.append(Cname.get(i).toString().replace("'", "''"));
sql.append("', '");
sql.append(Title.get(i).toString().replace("'", "''"));
sql.append("'");
glue = " UNION ALL ";
}
statement1.executeUpdate(sql.toString());