mysql identity_insert_由MYSQL SET IDENTITY_INSERT tablename ON;准确方法

由mysql SET IDENTITY_INSERT tablename ON;正确方法

错误

SQL 查询:

SET IDENTITY_INSERT tablename ON ;

MySQL 返回:文档

#1193 - Unknown system variable 'IDENTITY_INSERT'

出现这个错误,想知道如何写正确?

------解决方案--------------------

自增字段在MYSQL中可以不写,假设ID为自增

insert into tt(f1,f2,...) values(....)

------解决方案--------------------

自增设置是在建表的时候设置好的吧 从没见过楼主这种写法

mysql> create table test(id int auto_increment primary key,b int)

-> ;

Query OK, 0 rows affected (0.04 sec)

mysql> insert into test(b) values(1);

Query OK, 1 row affected (0.02 sec)

mysql> insert into test(b) values(1);

Query OK, 1 row affected (0.02 sec)

mysql> insert into test(b) values(1);

Query OK, 1 row affected (0.01 sec)

mysql> select * from test;

+----+------+

| id | b |

+----+------+

| 1 | 1 |

| 2 | 1 |

| 3 | 1 |

+----+------+

3 rows in set (0.00 sec)

mysql>

------解决方案--------------------

MYSQL与MS SQL SERVER不同,建议参考一下MYSQL的官方免费手册,

MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html

e7ce419cf2d6ad34d01da2ceb8829eed.png

微信 赏一包辣条吧~

023a57327877fb4402bcc76911ec18ea.png

支付宝 赏一听可乐吧~

下面是符合要求的Java代码: ```java import java.lang.reflect.Field; import java.util.List; public class SqlGenerator { /** * 生成insert语句 * @param list 数据对象列表 * @param <T> 数据对象类型 * @return insert语句 */ public static <T> String generateInsertSql(List<T> list) { if (list == null || list.isEmpty()) { throw new IllegalArgumentException("list不能为空"); } T first = list.get(0); String tableName = getTableName(first); StringBuilder sb = new StringBuilder(); sb.append("insert into ").append(tableName).append("("); Field[] fields = first.getClass().getDeclaredFields(); for (Field field : fields) { String columnName = getColumnName(field); sb.append(columnName).append(","); } sb.deleteCharAt(sb.length() - 1); sb.append(") values"); for (T data : list) { sb.append("("); for (Field field : fields) { Object value = getValue(data, field); sb.append("'").append(value).append("',"); } sb.deleteCharAt(sb.length() - 1); sb.append("),"); } sb.deleteCharAt(sb.length() - 1); sb.append(";"); return sb.toString(); } /** * 生成单元测试案例 * @param list 数据对象列表 * @param <T> 数据对象类型 * @return 单元测试案例 */ public static <T> String generateUnitTest(List<T> list) { StringBuilder sb = new StringBuilder(); sb.append("import org.junit.Test;\n"); sb.append("import org.junit.runner.RunWith;\n"); sb.append("import org.springframework.beans.factory.annotation.Autowired;\n"); sb.append("import org.springframework.boot.test.context.SpringBootTest;\n"); sb.append("import org.springframework.test.context.junit4.SpringRunner;\n"); sb.append("import javax.persistence.EntityManager;\n"); sb.append("import javax.persistence.PersistenceContext;\n"); sb.append("import javax.transaction.Transactional;\n"); sb.append("import java.util.Arrays;\n"); sb.append("import java.util.List;\n"); sb.append("\n"); sb.append("@RunWith(SpringRunner.class)\n"); sb.append("@SpringBootTest\n"); sb.append("@Transactional\n"); sb.append("public class ").append(getClassName(list)).append(" {\n"); sb.append("\n"); sb.append(" @PersistenceContext\n"); sb.append(" private EntityManager entityManager;\n"); sb.append("\n"); sb.append(" @Autowired\n"); sb.append(" private ").append(getRepositoryName(list)).append(" ").append(getRepositoryVariable(list)).append(";\n"); sb.append("\n"); sb.append(" @Test\n"); sb.append(" public void testInsert() {\n"); sb.append(" List<").append(getEntityName(list)).append("> list = Arrays.asList(\n"); for (T data : list) { sb.append(" new ").append(getEntityName(list)).append("("); Field[] fields = data.getClass().getDeclaredFields(); for (Field field : fields) { Object value = getValue(data, field); sb.append(value).append(","); } sb.deleteCharAt(sb.length() - 1); sb.append("),\n"); } sb.deleteCharAt(sb.length() - 2); sb.append(" );\n"); sb.append(" ").append(getRepositoryVariable(list)).append(".saveAll(list);\n"); sb.append(" }\n"); sb.append("\n"); sb.append("}"); return sb.toString(); } private static <T> String getTableName(T data) { Class<?> clazz = data.getClass(); String tableName = clazz.getSimpleName(); if (clazz.isAnnotationPresent(javax.persistence.Table.class)) { tableName = clazz.getAnnotation(javax.persistence.Table.class).name(); } return tableName; } private static String getColumnName(Field field) { String columnName = field.getName(); if (field.isAnnotationPresent(javax.persistence.Column.class)) { columnName = field.getAnnotation(javax.persistence.Column.class).name(); } return columnName; } private static <T> Object getValue(T data, Field field) { field.setAccessible(true); try { return field.get(data); } catch (IllegalAccessException e) { e.printStackTrace(); } return null; } private static <T> String getClassName(List<T> list) { T data = list.get(0); Class<?> clazz = data.getClass(); return clazz.getSimpleName() + "Test"; } private static <T> String getEntityName(List<T> list) { T data = list.get(0); Class<?> clazz = data.getClass(); return clazz.getSimpleName(); } private static <T> String getRepositoryName(List<T> list) { T data = list.get(0); Class<?> clazz = data.getClass(); return clazz.getSimpleName() + "Repository"; } private static <T> String getRepositoryVariable(List<T> list) { T data = list.get(0); Class<?> clazz = data.getClass(); String repositoryName = clazz.getSimpleName() + "Repository"; return repositoryName.substring(0, 1).toLowerCase() + repositoryName.substring(1); } } ``` 使用时可以按照如下代码示例: ```java import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { // 构造数据对象列表 User user1 = new User(1, "张三", "男"); User user2 = new User(2, "李四", "女"); List<User> userList = Arrays.asList(user1, user2); // 生成insert语句 String insertSql = SqlGenerator.generateInsertSql(userList); System.out.println(insertSql); // 生成单元测试案例 String unitTest = SqlGenerator.generateUnitTest(userList); System.out.println(unitTest); } } @Table(name = "user") class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "name") private String name; @Column(name = "gender") private String gender; public User() {} public User(Integer id, String name, String gender) { this.id = id; this.name = name; this.gender = gender; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值