我正在为 Android 应用程序创建酒店预订系统。
我在考虑如何实现一种安全的方式将预订插入我的数据库。请求将通过我的网络服务从应用程序发送到 MySQL 数据库(托管在网络服务器上)。
当我创建预订时,我插入:CustomerID、HotelID、RoomID(通过嵌套的选择语句查找可用房间)、checkInDate 和 checkOutDate。
但是,如果两个不同的人大致同时点击“立即预订”,我如何才能确保他们不会预订同一个/最后一个房间。我考虑过将 Synchornised
用于 java 方法,但如果不同手机上的一系列不同用户尝试进行预订,这会有什么不同吗?
最佳答案
您要找的是transactions .
使用事务,您将能够将对给定记录集的访问隔离到单个原子逻辑实体中。任何具有一定复杂度的操作都会影响到多行、多列甚至表格,或者需要多条(原子或非原子)语句来完成。事务是一种确保数据逻辑一致性的机制,即使这些操作中的任何一个失败。在那种情况下,不完整的事务被回滚,否则事务被提交。
这些正是交易的两种可能结果:commit
或 rollback
。在伪代码中它看起来像这样:
begin transaction
try {
required operations to reserve a room for a given time frame
if( success)
commit transaction
else
rollback transaction
} catch {
rollback transaction
}
当然可以在 Java 中进行同步,但它有几个主要缺点:
- 它会阻止您扩展应用程序,因为它只影响当前进程。
- 它还会阻止您扩展解决方案,例如通过与相关程序共享数据
- 数据库事务旨在处理崩溃而不会产生不一致的数据
关于android - 如何让SQL安全插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27334845/