JDBC连接mysql数据库及PrepareStatement的作用及原理

java连接mysql数据库,首先需要引入mysql-connection-java.jar包,前面的博客中给大家分享了mysql-connection-java-5.1.28.jar包,有需要的自行下载。好了,上代码

//准备四大参数
String driverClassName="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/数据库名"+"?useServerPrepStmts=true&cachePrepStmts=true";//后面的参数作用是打开mysq预处理功能;
String username="root";
String password="123456";

//加载驱动类
Class.forName(driverClassName);
//得到con连接对象
Connection con=DriverManager(url,username,password);

//得到PrepareStatement对象
//通过con对象得到PrepareStatement对象
String sql="select * from user where username=? and password=?";
PreparedStatement pstmt=con.prepareStatement(sql);
//给sql中的参数赋值
pstmt.setString(1, myUserName);
pstmt.setString(2, myPassword);
		
ResultSet rs=pstmt.executeQuery();//调用查询方法
if(rs.next()){
	System.out.println("登录成功");
}
else{
	System.out.println("用户名或密码错误");
}

//关闭资源(倒关)
rs.close();
pstmt.close();
con.close();

这里的话使用的是PrepareStatement对象进行执行sql脚本。

使用PrepareStatement对象有三大优点:

    1、防止sql攻击

    2、提高代码可读性、可维护行

    3、提高sql执行效率

但是,使用PrepareStatement有一个前提,就是一定要开启数据库的预处理功能,而mysql数据库在4.0之后预处理功能默认是关闭的,所以我们在准备url这个参数时,要在后面加如上所示的参数。就是说如果你使用Statement执行sql脚本,就不需要在url后面加上该参数。

接下来,聊一聊PrepareStatement提高sql执行效率的原理。

     在sql语句执行时,会先校验sql语句有没有语法错误(通常这个过程所花费的时间比执行sql脚本还久),再执行sql语句。

     而PrepareStatement执行sql,因为它是与sql模板绑定在一起,所以只会在第一次执行时进行sql校验,后面执行时不会再进行校验(因为你前面已经校验过了),直接执行sql脚本。

猜你喜欢

转载自blog.csdn.net/qq_36742720/article/details/81529733