Android异常总结---res\layout\addUser.xml: Invalid file name: must contain only [a-z

本文解释了在Android开发中遇到的布局文件命名问题:文件名包含大写字母导致的错误提示。阐述了正确的文件命名规范,即仅允许使用小写字母、数字及下划线。

1.res\layout\addUser.xml: Invalid file name: must contain only [a-z0-9_.]

出现这个的原因是,文件名不可以包含大写字母

你提供的日志显示: ```log HHH000204: Processing PersistenceUnitInfo [name: default] Hibernate Core {5.3.7.Final} Using dialect: org.hibernate.dialect.MySQL5Dialect ``` ✅ **没有报错**,说明 JPA 和 Hibernate 已成功启动并连接到数据库。 ❌ **但数据库无数据**,说明实体未被持久化 —— 数据没有被插入。 --- ### 🔍 常见原因及解决方案 #### ✅ 1. 没有执行 `save()` 或事务未提交 即使你写了代码保存数据,如果: - 没调用 `repository.save(entity)` - 或方法不在 `@Transactional` 中 - 或服务类没加 `@Service` / 未被 Spring 管理 → 数据不会写入数据库。 ##### ✔️ 示例正确写法: ```java @Service public class UserService { @Autowired private UserRepository userRepository; @Transactional public void addUser() { User user = new User(); user.setUsername("dogsong"); user.setEmail("dogsong@example.com"); user.setPassword("123456"); userRepository.save(user); // 必须调用 save } } ``` 并在启动类或配置类中触发它: ```java @SpringBootApplication public class Application implements CommandLineRunner { @Autowired private UserService userService; public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override public void run(String... args) throws Exception { userService.addUser(); // 启动时运行 } } ``` --- #### ✅ 2. 实体未启用 JPA 注解或未扫描到 确保你的实体上有正确的注解,并且在主类包路径下(或使用 `@EntityScan`)。 ```java @Entity @Table(name = "user") public class User { ... } ``` 如果你的实体在其他包中,需要显式扫描: ```java @EntityScan(basePackages = "com.dogsong.entity") // 自定义路径 @SpringBootApplication public class Application { ... } ``` --- #### ✅ 3. hbm2ddl.auto 设置为 none(默认),表存在但数据没插入 查看你的 `application.yml` 或 `application.properties`: ```yaml spring: jpa: hibernate: ddl-auto: validate # 只验证结构,不创建也不插入 # ddl-auto: update # 推荐开发时使用:自动建表(但不会插数据) ``` > ⚠️ `validate` 和 `none` 都不会自动插入数据!你必须手动调用 `save()`。 --- #### ✅ 4. 数据源配置错误:连了空数据库 确认你连接的是正确的数据库! 常见问题: - URL 写成了 `test`、`tmp` 或临时数据库 - 使用了内存数据库 H2 而不是 MySQL(尤其当你引入了 H2 依赖) 检查你的 `application.yml`: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/liteflow_editor?useSSL=false&serverTimezone=UTC username: root password: your_password ``` 👉 确保 `liteflow_editor` 是你要操作的真实数据库,并且该库中有对应的表。 你可以登录 MySQL 验证: ```sql USE liteflow_editor; SHOW TABLES; SELECT * FROM user; ``` --- #### ✅ 5. 表名/字段名大小写或命名策略不匹配 比如 Java 字段是 `userName`,映射成数据库 `username` 还是 `user_name`? 建议明确指定列名: ```java @Column(name = "username", nullable = false) private String username; ``` 否则可能因命名策略导致字段无法识别。 --- #### ✅ 6. 开启 SQL 日志,确认是否有 INSERT 语句 添加以下配置,看是否真的执行了插入: ```yaml spring: jpa: show-sql: true format-sql: true properties: hibernate: format_sql: true logging: level: org.hibernate.SQL: DEBUG org.hibernate.type.descriptor.sql.BasicBinder: TRACE # 显示参数值 ``` ✅ 如果控制台输出类似: ```sql insert into user (email, password, username) values (?, ?, ?) ``` 但数据库仍无数据 → 可能是事务回滚或连接到了错误数据库。 ❌ 如果根本没有 `insert` 输出 → 说明你根本没调用 `save()`。 --- ### ✅ 总结排查步骤 | 步骤 | 操作 | |------|------| | 1 | 检查是否调用了 `repository.save(entity)` | | 2 | 检查服务类是否被 Spring 托管(加了 `@Service` 并被扫描) | | 3 | 添加 `CommandLineRunner` 在启动时插入测试数据 | | 4 | 打开 `show-sql: true` 和 `BasicBinder: TRACE` 查看是否发出 INSERT | | 5 | 核对 `datasource.url` 是否指向你期望的数据库 | | 6 | 登录数据库手动查询表内容 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

添柴程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值