JDBC+MySQL入门实战(实现CURD的例子) (4)

执行完毕刷新navicat中student表你会发现数据被成功插入了:

JDBC+MySQL入门实战(实现CURD的例子)

批量插入

如果同时有100组数据或者更多若干组数据让你插入你会怎么操作?

循环一个一个的插入

JDBC+MySQL入门实战(实现CURD的例子)

批处理一次插入多个

JDBC+MySQL入门实战(实现CURD的例子)


批量处理相比循环的单个单个处理起来省了很多时间,提高了系统效率。所以当遇到较多数据时可以选择多个插入。

批量插入实现也很容易,在sqlmanage中编写insertStudents(student students[])函数用来批量插入学生记录:

public void insertStudents(student students[]) throws SQLException { this.con.setAutoCommit(false);//不自动提交 String sql="insert into student(name,age,high)value(?,?,?)"; PreparedStatement ps =con.prepareStatement(sql); for(int i=0;i<students.length;i++) { ps.setString(1,students[i].getName()); ps.setInt(2,students[i].getAge()); ps.setInt(3,students[i].getHigh()); ps.addBatch(); if(i%1000==0) { ps.executeBatch(); } } ps.executeBatch(); con.commit(); ps.close(); }

其中:

con.setAutoCommit(false)意为不自动提交,因为我们在批量处理的时候一般手动提交提高效率。

主要通过PreparedStatement对象的addBatch()进行多组插入而未提交。

如果为设置不自动提交当执行executeBatch()时就会提交,但为了减小提交次数已经设置不自动提交。当且仅当con.commit()执行才会真的提交到MySQL中。

接着在test单元测试中编写insertStudentsTest()函数进行测试批量插入:

@Test public void insertStudentsTest() throws SQLException, ClassNotFoundException { sqlmanage sqlmanage=new sqlmanage(); student students[]=new student[5]; for(int i=0;i<students.length;i++) { students[i]=new student("路人"+i,12,156); } sqlmanage.insertStudents(students); }

执行完毕后你可以看到数据被成功插入MySQL中:

JDBC+MySQL入门实战(实现CURD的例子)

查询数据

查询的使用频率要远比其他的操作多,虽然有些复杂表的查询可能会让人比较头疼,但基础的sql查询还是比较简单,其语法格式为:

select 字段1,字段2,…… from 表名 [where 条件] //方式1 select * from 表名 [where 条件] //方式2

其中如果没有where条件那么就默认查询整张表的内容,我们在这里根据此条件查询所有记录:查询返回年龄小于21岁的所有学生

首先在sqlmanage中编写getallstudent()函数,用来查询student表中所有age小于21的记录,并把查询的数据最终以List<studnet>类型返回:

public List<student> getallstudent() throws SQLException { List<student>list=new ArrayList<student>();//返回的结果 String sql = "select * from student where age < 21"; PreparedStatement ps = con.prepareStatement(sql); ResultSet resultSet=ps.executeQuery();//结果集 while(resultSet.next())//遍历 { int id=resultSet.getInt(1); String name=resultSet.getString(2); int age=resultSet.getInt(3); int high=resultSet.getInt(4); list.add(new student(id,name,age,high)); } ps.close(); return list; }

在前面讲的插入的过程返回值其实不需要特别处理,因为返回是插入成功与否的消息,而在查询的步骤就要严格的跟着JDBC的6个步骤来—因为需要对返回的数据进行处理。我们主要通过ResultSet处理返回的数据。

在对ResultSet进行迭代遍历取值的过程中,通过getXXX(int index)的方法取值并自动转换为java对应的数据类型。而index为MySQL数据库表格列的编号,也是数据在ResultSet中的对应序列号。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjdsf.html