java使用mysql预编译语句查询优势及示例详解

作者:移动安全星球 时间:2024-01-13 21:15:00 

预编译语句

预编译语句是一种用于执行参数化SQL查询的技术,它可以提高性能并减少SQL注入的风险。预编译语句主要有以下优势:

  • 避免SQL注入攻击。

  • 提高性能,因为预编译语句只编译一次,然后可以多次执行。

在Java中,使用java.sql.PreparedStatement接口实现预编译语句。以下是几个示例,展示了如何使用预编译语句进行各种数据库操作。

插入数据

以下示例展示了如何使用预编译语句插入数据:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class PreparedStatementInsertExample {
   public static void main(String[] args) {
       try {
           Class.forName("com.mysql.cj.jdbc.Driver");
           String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
           String username = "root";
           String password = "mypassword";
           Connection connection = DriverManager.getConnection(url, username, password);
           String sql = "INSERT INTO users (name, age) VALUES (?, ?)";
           PreparedStatement preparedStatement = connection.prepareStatement(sql);
           preparedStatement.setString(1, "User 7");
           preparedStatement.setInt(2, 30);
           preparedStatement.executeUpdate();
           preparedStatement.close();
           connection.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

查询数据

以下示例展示了如何使用预编译语句查询数据:

import java.sql.*;
public class PreparedStatementSelectExample {
   public static void main(String[] args) {
       try {
           Class.forName("com.mysql.cj.jdbc.Driver");
           String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
           String username = "root";
           String password = "mypassword";
           Connection connection = DriverManager.getConnection(url, username, password);
           String sql = "SELECT * FROM users WHERE age > ?";
           PreparedStatement preparedStatement = connection.prepareStatement(sql);
           preparedStatement.setInt(1, 30);
           ResultSet resultSet = preparedStatement.executeQuery();
           while (resultSet.next()) {
               System.out.println("ID: " + resultSet.getInt("id") + ", Name: " + resultSet.getString("name") + ", Age: " + resultSet.getInt("age"));
           }
           resultSet.close();
           preparedStatement.close();
           connection.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

更新数据

以下示例展示了如何使用预编译语句更新数据:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class PreparedStatementUpdateExample {
   public static void main(String[] args) {
       try {
           Class.forName("com.mysql.cj.jdbc.Driver");
           String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
           String username = "root";
           String password = "mypassword";
           Connection connection = DriverManager.getConnection(url, username, password);
           String sql = "UPDATE users SET age = ? WHERE name = ?";
           PreparedStatement preparedStatement = connection.prepareStatement(sql);
           preparedStatement.setInt(1, 31);
           preparedStatement.setString(2, "User 7");
           preparedStatement.executeUpdate();
           preparedStatement.close();
           connection.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

删除数据

以下示例展示了如何使用预编译语句删除数据:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class PreparedStatementDeleteExample {
   public static void main(String[] args) {
       try {
           Class.forName("com.mysql.cj.jdbc.Driver");
           String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
           String username = "root";
           String password = "mypassword";
           Connection connection = DriverManager.getConnection(url, username, password);
           String sql = "DELETE FROMusers WHERE age > ?";
           PreparedStatement preparedStatement = connection.prepareStatement(sql);
           preparedStatement.setInt(1, 60);
           preparedStatement.executeUpdate();
           preparedStatement.close();
           connection.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

通过这些示例,你应该对如何使用预编译语句有了更清晰的了解。预编译语句使得你能够在查询中使用参数,提高了性能并减少了SQL注入的风险。在实际项目中,尽量使用预编译语句来执行SQL查询。

来源:https://segmentfault.com/a/1190000043857357

标签:java,mysql,预编译,查询
0
投稿

猜你喜欢

  • ubuntu 安装pyqt5和卸载pyQt5的方法

    2021-08-25 07:18:41
  • python模拟鼠标拖动操作的方法

    2021-10-02 15:06:07
  • PHP基于yii框架实现生成ICO图标

    2024-06-05 09:44:14
  • 将 html 转成 ubb代码的小脚本

    2013-06-25 07:07:00
  • python-opencv 将连续图片写成视频格式的方法

    2023-08-25 23:00:06
  • 这样写python注释让代码更加的优雅

    2021-01-07 09:09:12
  • 使用python3 实现插入数据到mysql

    2024-01-15 07:53:22
  • python操作excel的方法(xlsxwriter包的使用)

    2021-10-26 21:47:54
  • 一个导航的前端实现

    2008-11-13 12:41:00
  • 用 Python 写的文档批量翻译工具效果竟然超出想象

    2022-02-10 08:38:51
  • PHP.vs.JAVA

    2023-11-17 20:28:51
  • Golang Compare And Swap算法详细介绍

    2024-02-19 16:08:02
  • pyqt5 获取显示器的分辨率的方法

    2023-10-25 09:51:36
  • ASP读取MySQL数据库出现乱码的解决办法

    2010-03-08 14:25:00
  • python 偷懒技巧——使用 keyboard 录制键盘事件

    2023-02-08 18:00:03
  • Python 操作SQLite数据库的示例

    2024-01-28 00:23:59
  • Python3 webservice接口测试代码详解

    2022-10-21 18:54:51
  • python XlsxWriter模块创建aexcel表格的实例讲解

    2023-08-30 02:20:47
  • vue实现excel表格的导入导出的示例

    2024-05-10 14:10:22
  • 教你在SQL Server数据库中导入导出数据

    2008-12-09 14:42:00
  • asp之家 网络编程 m.aspxhome.com