一个mysql的查询,将查询到的数据写入到list集合并打印
//加载驱动 Class.forName("com.mysql.jdbc.Driver"); //建立连接.通过驱动管理器获取连接对像 String url="jdbc:mysql://127.0.0.1:3306/yangheng"; String user="root"; String password="tiger"; Connection conn=DriverManager.getConnection(url,user,password); //获取通道.根据连接的创建方法创建通道 Statement stm =conn.createStatement(); //执行sql语句,并存到结果集合 String sql="select * from ha"; ResultSet result=stm.executeQuery(sql); //list集合,存stuent对象 List<Student> list =new ArrayList<>(); while(result.next()){ Student stu=new Student(); stu.setName(result.getString("name")); stu.setAge(result.getString("age")); stu.setId(result.getString("id")); list.add(stu); } //遍历list集合 for (Student student : list) { System.out.println(student); }jdbc的三个通道
通道分为三种, |–>状态通道 Statement |–>准备通道 PreparedStatement |–>存储过程通道 CallableStatement 状态通道是接口, 准备通道 是 状态通道 的子类, 存储过程通道是准备通道的子接口 准备通道的优点 1:可以防止sql注入, 2:在特定的驱动数据库下相对效率要高于状态通道.但不绝对 3:不需要频繁编译,因为已经预加载了.(将sql语句的元素用占位符?替代,在下面赋值) 准备通道的获取, 是类:通过connection.prepareStatement() 方法获取 操作时遇到的事务操作, 语句 connection.setAutoCommit(flase); 设置不自动提交事务, 在操作时出现异常的话,需要回滚,, 回滚需要在提交前面,可以放在catch中,以保证数组库事务的执行
关于执行语句后的返回值的接收 如果是增删改操作的话,应该采用preparedStratement.executeUpdata()来接收, 返回int类型数值 表示有几行数据受到影响 如果是查询操作的话,execute()方法返回的是一个boolean型元素,表示判断有没有结果集.(一般没啥用) executeQuery() 返回一个结果集(ResultSet)存储过程通道 存储过程创建相对麻烦,但是做好后很方便,可以重复调用,相当于一个方法,通过传值进去完成对数据库的操作 获取存储过程通道 CallableStatement c=connection.prepareCall(“{call 存储过程名(?,?)}”);
存储过程通道很少有返回值,因为他不擅长查询操作,需要的话可以在存储过程中的加入相应的返回语句 存储过程通道就是在通过调用存储过程来进行对数据库的操作