package com.bjpowernode.jdbc; import java.sql.*; import java.util.Scanner; /** * 需求:用户在控制台上输入desc则降序,输入asc则升序 * 思考:为了完成上述需求是使用Statement还是使用preparedStatement呢? * 这里就不能使用preparedStatement,因为它只适合传值,不能进行字符串的拼接,为此这里只能使用Statement。 * 此时如果使用PreparedStatement,通过传值来实现就会出现如下情况: * String sql = "select ename,sal from emp order by sal ?"; * ps = conn.prepareStatement(sql); * 这时对这条sql语句进行传值,一定是传入一个字符串的操作 * ps.setString(1,"asc"); * 传值后的sql语句就变成了如下的情况 * select ename,sal from emp order by sal "asc";双引号是自动添加的。这是错误的sql语句。 * select ename,sal from emp order by sal asc; 这是正确的sql语句。 * 为此为了实现排序的需求只能使用Statement。 */ public class 实现升序降序排列问题 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("请输入desc或asc【desc表示降序,asc表示升序:】"); String orderKey = s.next(); Connection conn = null; Statement stmt = null; ResultSet rs = null; try { //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","******"); //3.获取预编译的数据库操作对象 stmt = conn.createStatement(); //4.执行SQL语句 String sql = "select ename,sal from emp order by sal " + orderKey;//这里需要注意sal后面千万别少了一个空格" "。 rs = stmt.executeQuery(sql); //5.处理查询结果集 while (rs.next()){ //String ename = rs.getString("ename"); //String sal = rs.getString("sal"); System.out.println(rs.getString("ename") + "," + rs.getString("sal")); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
实现升序降序排列问题
于 2023-01-23 20:09:22 首次发布