1 JDBC介绍
JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL
数据库存取和操作的公共接
口
(一组
API
),定义了用来访问数据库的标准
Java
类库(
java.sql,javax.sql
)使用这些类库可以以一种
标准的方法、方便地访问数据库资源,具体的数据库厂商针对JDBC实现其数据库的具体实现类,我们则只需要调用接口方法即可。
JDBC程序编写步骤:
1.导包、加载注册驱动(JDBC 3 后不需注册驱动,因为在加载驱动类时,有一段静态代码块被执行,里面进行了驱动的注册)
2.创建Connection对象
3.创建Statement对象
4.执行sql语句
5.关闭Statement对象
6.关闭
Connection对象
2 获取数据库连接
获取数据库三要素:
1.Driver接口实现类
2.url
3.用户名和密码
@Test
public void testConnection() throws Exception {
//1.加载配置文件
InputStream is =
ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties(); pros.load(is);
//2.读取配置信息
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
//3.加载驱动
Class.forName(driverClass);
//4.获取连接 Connection conn = DriverManager.getConnection(url,user,password);
System.out.println(conn);
}
其中,配置文件声明在工程的
src
目录下:【
jdbc.properties
】
3 Statement VS PreparedStatement
使用Statement
操作数据表存在的弊端:
1.存在拼串操作,繁琐
2.存在SQL注入问题
PreparedStatement的优势:
1.预编译sql,提高执行效率
2.防止sql注入
3.可以操作BLOB类型字段
4.可以高效批量插入
操作BLOB类型字段
Connection conn = JDBCUtils.getConnection();
String sql = "update customers set photo = ? where id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
// 填充占位符
// 操作Blob类型的变量
FileInputStream fis = new FileInputStream("coffee.png");
ps.setBlob(1, fis);
ps.setInt(2, 25);
ps.execute();
fis.close();
JDBCUtils.closeResource(conn, ps);
批量插入:
@Test
public void testInsert() throws Exception{
long start = System.currentTimeMillis();
Connection conn = JDBCUtils.getConnection();
//1.设置为不自动提交数据
conn.setAutoCommit(false);
String sql = "insert into goods(name)values(?)";
PreparedStatement ps = conn.prepareStatement(sql);
for(int i = 1;i <= 1000000;i++){
ps.setString(1, "name_" + i);
//1.“攒”sql
ps.addBatch();
if(i % 500 == 0){
//2.执行
ps.executeBatch();
//3.清空
ps.clearBatch();
}
}
//2.提交数据
conn.commit();
long end = System.currentTimeMillis();
System.out.println("花费的时间为:" + (end - start));//1000000条:4978
JDBCUtils.closeResource(conn, ps);
}