如何通过PHP将文本文件批量导入SQLite数据表?
批量导入数据到SQLite的weekData表
别担心,SQLite完全可以实现批量数据导入,而且有几种高效的方案适配你的开发场景,下面给你详细拆解:
方法一:SQLite命令行工具(快速导入)
如果你只是需要快速把文本数据导入数据库,SQLite自带的.import命令就非常好用,前提是你的文本文件格式和表结构匹配(比如用逗号/制表符分隔每一行的week1-week4数值)。
操作步骤:
- 确保你的文本文件(比如
data.txt)每一行的格式是:week1值,week2值,week3值,week4值(或者用制表符分隔,根据你的文件调整) - 打开SQLite命令行,连接到你的数据库:
sqlite3 your_database.db - 执行导入命令(如果是逗号分隔):
如果是制表符分隔,把.mode csv .import data.txt weekData.mode csv改成.mode tabs就行。
方法二:代码层面批量插入(适合你的开发程序)
从你创建表的代码来看是PHP环境,用代码批量插入更灵活,而且通过事务包裹批量操作能大幅提升效率(避免每次插入都提交一次事务),这对大量数据导入尤为重要。
示例代码:
// 假设你的文本文件每行是逗号分隔的四个整数,比如:10,20,30,40 $filePath = 'data.txt'; $db = new PDO('sqlite:your_database.db'); // 开启事务,这是提升批量插入效率的核心 $db->beginTransaction(); try { // 准备预处理插入语句(安全且高效) $stmt = $db->prepare('INSERT INTO weekData (week1, week2, week3, week4) VALUES (:w1, :w2, :w3, :w4)'); // 逐行读取文本文件 $handle = fopen($filePath, 'r'); while (($line = fgets($handle)) !== false) { // 去除换行符并分割成数组,转成整数类型 $values = array_map('intval', explode(',', trim($line))); // 确保每行数据列数匹配表结构 if (count($values) === 4) { $stmt->bindParam(':w1', $values[0]); $stmt->bindParam(':w2', $values[1]); $stmt->bindParam(':w3', $values[2]); $stmt->bindParam(':w4', $values[3]); $stmt->execute(); } } fclose($handle); // 提交事务,完成导入 $db->commit(); echo "数据导入完成!"; } catch (PDOException $e) { // 出错时回滚事务,避免脏数据 $db->rollBack(); echo "导入失败:" . $e->getMessage(); }
关键注意事项:
- 一定要开事务:SQLite默认每次插入都会自动提交事务,批量插入时开启手动事务能把插入速度提升几十甚至上百倍。
- 文本格式要匹配:确保每行的数值数量和表的列数一致,并且是整数类型(如果有非整数数据,要调整类型转换逻辑)。
- 用预处理语句:不仅能避免SQL注入风险(哪怕是本地数据也建议保持好习惯),还比每次拼接SQL字符串的效率更高。
补充说明
那些说SQLite无法导入的说法是不准确的,它只是没有像大型数据库那样有复杂的专用导入工具,但基础的批量导入完全没问题,完全能支撑你后续生成直方图等数据分析需求。
内容的提问来源于stack exchange,提问作者TheBiz
相关产品推荐
相关产品推荐

