怎么对数据库字段非空进行校验
时间: 2023-12-18 16:03:21 浏览: 174
数据库字段非空校验可以在多个层面进行,包括应用程序代码、数据库约束和前端表单校验等。以下是几种常用的方式:
1. 在数据库层面进行非空校验:可以在数据库设计时,将相应的字段设置为 NOT NULL,这样就可以在数据库层面进行非空校验。如果尝试插入空值,数据库将会报错。
2. 在应用程序代码中进行非空校验:可以在应用程序中对相应的字段进行非空校验,如果字段为空,则抛出异常或者返回错误提示信息。例如,在 Java 中,可以使用 if (str == null || str.isEmpty()) 进行非空校验。
3. 在前端表单中进行非空校验:可以在前端表单中对相应的字段进行非空校验,如果字段为空,则显示错误提示信息。例如,在 HTML 中,可以在 input 标签中添加 required 属性进行非空校验。
需要注意的是,非空校验只是数据库校验的一种形式。在实际开发中,应该根据具体情况,选择最适合自己的校验方式。同时,在进行非空校验时,应该考虑到数据的完整性和安全性,以避免潜在的数据安全问题。
相关问题
怎么修改表字段非空校验
在SQL数据库中,如果你想要修改某个表字段的非空(NOT NULL)约束,你可以使用ALTER TABLE语句。具体的步骤取决于你使用的数据库管理系统(DBMS),以下是几种常见情况下的操作:
1. MySQL:
```sql
ALTER TABLE 表名 MODIFY COLUMN 字段名 VARCHAR(长度) NOT NULL;
```
这里将字段名替换为你需要更改的字段,如果字段原本允许NULL现在不允许,则去掉`NOT NULL`。
2. PostgreSQL:
```sql
ALTER TABLE 表名 ALTER COLUMN 字段名 SET NOT NULL;
```
3. SQL Server:
```sql
ALTER TABLE 表名 ALTER COLUMN 字段名 WITH NOT NULL;
```
4. Oracle:
```sql
ALTER TABLE 表名 MODIFY (字段名 NOT NULL);
```
5. SQLite:
```sql
PRAGMA table_info(表名); // 查看当前表结构
UPDATE sqlite_sequence SET seq = ? WHERE name = '表名'; // 增加一条数据序号,假设你要改变的字段索引为1
ALTER TABLE 表名 ALTER COLUMN 字段名 TYPE INTEGER NOT NULL;
```
需要注意的是,在SQLite中你需要先查看列的信息并手动调整数据序列,然后更新约束。
执行上述命令前,记得备份你的数据,以防意外。
使用SpringMVC编写代码实现图书的新增功能 1.编写视图层JSP代码,页面提供表单,由用户填写图书名称,出版社,出版日期,作者,定价,ISBN并提交。 2.编写控制层Java代码,获取视图层提交的表单请求,控制方法注入表单项参数,控制层完成JavaBean封装和业务层代码调用。 3.编写业务层Java代码,将控制层传输的JavaBean进行非空校验然后调用持久层代码。 4.编写持久层Java代码,将经过控制层校验的JavaBean转换成SQL语句并向MySQL数据库Test的book表插入一条新增记录。 5.编写视图层JSP代码,显示新增成功或者失败及失败原因。 其中,Test数据库的book表结构如下表1所示: 表1:book表结构 字段ID 字段名称 字段类型 约束 bookId 图书编号 int 非空,自增长,主键 bookName 图书名称 varchar(30) 非空 press 出版社 varchar(20) 非空 pressDate 出版日期 date 非空,不晚于当前时间 author 作者 varchar(10) 非空 price 定价 money 非空 ISBN ISBN char(13) 非空 注意事项: 1.页面表单不需要填写图书编号,而交给数据库自增长生成编号。 2.持久层代码使用JDBC完成,允许使用ORM框架。 3.必须使用SpringMVC框架,可以使用Spring的IoC。
下面是代码实现:
1. 编写视图层JSP代码,页面提供表单
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>新增图书</title>
</head>
<body>
<h2>新增图书</h2>
<form action="addBook" method="post">
<label>图书名称:</label>
<input type="text" name="bookName" required><br>
<label>出版社:</label>
<input type="text" name="press" required><br>
<label>出版日期:</label>
<input type="date" name="pressDate" required><br>
<label>作者:</label>
<input type="text" name="author" required><br>
<label>定价:</label>
<input type="number" name="price" required><br>
<label>ISBN:</label>
<input type="text" name="ISBN" required><br>
<input type="submit" value="提交">
</form>
</body>
</html>
```
2. 编写控制层Java代码,获取视图层提交的表单请求,控制方法注入表单项参数,控制层完成JavaBean封装和业务层代码调用。
```java
@Controller
public class BookController {
@Autowired
private BookService bookService;
@RequestMapping("/addBook")
public ModelAndView addBook(@RequestParam("bookName") String bookName,
@RequestParam("press") String press, @RequestParam("pressDate") Date pressDate,
@RequestParam("author") String author, @RequestParam("price") BigDecimal price,
@RequestParam("ISBN") String ISBN) {
Book book = new Book();
book.setBookName(bookName);
book.setPress(press);
book.setPressDate(pressDate);
book.setAuthor(author);
book.setPrice(price);
book.setISBN(ISBN);
String result = bookService.addBook(book);
ModelAndView modelAndView = new ModelAndView();
if(result == null) {
modelAndView.setViewName("add_result");
modelAndView.addObject("result", "添加成功");
} else {
modelAndView.setViewName("add_result");
modelAndView.addObject("result", "添加失败,原因:" + result);
}
return modelAndView;
}
}
```
3. 编写业务层Java代码,将控制层传输的JavaBean进行非空校验然后调用持久层代码。
```java
@Service
public class BookService {
@Autowired
private BookDao bookDao;
public String addBook(Book book) {
if(book.getBookName() == null || book.getBookName().equals("")) {
return "图书名称不能为空";
}
if(book.getPress() == null || book.getPress().equals("")) {
return "出版社不能为空";
}
if(book.getPressDate() == null || book.getPressDate().after(new Date())) {
return "出版日期不能为空且不能晚于当前时间";
}
if(book.getAuthor() == null || book.getAuthor().equals("")) {
return "作者不能为空";
}
if(book.getPrice() == null || book.getPrice().compareTo(BigDecimal.ZERO) <= 0) {
return "定价不能为空且必须大于0";
}
if(book.getISBN() == null || book.getISBN().equals("")) {
return "ISBN不能为空";
}
try {
bookDao.addBook(book);
return null;
} catch(Exception e) {
e.printStackTrace();
return "数据库异常";
}
}
}
```
4. 编写持久层Java代码,将经过控制层校验的JavaBean转换成SQL语句并向MySQL数据库Test的book表插入一条新增记录。
```java
@Repository
public class BookDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void addBook(Book book) {
String sql = "insert into book(bookName, press, pressDate, author, price, ISBN) values (?, ?, ?, ?, ?, ?)";
jdbcTemplate.update(sql, book.getBookName(), book.getPress(), book.getPressDate(), book.getAuthor(), book.getPrice(), book.getISBN());
}
}
```
5. 编写视图层JSP代码,显示新增成功或者失败及失败原因。
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>新增结果</title>
</head>
<body>
<h2>${result}</h2>
<a href="addBookPage">返回</a>
</body>
</html>
```
注意事项:
1. 页面表单不需要填写图书编号,而交给数据库自增长生成编号。
2. 持久层代码使用JDBC完成,允许使用ORM框架。
3. 必须使用SpringMVC框架,可以使用Spring的IoC。
提交要求:
1. 使用eclipseForJavaEE进行开发。
2. 将代码打包成war包并上传至服务器,提供war包下载链接。
3. 提供MySQL数据库Test的book表结构及插入数据的SQL语句。
MySQL数据库Test的book表结构及插入数据的SQL语句如下:
```sql
CREATE TABLE `book` (
`bookId` int(11) NOT NULL AUTO_INCREMENT COMMENT '图书编号',
`bookName` varchar(30) NOT NULL COMMENT '图书名称',
`press` varchar(20) NOT NULL COMMENT '出版社',
`pressDate` date NOT NULL COMMENT '出版日期',
`author` varchar(10) NOT NULL COMMENT '作者',
`price` decimal(10,2) NOT NULL COMMENT '定价',
`ISBN` char(13) NOT NULL COMMENT 'ISBN',
PRIMARY KEY (`bookId`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='图书';
```
阅读全文