Statement和PreparedStatement
如果执行的SQL语句中存在变量,为了避免SQL注入所以使用PreparedStatement
如果SQL语句中没有变量则使用Statement
批量操作
批量操作就是将多条SQL语句执行时的多次网络数据传输合并成一次传输,从而提高执行效率
代码参考Demo06.java
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.Statement; /** * 批量操作 * @author 海拥😋 * @date 2020年5月7日 下午3:27:24 */ public class Demo06 { public static void main(String[] args) { //获取连接 try (Connection conn = DBUtils.getConn();) { String sql1="insert into user values(null,'刘备','123')"; String sql2="insert into user values(null,'关羽','123')"; String sql3="insert into user values(null,'张飞','123')"; Statement s = conn.createStatement(); // s.executeUpdate(sql1); // s.executeUpdate(sql2); // s.executeUpdate(sql3); //通过批量操作将多次数据传输合并成一次 // s.addBatch(sql1); // s.addBatch(sql2); // s.addBatch(sql3); // //执行批量操作 // s.executeBatch(); // System.out.println("执行完成"); //preparedStatement批量操作 String sql = "insert into user values(null,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); for (int i = 0;i<100;i++) { ps.setString(1, "name"+i); ps.setString(2, "pw"+i); //添加到批量操作 ps.addBatch(); //每隔20次执行一次 避免内存溢出 if(i%20==0) { ps.executeBatch(); } } //执行批量操作 ps.executeBatch(); System.out.println("执行完成"); } catch (Exception e) { e.printStackTrace(); } } }
分页查询
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Scanner; /** * 分页查询 * @author 海拥😋 * @date 2020年5月7日 下午4:22:49 */ public class Demo07 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入查询的页数"); int page = sc.nextInt() ; System.out.println("请输入查询的条数"); int count = sc.nextInt(); if(page<1) { System.out.println("输入错误"); } //获取连接 try (Connection conn = DBUtils.getConn();) { String sql ="select username,password from user limit ?,?"; PreparedStatement ps =conn.prepareStatement(sql); //第一个?代表跳过的条数=(请求页数-1)*条数 ps.setInt(1, (page-1)*count); //第二个?代表请求条数(每页条数) ps.setInt(2,count); //执行查询 ResultSet rs = ps.executeQuery(); while(rs .next()) { String username = rs.getString(1); String password = rs.getString(2); System.out.println( username+":"+password) ; } } catch (Exception e) { e.printStackTrace(); } } }
获取自增主键值
import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; /** * 获取自增主键值 * @author 海拥😋 * @date 2020年5月7日 下午4:40:33 */ public class Demo08 { public static void main(String[] args) { //获取连接 try (Connection conn = DBUtils.getConn();) { String sql = "insert into user values(null,'james','123456')"; Statement s = conn.createStatement(); //编译SQL语句时,需要设置返回自增主键值 s.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS); //通过结果集 获取自增的主键值 ResultSet rs = s.getGeneratedKeys(); if(rs.next()) { int id =rs.getInt(1); System.out.println("id="+id); } System.out.println("插入完成"); } catch (Exception e) { e.printStackTrace(); } } }
创建球队表
create table team(id int primary key auto_increment,name varchar(10))charset=utf8;
创建球员表
create table player(id int primary key auto_increment,name varchar(10),teamId int)charset=utf8;
球队球员小练习
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.Scanner; /** * @author 海拥😋 * @date 2020年5月7日 下午5:17:59 */ public class Demo09 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入球队名字"); String teamName = sc.nextLine(); System.out.println("请输入球员名字"); String playerName = sc.nextLine(); // 获取连接 try (Connection conn = DBUtils.getConn();) { String sql = "insert into team values(null,?)"; PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); // 替换? ps.setString(1, teamName); // 执行 ps.executeUpdate(); // 获取自增主键值 ResultSet rs = ps.getGeneratedKeys(); if (rs.next()) { int teamId = rs.getInt(1); System.out.println("球队id:"+teamId); String psql = "insert into player values(null,?,?)"; PreparedStatement pps = conn.prepareStatement(psql); pps.setString(1, playerName); pps.setInt(2, teamId); pps.executeUpdate(); System.out.println("保存完成!"); } } catch (Exception e) { e.printStackTrace(); } } }
代码介绍
Demo05 登录功能 接触了预编译的Sql执行对象 讲解了SQL注入(给用户写值的位置,用户写进去了SQL语句 导致原有逻辑发生改变)
Demo06 批量操作
Demo07 分页查询
Demo08 获取自增主键值
Demo09 球队球员小练习
Java、Python、算法知识体系 | PPT、简历模板 | 游戏源码 | IT行业趣味资讯 | 装机必备软件