数据库mysql的查询语句预处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库mysql的查询语句预处理相关的知识,希望对你有一定的参考价值。

public int denglu(String name,String password) throws ClassNotFoundException,
SQLException
int flag=0;
try
java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver());

catch(SQLException ex)

System.err.println("连接失败");
System.exit(1);

String URL = "jdbc:mysql://localhost:3306/denglu";
try
Connection con = java.sql.DriverManager.getConnection(URL,"root","891123");
String sql = "select ID from login where ID=? and mima=?";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1,name);
stmt.setString(2,password);
ResultSet rs = stmt.executeQuery(sql);
while (rs.next())
//该用户合法
flag=1;

rs.close();
stmt.close();
con.close();

catch(SQLException e)System.out.print(e);
return flag;

不知道为什么会出现:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and mima=?' at line 10
我认为这儿没有错误的

检查一下你的问号是否是全角字符,因为从提示中看你两个问号不一样,一个全角,一个半角 (??) 参考技术A You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and mima=?' at line 10

'? and mima=?'

你这两个问号很明显不是一样的,应该是有全角问号了

MySQL查询过程

MySQL查询过程 :

技术图片

 

查询缓存:

在解析一个查询语句前,如果查询缓存是打开的,那么MySQL会检查这个查询语句是否命中查询缓存中的数据,如果当前查询恰好命中查询缓存,在检查一次用户权限后直接返回缓存中的结果.中中情况下,查询语句不会被解析,也不会生成执行计划,更不会被执行

语法解析和预处理:

MySQL通过关键字对SQL语句进行解析,并生成一颗对应的解析树.这个过程解析器通过语法规则来验证和解析.

预处理则会根据MySQL规则进一步检查解析树是否和法,比如检查药查询的数据表和数据列是否存在.

查询优化:

优化器将解析树转化成查询计划,一条查询可以有多种执行计划,优化器的作用就是选择一条最优的执行计划

查询执行引擎:

调用存储引擎来执行查询计划得出结果

返回结果给客户端:

将结果返回给客户端,如果查询缓存打开且这个查询可以被缓存,MySQL会将结果存放在缓存中

 

 

总结一下MySQL整个查询执行过程,总的来说分为6个步骤:

  1. 客户端向MySQL服务器发送一条查询请求
  2. 服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段
  3. 服务器进行SQL解析、预处理、再由优化器生成对应的执行计划
  4. MySQL根据执行计划,调用存储引擎的API来执行查询
  5. 将结果返回给客户端,同时缓存查询结果

 

详细介绍:https://www.cnblogs.com/shuaishuai1993/p/9187601.html

以上是关于数据库mysql的查询语句预处理的主要内容,如果未能解决你的问题,请参考以下文章

8张图,5大组件!了解MySQL查询语句执行过程。

mysql like查询语句

MySQL查询过程

mysql如何批量查询大量数据

Mysql优化系列之——优化器对子查询的处理

MySQL高级SQL语句