我要向数据库中插入多条数据,但是代码好像只能插入一条,插入多条会报错,说值过多,这个怎么解决啊:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我要向数据库中插入多条数据,但是代码好像只能插入一条,插入多条会报错,说值过多,这个怎么解决啊:相关的知识,希望对你有一定的参考价值。

StringBuffer sql = new StringBuffer("");
sql.append("INSERT INTO T_TEACHER(");
sql.append("id,");
sql.append("t_number,duty,t_name,t_sex,t_birth,t_nation,t_education,t_degree," +
"major_region,is_backbone,is_pcwb,is_starteach,");
sql.append("add_user,add_date,school_id");
sql.append(") VALUES ");
for (List<String> hList : bo.getList())
sql.append("(");
for (String field : hList)
if (StringUtils.isNotBlank(field))
sql.append("'" + field + "',");
else
sql.append("'',");


sql.append("'"+ bo.getAddUserId()+ "','" + bo.getAddTime()+ "','"+bo.getSchoolId()+"')");
getSession().createSQLQuery(sql.toString()).executeUpdate();

参考技术A 可以使用insert高级插入

insert into value(v1,v2),(v1,v2)这种格式,用循环去拼接
mysql是有默认单次操作上限的,有的数据库只默认了100的样子,要么改配置,要么改代码,建议改代码
参考技术B for(int i=0 ;i<100; i++)


StringBuffer sql = new StringBuffer("");
sql.append("INSERT INTO T_TEACHER(");
sql.append("id,");
sql.append("t_number,duty,t_name,t_sex,t_birth,t_nation,t_education,t_degree," +
"major_region,is_backbone,is_pcwb,is_starteach,");
sql.append("add_user,add_date,school_id");
sql.append(") VALUES ");
for (List<String> hList : bo.getList())
sql.append("(");
for (String field : hList)
if (StringUtils.isNotBlank(field))
sql.append("'" + field + "',");
else
sql.append("'',");


sql.append("'"+ bo.getAddUserId()+ "','" + bo.getAddTime()+ "','"+bo.getSchoolId()+"')");
getSession().createSQLQuery(sql.toString()).executeUpdate();



这样就可以插入99条了。追问

我里面的2条for循环为什么不能实现啊

批量插入数据

批量插入数据

当我们想要批量得向数据库插入数据的时候,该怎么做?按照之前的思想,应该会有以下代码。在Django中需要向数据库中插入多条数据(list)。使用如下方法,每次save()的时候都会访问一次数据库。导致性能问题:

def index(request):
    # 1.往书籍表中插入数据 1000
    for i in range(1000):  # 这种插入方式 效率极低
        models.Book.objects.create(title='第%s本书'%i)

没事,也就走了大概一千次数据库吧。耗时长的不得了,所以要如何才能优化这个代码呢?

看下面代码

在Django中需要向数据库中插入多条数据(list)。使用如下方法,每次save()的时候都会访问一次数据库。导致性能问题:

def index(request):
    book_list = []
    for i in range(100000):
        book_list.append(models.Book(title='第%s本书'%i))
    models.Book.objects.bulk_create(book_list)
    book_queryset = models.Book.objects.all()

bulk_create()是执行一条SQL存入多条数据

批量导入时数据重复的解决方法

如果你导入数据过多,导入时出错了,或者你手动停止了,导入了一部分,还有一部分没有导入。或者你再次运行上面的命令,你会发现数据重复了,怎么办呢?

django.db.models 中还有一个函数叫 get_or_create(),之前文章中也提到过,有就获取过来,没有就创建,用它可以避免重复,但是速度可以会慢些,因为要先尝试获取,看看有没有

只要把上面的:

Book.objects.create(title=title,content=content)

换成下面的就不会重复导入数据了

Book.objects.get_or_create(title=title,content=content)

返回值是(BlogObject, True/False)新建时返回 True, 已经存在时返回 False。

以上是关于我要向数据库中插入多条数据,但是代码好像只能插入一条,插入多条会报错,说值过多,这个怎么解决啊:的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 从一个表单中插入多条记录

JAVA中,向MYSQL插入多条数据,如何判断如果某记录已经存在就不插入

如何同时往数据库中插入多条记录???

如何使用java代码向oracle数据库一次性插入多条数据

MongoDB插入多条数据

批量插入数据