如何用jdbc把excel表中的数据更新到mysql数据库中?
我这里没有实体类!
急! 求助中!!!!!
这个问题分两步走:
这个问题可以分两步
1.利用Excel第三方工具,将Excel文件读取到内存中。使用最简单,方便的工具是apache的poi工具包,自己网上下载 http://poi.apache.org/ ,使用方法网上一搜一大片。
如果是对于特别大的excel(大于20M的话),简单的读取方法就容易内存溢出了,需要采用流式读取的方式,参考http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api
2.将已读入内存的Excel数据,整理成写数据库的数据结构,然后插入数据库。这部分工作应该不用介绍了,就是基本的数据库操作方法,与excel无关了
可以参考如下链接http://skyuck.iteye.com/blog/453540
求采纳
String xlsx = "test.xlsx";
String path = "c://";
String xlsxPath = path + xlsx;
try {
ReadExcel.downLoadFromUrl(url, xlsx, path);
} catch (Exception e) {
j.setMsg("导入失败");
return j;
}
List<ArrayList<String>> list = ReadExcel.getExcelList(xlsxPath);
读出表格的数据,每一行都在list里面,从list取出操作就可以了
if( list.size>0){
for (int i = 1; i < list.size; i++) {
// 是否继续循环
boolean isFor = true;
for (int k = 0; k < list.get(0).size() && isFor; k++) {
switch (list.get(0).get(k)) {
case "姓名":
name=list.get(i).get(k);
break;
case "手机号":
mobile=list.get(i).get(k)
break;
default:
break;
}
}
}
//每一行操作
personService.insert(name,mobile);
}
可以循环单次新增到列表里面,也可以将每次信息放入集合中存起来,批量添加
ReadExcel :可以直接在网上百度一个即可
导进ojdbc6.jar和poi-3.2-FINAL-20081019.jar
package com.ilike.excelimportdata;
import java.sql.DriverManager;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
/**
注意:如果是window 7的用户,请务必修改一下你的mysql设置,重启之后再执行,负责会失败,修改方式如下
*配置好之后要创建数据库表,表结构与数据excel表的结构一致,请参考我的数据库表的格式,及excel的格式,都在下边
*/
public class ExcelImportDataTest {
// 创建静态全局变量
static Connection conn;
static Statement st;
public static void main(String[] args) {
testImportDataByExcel();
}
public static void testImportDataByExcel() {
conn = getConnection(); //同样先要获取连接,即连接到数据库
try {
// 以下sql语句中的文件路径需要与你在mysql的my.ini配置文件中配置的路径一致,excel表格需要在该路径下,这样导入可保证不会出错
String sql = "LOAD DATA INFILE 'D:/tmp/sql/student.excel' INTO TABLE student";// 更新数据的sql语句
st = (Statement) conn.createStatement(); //创建用于执行静态sql语句的Statement对象,st属局部变量
st.execute(sql);
conn.close(); //关闭数据库连接
} catch (SQLException e) {
System.out.println("更新数据失败");
}
}
/* 获取数据库连接的方法*/
public static Connection getConnection() {
Connection con = null; //创建用于连接数据库的Connection对象
try {
Class.forName("com.mysql.jdbc.Driver");// 加载Mysql数据驱动
con = (Connection) DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mydatabase", "root", "root");// 创建数据连接
} catch (Exception e) {
System.out.println("数据库连接失败" + e.getMessage());
}
return con; //返回所建立的数据库连接
}
}
换少了一张数据库的表的结构,补充如下
也可参照如下语句创建
CREATE TABLE student
(id
INT(11) NOT NULL AUTO_INCREMENT,name
VARCHAR(20) NOT NULL COMMENT '姓名',age
TINYINT(3) UNSIGNED DEFAULT NULL COMMENT '年龄',gender
TINYINT(3) UNSIGNED DEFAULT NULL COMMENT '性别,1男,0女'
PRIMARY KEY (id
)
) CHARSET=utf8 |
/*使用phpExcel插件实现Excel表格一键导入功能*/
/* Excel一键导入功能 */
public function actionDaoru() { /* 是否表单提交 */
if (isset($_POST['submit'])) {
$file = CUploadedFile::getInstanceByName('filename');
//获取上传的文件实例
if (in_array($file->getExtensionName(), array('xls', 'xlsx'))) {
$excelFile = $file->getTempName(); //获取文件名
Yii::$enableIncludePath = false;
Yii::import('application.extensions.PHPExcel.PHPExcel', 1);
$phpexcel = new PHPExcel;
$excelReader = PHPExcel_IOFactory::createReader('Excel2007');
$phpexcel = $excelReader->load($excelFile)->getSheet(0);
//载入文件并获取第一个sheet
Yii::$enableIncludePath = true; //及时的还原yii的自动加载模式
$total_line = $phpexcel->getHighestRow();
//var_dump($total_line);exit();
$total_column = $phpexcel->getHighestColumn();
$total_column = PHPExcel_Cell::columnIndexFromString($total_column);
$datalist = array();
for ($row = 2; $row <= $total_line; $row++) {
$data = array();
for ($column = 0; $column <= $total_column; $column++) {
if ($column > 28) {
$str = PHPExcel_Cell::stringFromColumnIndex(round($column - 28));
} elseif ($column == 22) {
$data[22] = date('Y-m-d 21:00:00');
} elseif ($column == 21 || $column == 24) {
$str = PHPExcel_Cell::stringFromColumnIndex($column);
//var_dump($str);
$data[] = gmdate("Y-m-d H:00:00", PHPExcel_Shared_Date::ExcelToPHP(trim($phpexcel->getCell($str . $row)->getValue())));
/* $date = date('Y-m-d 9:00:00')
date() */
} else {
$str = PHPExcel_Cell::stringFromColumnIndex($column);
//var_dump($str);exit;
$data[] = trim($phpexcel->getCell($str . $row)->getValue());
}
//var_dump($data);exit;
// var_dump($data);
}
$datalist[] = $data;
//var_dump($datalist);exit();
$_model = new TXianGoods();
$_model->isNewRecord = true;
//$_model->id = $datalist[$row-2][0];
$_model->parent_type_id = $datalist[$row - 2][1];
$_model->type_id = $datalist[$row - 2][2];
$_model->city_id = $datalist[$row - 2][3];
$_model->tags_id = $datalist[$row - 2][4];
$_model->tags = $datalist[$row - 2][5];
$_model->presell_content = $datalist[$row - 2][6];
$_model->name = $datalist[$row - 2][7];
$_model->unit = $datalist[$row - 2][8];
//$_model->group_unit_note = $datalist[$row-2][9];
$_model->unit_note = $datalist[$row - 2][9];
$_model->pic = $datalist[$row - 2][10];
$_model->content = $datalist[$row - 2][11];
$_model->user_limit_type_id = $datalist[$row - 2][12];
$_model->user_limit_num = $datalist[$row - 2][13];
$_model->num = $datalist[$row - 2][14];
$_model->sale_num = $datalist[$row - 2][15];
$_model->origin_num = $datalist[$row - 2][16];
$_model->unit_price = $datalist[$row - 2][17];
$_model->market_price = $datalist[$row - 2][18];
$_model->group_price = $datalist[$row - 2][19];
$_model->group_num = $datalist[$row - 2][20];
$_model->create_at = $datalist[$row - 2][21];
//var_dump($datalist[$row-2][21]);
$_model->upper_at = $datalist[$row - 2][22];
//var_dump($datalist[$row-2][22]);
$_model->os_account = $datalist[$row - 2][23];
$_model->os_update_at = $datalist[$row - 2][24];
//var_dump($datalist[$row-2][24]);exit();
$_model->status = $datalist[$row - 2][25];
$_model->sale_type = $datalist[$row - 2][26];
$_model->recharge_amount = $datalist[$row - 2][27];
//var_dump($datalist[$row-2][27]) ;exit;
$_model->save();
//var_dump($_model->getErrors());exit;
}
echo "Excel表格导入成功";
$this->render('create');
}
}
}