主要内容如下:
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(); //获取类型名称