当我们使用PreparedStatement (这里描述的http://tutorials.jenkov.com/jdbc/preparedstatement.html)执行SQL查询时,如果我们使用SQL Server或Postgres这样的数据库,那么executeQuery()方法到底做了什么?它是直接将SQL查询转换为一组数据库操作,还是对数据库服务器进行网络调用,从而将SQL查询转换为数据库操作?这更一般地是一个关于SQL Server等数据库如何工作的问题。我只是想知道它们是否运行在与调用executeQuery()的服务器不同的服务器上。
发布于 2021-06-13 23:09:54
每个数据库系统的实现细节各不相同,但一般情况下,使用RDBMSes作为其本机查询语言的JDBC驱动程序的工作方式如下:
Connection.prepareStatement(...)时,查询将发送到数据库服务器进行编译PreparedStatement.executeQuery(),驱动程序发送execute命令以及收集的参数值,数据库服务器将执行先前使用这些参数值编译的语句。换句话说,驱动程序不关心数据库服务器上的低级操作,而只是向数据库服务器发送“编译”和“带参数执行”命令,数据库服务器负责低级操作。
需要说明的是,并不是所有的司机都是这样工作的。例如,server /J缺省情况下在本地‘编译’语句(确定参数的数量),在执行时,它会将参数值(通过适当的转义)内联到语句中,然后发送一个带有文字值的MySQL字符串,而不是在数据库服务器上执行的参数。但是,在这种情况下,数据库服务器仍然负责确定和执行必要的低级操作。
另一方面,某些NoSQL数据库(或其他类型的数据存储)的驱动程序完全有可能将SQL查询转换为对该数据存储的低级操作。
https://stackoverflow.com/questions/67958509
复制相似问题