preparedStatement进行数据的增删改查curd
1、代码
public class preparedStatementCURD { //增加 @Test public void testInsert() throws Exception { //1.注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取连接 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_study", "root", "mysql"); //3.编写SQL语句结构,动态值用占位符 ? 替代 String sql="insert into t_user(account,password,nickname) values (?,?,?)"; //4.创建preparedStatement对象,并传入SQL语句 PreparedStatement preparedStatement = connection.prepareStatement(sql); //5.发送sql语句,并获取结果 preparedStatement.setString(1,"test1"); preparedStatement.setString(2,"123"); preparedStatement.setString(3,"asdw"); int row = preparedStatement.executeUpdate(); System.out.println(row); if (row > 0){ System.out.println("插入成功!"); }else { System.out.println("插入失败!"); } //6.关闭资源 preparedStatement.close(); connection.close(); } //删除 @Test public void testDelete() throws Exception { //1.注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取连接 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_study", "root", "mysql"); //3.编写SQL语句结构,动态值用占位符 ? 替代 String sql="delete from t_user where id=? ;"; //4.创建preparedStatement对象,并传入SQL语句 PreparedStatement preparedStatement = connection.prepareStatement(sql); //5.发送sql语句,并获取结果 preparedStatement.setInt(1,3); int row = preparedStatement.executeUpdate(); System.out.println(row); if (row > 0){ System.out.println("删除成功!"); }else { System.out.println("删除失败!"); } //6.关闭资源 preparedStatement.close(); connection.close(); } //修改 @Test public void testUpdate() throws Exception { //1.注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取连接 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_study", "root", "mysql"); //3.编写SQL语句结构,动态值用占位符 ? 替代 String sql="update t_user set nickname = ? where account = ?;"; //4.创建preparedStatement对象,并传入SQL语句 PreparedStatement preparedStatement = connection.prepareStatement(sql); //5.发送sql语句,并获取结果 preparedStatement.setString(1,"w11"); preparedStatement.setString(2,"test1"); int row = preparedStatement.executeUpdate(); System.out.println(row); if (row > 0){ System.out.println("修改成功!"); }else { System.out.println("修改失败!"); } //6.关闭资源 preparedStatement.close(); connection.close(); } /** * 目标:查询所有用户数据,并封装到一个List<Map> list集合中 * * 数据库 ->resultSet -> java -> 一行 -> map(key=列名,value=列的内容) -> List<Map> list * * 实现思路: * 遍历行数据 resultSet ,一行对应一个map, 获取一行的列名和对应的列的属性,装配即可 * 将map装到一个集合就可以了 * * 难点: * 如何获取列的名称? */ @Test public void testQuery() throws Exception { //1.注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取连接 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_study", "root", "mysql"); //3.编写SQL语句结构 String sql="select * from t_user;"; //4.创建preparedStatement对象,并传入SQL语句 PreparedStatement preparedStatement = connection.prepareStatement(sql); //5.结果集解析 ResultSet resultSet = preparedStatement.executeQuery(); List<Map> list= new ArrayList<>(); //获取列的信息对象 //TODO: metaData 装的当前结果集列的信息对象,(他可以获取列的名称根据下角标,可以获取列的数量) ResultSetMetaData metaData = resultSet.getMetaData(); //有了他之后我们可以水平遍历列 int columnCount = metaData.getColumnCount(); while (resultSet.next()){ Map map = new HashMap(); // int id = resultSet.getInt("id"); // String account = resultSet.getString("account"); // String password = resultSet.getString("password"); // String nickname = resultSet.getString("nickname"); //纯手动取值(不推荐使用) // map.put("id",id); // map.put("account",account); // map.put("password",password); // map.put("nickname",nickname); //自动遍历列 注意,要从1开始 并且小于等于总列数 for (int i=1;i<=columnCount;i++){ //获取指定列下角标的值,resultSet Object object = resultSet.getObject(i); //获取指定列下角标的列的名称,ResultSetMetaData //getColumnLabel:会获取别名,如果没有写别名才会获取列的名称 //getColumnName:获取的只是列的名称,不会获取别名,所有不适用 String columnLabel = metaData.getColumnLabel(i); map.put(columnLabel,object); } //一行数据的所有列全部存到了map中 //将map存储到集合中即可 list.add(map); // System.out.println("["+id+"]---["+account+"]---["+password+"]---["+nickname+"]"); } System.out.println(list); //获取集合中有多少条数据 System.out.println(list.size()); //6.关闭资源 resultSet.close(); preparedStatement.close(); connection.close(); } }
2、其中重点
/** * 目标:查询所有用户数据,并封装到一个List<Map> list集合中 * * 数据库 ->resultSet -> java -> 一行 -> map(key=列名,value=列的内容) -> List<Map> list * * 实现思路: * 遍历行数据 resultSet ,一行对应一个map, 获取一行的列名和对应的列的属性,装配即可 * 将map装到一个集合就可以了 * * 难点: * 如何获取列的名称? */
//获取列的信息对象 //TODO: metaData 装的当前结果集列的信息对象,(他可以获取列的名称根据下角标,可以获取列的数量) ResultSetMetaData metaData = resultSet.getMetaData(); //有了他之后我们可以水平遍历列 int columnCount = metaData.getColumnCount(); while (resultSet.next()){ Map map = new HashMap(); //自动遍历列 注意,要从1开始 并且小于等于总列数 for (int i=1;i<=columnCount;i++){ //获取指定列下角标的值,resultSet Object object = resultSet.getObject(i); //获取指定列下角标的列的名称,ResultSetMetaData //getColumnLabel:会获取别名,如果没有写别名才会获取列的名称 //getColumnName:获取的只是列的名称,不会获取别名,所有不适用 String columnLabel = metaData.getColumnLabel(i); map.put(columnLabel,object); } //一行数据的所有列全部存到了map中 //将map存储到集合中即可 list.add(map); }
3、总结
使用步骤:
1、注册驱动
1.注册驱动(反射触发) Class.forName("com.mysql.cj.jdbc.Driver");
2、获取连接
3、编写SQL语句
4、创建preparedStatement对象,并传入sql语句
//4.创建preparedStatement对象,并传入SQL语句 PreparedStatement preparedStatement = connection.prepareStatement(sql);
5、给占位符赋值
6、发送sql语句,并获取结果
ResultSet resultSet = preparedStatement.executeQuery();
7、结果集解析
8、关闭资源