android - 如何让SQL安全插入?

标签 android mysql multithreading thread-safety

我正在为 Android 应用程序创建酒店预订系统。

我在考虑如何实现一种安全的方式将预订插入我的数据库。请求将通过我的网络服务从应用程序发送到 MySQL 数据库(托管在网络服务器上)。

当我创建预订时,我插入:CustomerID、HotelID、RoomID(通过嵌套的选择语句查找可用房间)、checkInDate 和 checkOutDate。

但是,如果两个不同的人大致同时点击“立即预订”,我如何才能确保他们不会预订同一个/最后一个房间。我考虑过将 Synchornised 用于 java 方法,但如果不同手机上的一系列不同用户尝试进行预订,这会有什么不同吗?

最佳答案

您要找的是transactions .

使用事务,您将能够将对给定记录集的访问隔离到单个原子逻辑实体中。任何具有一定复杂度的操作都会影响到多行、多列甚至表格,或者需要多条(原子或非原子)语句来完成。事务是一种确保数据逻辑一致性的机制,即使这些操作中的任何一个失败。在那种情况下,不完整的事务被回滚,否则事务被提交。

这些正是交易的两种可能结果:commitrollback。在伪代码中它看起来像这样:

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/

相关文章:

android - 更改 SQLite 数据库版本号

c# - 具有依赖注入(inject)的类单例行为

mysql - 加载 CSV 时设置插入时间戳

PHP 从 HTML5 获取数据属性

java - 守护线程不工作 T1、T2、T3 是类。我是分开写的。我犯了什么错误?为什么我的守护线程无法访问?

android - 如何在不同的线程上运行不同的进程并将输出输出到第一个线程? Python

android - YouTubePlayerFragment 后台堆栈

Android HTTP 获取

android - WebView 在 onPause 后不显示内容

mysql - 使用 dplyr 或池 : MySQL server has gone away 并行处理和查询 SQL