我有以下 Excel。
name qualification address
aaa BE Chennai
bbb BCA Cbe
我的数据库表
columnName
包含与上面相同的内容。 (即姓名、资格、地址)。
我可以使用以下代码将值导入 PostgreSQL 数据库表,就像它们在 Excel 中一样:
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(inputFile));
// Get first sheet from the workbook
XSSFSheet sheet = wb.getSheetAt(0);
Row row;
Cell cell;
// Iterate through each rows from first sheet
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext())
{
row = rowIterator.next();
// System.out.println ("Row No.: " + row.getRowNum ());
// For each row, iterate through each columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext())
{
cell = cellIterator.next();
System.out.println(cell +"\t");
switch (cell.getCellType())
{
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue() + "\t");
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue() + "\t");
break;
case Cell.CELL_TYPE_STRING:
//System.out.println(cell.getStringCellValue() + "\t");
list.add(cell.getStringCellValue());
break;
case Cell.CELL_TYPE_BLANK:
System.out.println(" ");
break;
default:
System.out.println(cell);
}
}
String name = row.getCell(0).getStringCellValue();
String add = row.getCell(1).getStringCellValue();
String quali = row.getCell(2).getStringCellValue();
System.out.println(name+add+quali);
InsertRowInDB(name,add,quali);
System.out.println("");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
public void InsertRowInDB(String name,String add,String quali) throws SQLException, ClassNotFoundException{
Class.forName("org.postgresql.Driver");
System.out.println("connected");
Connection conn=DriverManager.getConnection("jdbc:postgresql:postgres", "postgres","sridevi");
if(!name.equals("name") && !add.equals("qualification") && !quali.equals("address")){
String query = "Insert into excel(name,qualification,address) values(?,?,?)";
PreparedStatement ps = conn.prepareStatement(query);
ps.setString(1, name);
ps.setString(2, add);
ps.setString(3, quali);
ps.executeUpdate();}
System.out.println("Values Inserted Successfully");
}
如果我的数据库包含像(姓名,地址,资格)这样的列名称,
如何将上述Excel文件导入到数据库表中?
如何将电子表格列标题映射到数据库列标题?
请帮我找到这个。
如果您在
INSERT
语句中显式引用列,则 PostgreSQL 数据库中定义的列顺序并不重要。
所以,这个:
String query = "Insert into excel(name,qualification,address) values(?,?,?)";
PreparedStatement ps=conn.prepareStatement(query);
ps.setString(1, name);
ps.setString(2, quali);
ps.setString(3, add);
与此相同:
String query = "Insert into excel(address, name, qualification) values(?,?,?)";
PreparedStatement ps=conn.prepareStatement(query);
ps.setString(1, add);
ps.setString(2, name);
ps.setString(3, qualifi);
至于映射 Excel 工作表的标题字段以用作 SQL
INSERT
语句的字段名称,您可以循环遍历工作表'
s 行,并使用第一行作为列名称,然后仅插入以下行。
public String loadSheetInDatabase(String inputFile) {
try {
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(inputFile));
// Get first sheet from the workbook
XSSFSheet sheet = wb.getSheetAt(0);
Row row;
Cell cell;
// Iterate through each rows from first sheet
Iterator < Row > rowIterator = sheet.iterator();
Boolean parsedHeaders = false;
List < String > headers = new ArrayList < String > ();
List < String > rowValues = null;
while (rowIterator.hasNext()) {
row = rowIterator.next();
if (parsedHeaders) {
rowValues = new ArrayList <String> ();
}
// System.out.println ("Row No.: " + row.getRowNum ());
// For each row, iterate through each columns
Iterator < Cell > cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
cell = cellIterator.next();
if (!parsedHeaders) {
headers.add(cell.getStringCellValue());
} else {
rowValues.add(cell.getStringCellValue());
}
}
if(!parsedHeaders){
parsedHeaders = true;
}else{
String rowValuesString = "";
for(String fieldValue : rowValues){
rowValuesString += fieldValue + " ";
}
System.out.println(rowValuesString);
InsertRowInDB(headers, rowValues);
System.out.println("");
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
public void InsertRowInDB(List<String> headers, List<String> values) throws SQLException, ClassNotFoundException {
Class.forName("org.postgresql.Driver");
System.out.println("connected");
Connection conn = DriverManager.getConnection("jdbc:postgresql:postgres", "postgres", "sridevi");
String insertColumns = "";
String preparedStatementClause = "";
for(int i = 0; i < headers.size(); i++){
String fieldValue = headers[i];
insertColumns += fieldValue;
preparedStatementClause += "?";
if(i <= (headers.size() - 1)){
insertColumns += ", ";
preparedStatementClause += ", ";
}
}
String query = String.format( "Insert into excel(%s) values(%s)" , insertColumns, preparedStatementClause);
PreparedStatement ps = conn.prepareStatement(query);
for(int i = 0; i < values.size(); i++){
ps.setString(i, values[i]);
}
ps.executeUpdate();
System.out.println("Values Inserted Successfully");
}
但是,为了清楚起见,您可以考虑使用命名参数。 它们无法通过 JDBC 中的默认值。检查此线程了解一些详细信息。
我建议具体熟悉 Apache Commons DBUtils 并总体熟悉 Apache Commons 库。
public String loadSheetInDatabase(String inputFile) 抛出 ClassNotFoundException, SQLException { 尝试 { XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(inputFile));
// Get first sheet from the workbook
XSSFSheet sheet = wb.getSheetAt(0);
Row row;
Cell cell;
// Iterate through each rows from first sheet
Iterator < Row > rowIterator = sheet.iterator();
Boolean parsedHeaders = false;
List < String > headers = new ArrayList < String > ();
List < String > rowValues = null;
while (rowIterator.hasNext()) {
row = rowIterator.next();
if (parsedHeaders) {
rowValues = new ArrayList <String> ();
}
// System.out.println ("Row No.: " + row.getRowNum ());
// For each row, iterate through each columns
Iterator < Cell > cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
cell = cellIterator.next();
if (!parsedHeaders) {
headers.add(cell.getStringCellValue());
} else {
rowValues.add(cell.getStringCellValue());
}
}
if(!parsedHeaders){
parsedHeaders = true;
}else{
String rowValuesString = "";
for(String fieldValue : rowValues){
rowValuesString += fieldValue + " ";
}
System.out.println(rowValuesString);
InsertRowInDB(headers, rowValues);
System.out.println("");
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
public void InsertRowInDB(List<String> headers, List<String> values) throws SQLException, ClassNotFoundException {
Class.forName("org.postgresql.Driver");
System.out.println("connected");
Connection conn = DriverManager.getConnection("jdbc:postgresql:postgres", "postgres", "sridevi");
String insertColumns = "";
String preparedStatementClause = "";
for(int i = 0; i < headers.size(); i++){
String fieldValue = headers.get(i);
insertColumns += fieldValue;
preparedStatementClause += "?";
if(i <= (headers.size() - 1)){
insertColumns += ", ";
preparedStatementClause += ", ";
}
}
String query = String.format( "Insert into excel(%s) values(%s)" , insertColumns, preparedStatementClause);
PreparedStatement ps = conn.prepareStatement(query);
for(int i = 0; i < values.size(); i++){
ps.setString(i, values.get(i));
}
ps.executeUpdate();
System.out.println("Values Inserted Successfully");
}