`
zhanglm
  • 浏览: 76026 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

mysql的PrepareStatement

阅读更多

dba发邮件说:
引用
如果是从java中连mysql,使用PrepareStatement的话,默认情况下真正发给服务器端之前已经把?替换了

也就是跟普通的Statement一样

在5.0开始虽然有了真正的PrepareStatement但是开启的方式令人匪夷所思

网上虽然有资料说设置useServerPrepStmts=true 可以开启

但事实上这是无效的

真正的开启方式是useCursorFetch=true

比如:
jdbc:mysql://127.0.0.1:3306/test?useCursorFetch=true

以上是本人抓包和阅读mysql驱动得出的结论,并且通过抓包和查看官方文档证实了


不过文档里http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-configuration-properties.html确实是说要useServerPrepStmts=true的

搞不懂。
不过,我想既然人家dba抓包抓到的应该不会有错了。
官方文档也不会随便这么说说的。
以后如果要PrepareStatement的时候,两个都加上。一个是服务器上的,一个是从客户端发过去的。

分享到:
评论

相关推荐

    JDBC PrepareStatement 使用(附各种场景 demo)

    本资源主要涵盖了使用JDBC PrepareStatement进行MySQL数据库操作的各种场景,包括基本的查询、更新以及批量处理。 首先,我们来看一下JDBC连接MySQL的步骤。在Java程序中,我们需要导入相应的JDBC驱动,例如`...

    MySQL prepare语句的SQL语法

    MySQL prepare语法: PREPARE statement_name FROM preparable_SQL_statement; /*定义*/ EXECUTE statement_name [USING @var_name [, @var_name] …]; /*执行预处理语句*/ {DEALLOCATE | DROP} PREPARE statement_...

    MySQL中预处理语句prepare、execute与deallocate的使用教程

    MySQL官方将prepare、execute、deallocate统称为PREPARE STATEMENT,我习惯称其为【预处理语句】,其用法十分简单,下面话不多说,来一起看看详细的介绍吧。 示例代码 PREPARE stmt_name FROM preparable_stmt ...

    MySQL prepare原理详解

    ”占位符的SQL语句,进行硬解析并生成语法树,然后存储在当前线程的PrepareStatement缓存中,用stmt->id作为键。Execute阶段,客户端只需提供stmt->id和参数,服务器就能从缓存中找到已解析的语句,设置参数并执行,...

    mysql-connector-java-8.0.16

    PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "John Doe"); pstmt.setString(2, "john.doe@example.com"); pstmt.executeUpdate(); ``` 此外,MySQL Connector/J还支持事务管理,这...

    JDBC:MySQL8.0.29驱动

    PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "John Doe"); pstmt.setString(2, "john@example.com"); pstmt.executeUpdate(); ``` 5. **处理结果集**:如果SQL语句是查询,...

    mysql-connector-java-5.1.37-bin.jar

    3. 执行 SQL:通过 `Connection` 对象的 `createStatement()` 或 `prepareStatement()` 方法创建 `Statement` 或 `PreparedStatement` 对象,然后调用它们的 `executeQuery()` 或 `executeUpdate()` 方法执行 SQL。...

    MySql Connector Java 5.1.23.rar

    3. **预编译和执行 SQL**:通过 `Connection` 对象的 `prepareStatement()` 或 `createStatement()` 方法创建 `Statement` 或 `PreparedStatement` 对象,然后执行 SQL 语句。 4. **处理结果**:如果 SQL 语句是...

    mysql-connector-java-5.1.35 MySQL的jdbc驱动jar

    3. 获取Statement或PreparedStatement对象:通过连接对象的`createStatement()`或`prepareStatement()`方法创建用于执行SQL语句的对象。 4. 执行SQL:调用Statement或PreparedStatement对象的`executeQuery()`或`...

    mysql的JDBC驱动包

    `或`PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM mytable WHERE id = ?");` 4. 执行查询或更新:调用Statement或PreparedStatement的方法执行SQL,如`ResultSet rs = stmt.executeQuery();`或`...

    Java连接mysql实现crud

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table_name values (?, ?)"); pstmt.setString(1, "value1"); pstmt.setInt(2, 123); pstmt.executeUpdate(); ``` - **读取(Read)**:通过`...

    mysql-connector-java-8.0.30.tar

    PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM mytable WHERE id = ?"); pstmt.setInt(1, 123); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { // 处理结果集 } ``` 6. **...

    Android 远程连接mysql 驱动 8.0.29

    PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM your_table"); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { // 处理结果集 } rs.close(); pstmt.close(); conn.close(); ...

    Java实现用Mysql存取图片操作实例

    ps = con.prepareStatement("INSERT INTO test.phototest VALUES (?, ?)"); ps.setInt(1, 2); ps.setBinaryStream(2, in, in.available()); ps.executeUpdate(); in.close(); DB.closeConn(con); // 从...

    最新版 JDBC,版本号为mysql-connector-java-8.0.16

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table (column1, column2) VALUES (?, ?)"); ``` 4. 执行SQL:使用Statement或PreparedStatement对象执行SQL查询、插入、更新或删除操作。 ```java...

    mysql-connector-java-5.1.32

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable VALUES (?, ?)"); pstmt.setString(1, "value1"); pstmt.setInt(2, 123); pstmt.executeUpdate(); ``` 5. **处理结果集**:对于SELECT...

    mysql驱动jar包

    3. **预编译语句与执行SQL**:`java.sql.Connection`接口提供了`prepareStatement()`方法来创建预编译的`PreparedStatement`对象,可以防止SQL注入。例如: ```java PreparedStatement pstmt = conn.prepare...

    java 数据库 mysql 增删改查

    PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "John Doe"); pstmt.setString(2, "john.doe@example.com"); pstmt.executeUpdate(); ``` 4. **删(Delete)**:删除数据库中的特定记录...

Global site tag (gtag.js) - Google Analytics