发表于: 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
评论