发表于: 2018-01-06 23:31:05

1 570


今天上午在做小课堂的准备,下午讲小课堂,结果。。。。没过。

明天还要继续讲。

今天就写一写重新修改过的小课堂内容吧,

一。对JDBC和JDBCTemplate的解释

JDBC(java Database connectivity,数据库连接)是一种用于执行SQL语句的Java API应用程序编程接口),可以为多种关系数据库(mysql,Oracle)提供统一访问,它由一组用JAVA语言编写的类和接口组成。可以实现对数据库的增删改查

template是Spring框架对JDBC封装的模板


二。JDBC的作用:

有了JDBC API,就不必为访问Mysql数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问DB2数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。


三。JDBCTemplate的三类方法:

JDBCtemplate主要提供三类方法,execute可以执行任何SQL语句,一般用来执行DDL语句(data definition language数据定义语言);executeupdate执行增删改;executequery执行查。


四。JDBC的操作流程:

1.初始化驱动,通过Driver接口。装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");

2.通过Connection对象建立与数据库的连接,提供端口号3306,数据库名称how2java,账号root,密码****

3.创建执行SQL语句的Statement

4.ResultSet处理执行结果。

5.依次关闭ResultSet,Statement,Connection


五。流程三的Statement接口的三种类

1.Statement,发送简单SQL语句(代码比较)

2.PreparedStatement发送含一或多个个参数的SQL语句,比Statement效率高,可以进行批处理

3.CallableStatement,调用储存过程


六:流程三的Statement方法

1.execute执行查询语句,返回boolean类型

2.executeQuery,运行select语句,返回ResultSet结果集

3.executeUpdate,运行insert、update、delete操作,返回int类型


七。JDBC的常见用途

1.JDBC的增删改,流程都是一样,就是Statement那一步插入不同的SQL语句。

2.注意查询要返回数据


八。常见问题:

1.PreparedStatement和Statement有什么区别?

答:Statement每次执行SQL语句,相关数据库都要进行SQL语句编译,PreparedStatement是预编译,对批量处理大大提高效率。

2.JDBC和JDBCTemplate的区别是什么?

JDBCTemplate其实是对JDBC的Connection对象做了封装,提高了整体安全性,减少了重复性代码;插入删除等操作时也不用像JDBC一个一个字段进行操作,减少了失误,并且摒弃了TryCatch块,更加安全。


九。做了PrepareStament和Statement插入数据对比。

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

   public class TestJDBCps {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");//加载驱动类,并且初始化它

           } catch (ClassNotFoundException e) {
e.printStackTrace(); }
int count = 10000;
           long start = System.currentTimeMillis();
           insertByPreparedStatment(count);
           long end = System.currentTimeMillis();
           System.out.printf("使用预编译Statement插入%d条数据,耗时: %d毫秒%n", count, end - start);

           start = System.currentTimeMillis();
           insertStatment(count);
           end = System.currentTimeMillis();
           System.out.printf("使用Statement插入%d条数据,耗时: %d 毫秒%n", count, end - start); }
private static void insertByPreparedStatment(int count) {
String sql = "insert into hero values(null,?,?,?)";
           try (Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/how2java",
                   "root", "1234");
                PreparedStatement ps = c.prepareStatement(sql);) {
for (int i = 0; i < count; i++) {
ps.setString(1, "提莫");
                   ps.setFloat(2, 313.0f);
                   ps.setInt(3, 50);
                   ps.execute();
               }
} catch (SQLException e) {
// TODO Auto-generated catch block
               e.printStackTrace();
           }
}
private static void insertStatment(int count) {
try (Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/how2java"," root", "1234");
                Statement s = c.createStatement();) {
for (int i = 0; i < count; i++) {
String sql = "insert into hero values(null," + "'提莫'" + "," + i + "," + i + ")";
                   s.execute(sql);
               }
} catch (SQLException e) {
e.printStackTrace();
           }
}
}

可以看到耗时差别,令人震惊的是,使用PrepareStament,耗时居然更长一些。


明天的计划:继续准备小课堂

遇到的问题:感觉脑子好迷茫啊啊啊啊

今天的收获:重新学习了下JDBC,又有新感觉

java任务一开始时间:2017.12.05

预计demo时间:2018.01-05

可能有延期风险,原因是:基础太差,很多任务的教程都卡壳,进行不下去。

禅道链接地址:http://task.ptteng.com/zentao/project-task-501.html



返回列表 返回列表
评论

    分享到