建議導出成CSV格式,然后打開文件,直接COPY后paste row 導入數(shù)據(jù)庫中。
創(chuàng)新互聯(lián)主營南岸網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App制作,南岸h5微信小程序搭建,南岸網(wǎng)站營銷推廣歡迎南岸等地區(qū)企業(yè)咨詢
1:通過DOM4J對xml中數(shù)據(jù)進行解析,生成Nodes;
2:通過JDBC把Nodes逐個插入到Mysql中;
這個方法最簡單但不是傻瓜式的方法,需要你對Excel和MySQL都有一點點了解。 當然,我在最后提供了一個作為例子的Excel文件,但仍然需要你會寫MySQL的INSERT語句,這樣才能調(diào)試可能出現(xiàn)的錯誤。 1.在需要導入的數(shù)據(jù)最后一列,寫入一個Excel公式(例子中是“SQL”下面的單元格,“SQL”是不必要的,僅僅是為了看起來方便)。 =CONCATENATE("insert into employee(name,birthday,email,hobby)values('",RC[-4],"','",RC[-3],"','",RC[-2],"','",RC[-1],"');") 這樣就會生成insert語句,正如你在例子Excel文件中看到的(當你單擊SQL下面的單元格時,可以看到公式)。 這個實際上是使用了Excel的CONCATENATE字符串連接函數(shù),將數(shù)據(jù)生成你需要的SQL語句。RC[-2]是從最后一列(不包括該列)往前數(shù)的第二列。 2.將"SQL"下面單元格的公式復制到該列的其它單元格,這樣可以看到生成了所需要的所有SQL語句。 3.將最后一列選中,復制數(shù)據(jù)到一個文本文件,將該文本文件另存為一個.sql文件(別忘了刪除第一行的“SQL”)。 4.能夠運行sql文件的工具有很多,運行這個文件就可以了。如果沒有工具,參考 在windows下批量執(zhí)行mysql腳本( )。 使用上面的方法,你需要知道什么樣的insert語句對于mysql來說是正確的。 最常見的是日期的格式,如果不轉(zhuǎn)換成字符串,用上面的方法會生成一個整數(shù),這樣插入mysql后就不對了。 因此上面的公式改成 =CONCATENATE("insert into employee(name,birthday,email,hobby)values('",RC[-4],"','",TEXT(RC[-3],"yyyy-mm-dd hh:mm:ss"),"','",RC[-2],"','",RC[-1],"');") 這里用到了TEXT函數(shù)來將日期格式化成mysql能接受的日期字符串。 具體請參考例子。Excel2Mysql.rar 文件說明如下: doc.txt--本文 SqlGen.xls--Excel例子文件 create.sql--建表語句 insert.sql--生成的insert語句 function.txt--需要在Excel中使用的函數(shù) 寫了這么多,實際上就一句話:使用Excel的CONCATENATE函數(shù)生成sql語句并執(zhí)行。 如果懂一點兒VBA可以直接生成insert.sql文件
要用php 把XML數(shù)據(jù)導入mysql ,xml里所有的數(shù)據(jù)導入數(shù)據(jù)庫
我在php手冊里找了個例子
to import xml into mysql
$file = "article_2_3032005467.xml";
$feed = array();
$key = "";
$info = "";
function startElement($xml_parser, $attrs ) {
global $feed;
}
function endElement($xml_parser, $name) {
global $feed, $info;
$key = $name;
$feed[$key] = $info;
$info = ""; }
function charData($xml_parser, $data ) {
global $info;
$info .= $data; }
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "charData" );
$fp = fopen($file, "r");
while ($data = fread($fp, 8192))
!xml_parse($xml_parser, $data, feof($fp));
xml_parser_free($xml_parser);
$sql= "INSERT INTO `article` ( `";
$j=0;
$i=count($feed);
foreach( $feed as $assoc_index = $value )
{
$j++;
$sql.= strtolower($assoc_index);
if($i$j) $sql.= "` , `";
if($i =$j) {$sql.= "` ) VALUES ('";}
}
$h=0;
foreach( $feed as $assoc_index = $value )
{
$h++;
$sql.= utf8_decode(trim(addslashes($value)));
if($i-1$h) $sql.= "', '";
if($i =$h) $sql.= "','')";
}
$sql=trim($sql);
echo $sql;
將外部數(shù)據(jù)導入(import)數(shù)據(jù)庫是在數(shù)據(jù)庫應(yīng)用中一個很常見的需求。其實這就是在數(shù)據(jù)的管理和操作中的ETL
(Extract,
transform,
load)的L
(Load)部分,也就是說,將特定結(jié)構(gòu)(structure)或者格式(format)的數(shù)據(jù)導入某個目的地(比如數(shù)據(jù)庫,這里我們討論MySQL)。
ETL
Process
本文要討論的內(nèi)容,是如何方便地將多種格式(JSON,
Text,
XML,
CSV)的數(shù)據(jù)導入MySQL之中。
本文大綱:
將Text文件(包括CSV文件)導入MySQL
將XML文件導入MySQL
將JSON文件導入MySQL
使用MySQL
workbench的Table
Data
Export
and
Import
Wizard進行JSON或CSV文件的導入導出
1.
將Text文件(包括CSV文件)導入MySQL
這里我們的討論是基于一個假定,Text
file和CSV
file是有著比較規(guī)范的格式的(properly
formatted),比如說每行的每個數(shù)據(jù)域(field)之間是由一個共同的分隔符(比如tab:
\t)分隔的。
那么首先,你需要根據(jù)你的數(shù)據(jù)的格式(有哪些域),來設(shè)計好數(shù)據(jù)庫的對應(yīng)的表
(的Schema)。
舉個例子,要處理的Text文件或者CSV文件是以\t作為分隔符的,每行有id,
name,
balance這么三個數(shù)據(jù)域,那么首先我們需要在數(shù)據(jù)庫中創(chuàng)建這個表:
CREATE
TABLE
sometable(id
INT,
name
VARCHAR(255),
balance
DECIMAL(8,4));
創(chuàng)建成功以后就可以導入了。操作方式很簡單:
LOAD
DATA
LOCAL
INFILE
'你的文件路徑(如~/file.csv)'
INTO
TABLE
sometable
FIELDS
TERMINATED
BY
'\t'
[ENCLOSED
BY
'"'(可選)]
LINES
TERMINATED
BY
'\n'
(id,
name,
balance)
這里要注意的是,我們需要開啟local-infile這個MySQL的配置參數(shù),才能夠成功導入。究其原因,從MySQL的Manual中可以看到這么一段話:
LOCAL
works
only
if
your
server
and
your
client
both
have
been
configured
to
permit
it.
For
example,
if
mysqld
was
started
with
--local-infile=0,
LOCAL
does
not
work.
See
Section
6.1.6,
“Security
Issues
with
LOAD
DATA
LOCAL”.
舉例說明如下
xml文件名為: text.xml
xml數(shù)據(jù)文件的結(jié)構(gòu)如下:
node1
node2 name="abc"123/node2
/node1
sql命令如下:
SET @xml = LOAD_FILE('text.xml'); -- 要指定完整的文件位置
SELECT ExtractValue(@xml, '/node1/node2/@name') as name,ExtractValue(@xml, '/node1/node2') as data;
返回數(shù)據(jù)結(jié)果就是:
name | data
abc | 123