如何从字符串数组动态创建对象并批量插入SQL表?
C# 解决方案
原代码的核心问题
- 循环条件
i <= myArray.Length会触发数组越界(数组最大索引为myArray.Length-1) - 复用同一个
Person对象,后续赋值会覆盖之前的实例数据 - 插入时机错误:
i%3==0时还未收集完一组完整的ID/Name/Age数据
直观循环实现(推荐)
按组遍历的方式逻辑清晰,不易出错:
string[] myArray = {"1","Jack","18","2","John","22","3","Mark","29"}; // 步长设为3,每次处理一组3个元素 for (int i = 0; i < myArray.Length; i += 3) { // 每组创建新的Person实例,避免数据覆盖 Person p = new Person { Id = myArray[i], Name = myArray[i + 1], Age = myArray[i + 2] }; AddNewRecord(p); }
LINQ 简洁实现
适合偏好函数式编程风格的场景:
var persons = myArray .Select((item, index) => new { Item = item, GroupId = index / 3 }) .GroupBy(g => g.GroupId) .Select(group => new Person { Id = group.ElementAt(0).Item, Name = group.ElementAt(1).Item, Age = group.ElementAt(2).Item }); foreach (var person in persons) { AddNewRecord(person); }
Java 解决方案
直观循环实现
String[] myArray = {"1","Jack","18","2","John","22","3","Mark","29"}; for (int i = 0; i < myArray.length; i += 3) { Person p = new Person(); p.setId(myArray[i]); p.setName(myArray[i + 1]); p.setAge(myArray[i + 2]); addNewRecord(p); }
Stream 简洁实现
import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; // ... String[] myArray = {"1","Jack","18","2","John","22","3","Mark","29"}; List<Person> persons = IntStream.range(0, myArray.length / 3) .mapToObj(groupIdx -> { int start = groupIdx * 3; Person p = new Person(); p.setId(myArray[start]); p.setName(myArray[start + 1]); p.setAge(myArray[start + 2]); return p; }) .collect(Collectors.toList()); persons.forEach(this::addNewRecord);
注:假设
Person类已定义对应属性(C#)或getter/setter方法(Java),AddNewRecord/addNewRecord方法负责执行SQL插入操作(实际开发中务必使用参数化查询防止SQL注入)
内容的提问来源于stack exchange,提问作者Jesus Hamdi
相关产品推荐
相关产品推荐

