jdbc之问号占位符的详细分析

您所在的位置:网站首页 括号里面一个问号什么意思啊 jdbc之问号占位符的详细分析

jdbc之问号占位符的详细分析

2024-07-14 09:13| 来源: 网络整理| 查看: 265

目录 前言实战

前言

先写sql语句框架

一个问号代表一个占位符,之后占位符接收一个值占位符不可使用双引号或者单引号获取占位符,给占位符传值,通过setString等方法

之所以要用问号占位符,在发送sql语句框架给DBMS,DBMS对sql语句框架进行预编译。 如果没有用占位符,正常执行编译信息,如果含有sql关键字,会将其编译,而执行有bug,出现sql注入等情况程序执行到此处,会发送

主要结合jdbc中的步骤 改掉某个步骤 如代码所示

// 3、获取预编译的数据库操作对象 // sql语句的框架中,一个?,表示一个占位符,一个?将来接收一个值。注意:?不要用单引号括起来 String sql = "select * from t_user where userName = ? and userPassword = ?"; // 程序执行到此处,会发送sql语句框架给DBMS,DBMS对sql语句框架进行预编译。 ps = conn.prepareStatement(sql); // 给占位符?传值,第一个?的下标是1,第二个?的下标是2(JDBC中下标都从1开始) ps.setString(1,userLoginInfo.get("userName")); ps.setString(2,userLoginInfo.get("userPassword")); // 4、执行sql语句 rs = ps.executeQuery(); 实战

通过结合jdbc的实战代码进行加深巩固

package ustc.java.jdbc; import java.sql.*; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class JDBCTest07 { public static void main(String[] args) { // 初始化界面 Map userLoginInfo = initUI(); // 验证用户名和密码 boolean loginSuccess = login(userLoginInfo); // 输出最后结果 System.out.println(loginSuccess ? "登录成功" : "登录失败"); } /** * 用户登录 * @param userLoginInfo 用户登录信息 * @return true表示登录成功,false表示登录失败 */ private static boolean login(Map userLoginInfo) { boolean loginSuccess = false; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { // 1、注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 2、获取连接 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase","root","146"); // 3、获取预编译的数据库操作对象 // sql语句的框架中,一个?,表示一个占位符,一个?将来接收一个值。注意:?不要用单引号括起来 String sql = "select * from t_user where userName = ? and userPassword = ?"; // 程序执行到此处,会发送sql语句框架给DBMS,DBMS对sql语句框架进行预编译。 ps = conn.prepareStatement(sql); // 给占位符?传值,第一个?的下标是1,第二个?的下标是2(JDBC中下标都从1开始) ps.setString(1,userLoginInfo.get("userName")); ps.setString(2,userLoginInfo.get("userPassword")); // 4、执行sql语句 rs = ps.executeQuery(); // 5、处理结果集 if(rs.next()) { loginSuccess = true; } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); } finally { // 6、释放资源 if (rs != null) { try { rs.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (ps != null) { try { ps.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } return loginSuccess; } /** * 初试化界面 * @return 用户输入的用户名和密码等登录信息 */ private static Map initUI() { Scanner s = new Scanner(System.in); System.out.print("请输入用户:"); String userName = s.nextLine(); System.out.print("请输入密码:"); String userPassword = s.nextLine(); Map userLoginInfo = new HashMap(); userLoginInfo.put("userName",userName); userLoginInfo.put("userPassword",userPassword); return userLoginInfo; } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3