jdbc概述 开发人员 jdbc接口规范 sun规定的标准,在 java.sql 包下 mysql驱动jar包 oracle驱动jar包 数据库厂商提供 mysql数据库 oracle数据库 开发流程 1注册驱动 Class.forName("com.mysql.jdbc.Driver"); 加载驱动类,实现自动注册。所有不同数据库厂商提供的驱动实现类都添加了静态代码块来自动注册。 注意:jdbc4.0之后驱动包在META-INF下添加了driver的实现类,不用写class.forname也能注册驱动。 2获取连接 String url = "jdbc:mysql://localhost:3306/store"; jdbc:mysql 表示协议 localhost:3306 表示数据库服务器IP和端口 store 表示数据库名称 Connection conn = DriverManager.getConnection(String url,String username,String password);
3获取执行环境
Statement stmt = conn.createStatement();
4执行sql返回resultset
ResultSet rs = stmt.executeQuery(String sql);
5处理结果集
while(rs.next()) {
rs.getInt();
rs.getString();
}
6释放资源
rs.close() stmt.close() conn.close() 先开后关,写在finally中 标准写法如下:
if(rs != null) {
try{
rs.close();
}catch(SQLException e) {
e.printStack();
}
rs = null;
}DriverDriverManager 1 DriverManager.regedistDriver(new com.msql.jdbc.Driver()); 2 DriverManager.getConnection(String url,String username,String password);Connection 1 statement 2 事务操作 setAutoCommit commit rollback setSavePointStatement(实际不用) executeQuery(DQL) executeUpdate(DML,DDL) PreparedStatement (mysql5之后默认不支持,需要通过参数设置开启预编译 useServerPrepStmts=true) 好处: * 防止SQL注入 ,屏蔽输入字符串中的mysql关键字功能,当作普通字符串。 * 提高可读性 * 提高效率 预编译原理: sql需要先被校验语法,然后被编译,才能被执行。pstmt的sql在第一次会做校验语法和编译,第二次则跳过直接执行。 SQL模板带有占位符?,占位符索引从1开始 模糊查询的匹配符在参数设置中体现,在sql中不体现。ps.setString("%s%") CallableStatement 调用存储过程 注意:ps和cs是statement的子接口 ResultSet 1 next() 判断下一行是否有数据 默认resultset的行光标在第一行的前面。 2 getInt() getString() getDouble() getDate() (返回的是java.sql.Date) getObject() 索引或者列名 索引从1开始 如果有别名则是别名 建议用列名来获取。 JDBCUtils自定义工具类 将注册驱动、获取连接、释放资源的代码 和 jdbc连接的四要素用配置文件进行加载 进行封装。 批处理批处理 url添加参数rewriteBatchedStatements=true Statement批处理 sql1 sql2 addBatch(sql1) addBatch(sql2) executeBatch() clearBatch()PreparedStatement批处理 sql setString(1,"name1") addBatch() setString(1,"name2") addBatch() executeBatch() clearBatch() eg: String sql = "insert into t_user(username,pwd,email) values(?,?,?)"; ps = conn.prepareStatement(sql); for (int i = 0; i <= 10000; i++) { ps.setString(1, "wangwu"+i); ps.setString(2, "pwd"+i); ps.setString(3, "wangwu"+i+"@163.com"); ps.addBatch(); if(i % 1000 == 0){ ps.executeBatch(); ps.clearBatch(); } } 连接池概述javax.sql包下的DataSource 连接池接口dbcp a 导包 commons-dbcp-1.4.jar commons-pool-1.3.jar b BasicDataSource source = new BasicDataSource(); c 设置连接池基本四要素 驱动类全名称 连接URL 用户名 密码 c3p0
导包 commons-dbutils-1.4.jarQueryRunner 该类可以实现crud操作 QueryRunner qr = new QueryRunner(连接池对象 source) QueryRunner.query() 查询 8种结果集 QueryRunner.update() 修改 删除 添加