JDBC的批量处理

来源:互联网 发布:php 微信开发流程 编辑:程序博客网 时间:2024/05/16 18:00
 

JDBC的批量处理

       主要内容如下:

1、  Statement的excute()方法只能执行一条sql语句,但是使用addBath()方法将要执行的sql语句加进来,然后执行excuteBath()方法,可在一次方法调用中执行多条sql语句,这样可以提高执行效率。

2、  使用PreparedStatement也可以进行批量处理。

3、  注意:批处理中执行的语句只能是更新语句(insert、delete、update),否则会抛出异常

4、  (1)今天老师讲的课堂实例部分代码分析:

创建TestBatch,包含main()方法

        Connection con=null;

        Statement stat=null;

        Con.JdbcUtil.getConnection;        //获取连接

stat.addBatch(“插入记录sql语句”);    //添加sql语句到批中

        stat.excuteBatch();                       //提交到mysql中

以上是用Statement完成批量处理的。、

(2)或者还可以用PreparedStatement完成批量处理。

        用for循环来完成。

        List<Student> list=new ArrayList<Student>;              //使用泛型

注意:批量中执行的语句只能是更新。

简单的来说,JDBC可做三件事:与数据库建立连接、发送 SQL 语句并处理结果。

PreparedStatement表示预编译的SQL语句的对象。

一、对获得Connection对象进行封装,

(1)       将数据库的配置信息写到一个属性文件中,然后用IO流去获取,当需要修改数据库连接的时候只要改动配置文件即可。

(2)       在src下新建属性文件jdbc.properties,添加内容如下:

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/数据库名称

username=root;

password=1234;

二、对关闭JDBC资源类的封装

新建DbClose.java类,添加方法关闭结果集对象、语句对象、连接对象。

在执行增加、删除、修改的时候可以使用代码关闭连接:DbClose.close(Statement stmt, Connection conn);

在执行查询之后使用如下代码关闭连接:DbClose.close(ResultSet rs, Statement stmt, Connection conn);

下面老师还讲了几个内容,如下:

一、分页

通过ResultSet的滚动可以设置获取记录的位置,但这样是从数据库中查询出所有数据,再从结果中筛选性能非常低。

每一页显示几条记录     5

想显示第几页:第3页              (3-1)*5+1   如果是从0开始,则不用加1,第三页的第一行记录号。

MySql提供了分页语法,在查询语句后使用limit关键字完成分页的功能。

       例如:select * from 表 limit 40,20;

       查询表中取出从第41条开始的20条记录,第一个参数表示忽略前面多少个,第二个参数代表取多少个。

二、 可更新结果集、敏感结果集

conn.createStatement(ResultSet.Type_scroll_Sensitive,ResultSet.concur_Updadbble);

结果集是一个可滚动的结果集。

敏感结果集与不敏感结果集的区别:

MySql不支持敏感结果集,         ResultSet        Type_scroll            sensitive

 

在查询到结果集的之后,可以直接通过修改结果集而是数据库中的记录同时发生变化,方法:把结果集设置成可更新结果集。不推荐这样做。如果想更新数据库记录,最要显性调用update语句。

代码如下:

1.      static void read() throws SQLException, InterruptedException {  

2.              Connection conn = null;  

3.              Statement st = null;  

4.              ResultSet rs = null;  

5.              try {  

6.                  // 2.建立连接   

7.                  conn = JdbcUtils.getConnection();  

8.                  // conn = JdbcUtilsSing.getInstance().getConnection();   

9.                  // 3.创建语句   

10.              st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,  

11.                      ResultSet.CONCUR_UPDATABLE);  

12.    

13.              // 4.执行语句   

14.              rs = st  

15.                      .executeQuery("select id, name, money, birthday  from user where id < 5");  

16.    

17.              // 5.处理结果   

18.              while (rs.next()) {  

19.                  int id = rs.getInt("id");  

20.                  System.out.println("show " + id + "...");  

21.                  Thread.sleep(10000);  

22.                  System.out.println(id + "/t" + rs.getObject("name") + "/t"  

23.                          + rs.getObject("birthday") + "/t"  

24.                          + rs.getObject("money"));  

25.              }  

26.          } finally {  

27.              JdbcUtils.free(rs, st, conn);  

28.          }  

29.      }  

Statement st=con.createStatement(但参数的);

先定位游标 if(rs.next()){

rs.getObject(1)

}

rs.updateString(2,”Tom”);     //2代表哪一行的第几列

rs.updateRow();                     //提交修改

三、元信息

结果集元信息。

课上老师演示部分代码解析如下:新建类TestDatabaseMetaData 包含main()方法

       接口:DatabaseMetaData

       (1)数据库元数据的获取:

              DatabaseMetaData dmd=con.getMetaData(); //获取数据库的元数据

              dmd.getDatabase ProductName();        //获取驱动名称

              dmd.getDriverName();                        //获取驱动的名称

              dmd.getDatabaseProductVersion();       //获取驱动版本号

              dmd.getDefaltTransactionIsolation();    //获取默认隔离级别

(3)       结果集元数据的获取

ResultSetMetaData resmd=null;

  resmd=res.getMetaData();            //获取结果集的元数据

  resmd.getColumnCount();            //获取一共有多少列

  for(int i=1;i<=resmd.getColumnCount();i++){   

resmd.getColumnLabel(i);     //获取每一列的名称

              }

              resmd.getColumnType();              //获取类型

              resmd.getColumnTyoeName();      //获取类型名称

四、在最后下课的时候,老师给我们简单的说了一下反射,它最关键的事怎样获取Class类型的对象,使项目更具有可扩展性。

同时也简单的给我们提了一下数据库连接池。

 

原创粉丝点击