▶JavaWeb — 01 JDBC+连接池+JDBCTemplate
▶JavaWeb — 01 JDBC+连接池+JDBCTemplate
一、知识储备和软件安装
1、安装idea
激活码:http://idea.medeming.com/jets/
2、安装 MySQL 和 MySQL Workbench
教程:https://www.cnblogs.com/kirin1105916774/p/13763165.html
3、MySQL Workbench使用语法
教程:http://c.biancheng.net/view/2625.html
二、笔记
1、JDBC
JdbcDemo1:JDBC快速入门
//1.导入驱动jar包 //2.注册驱动 Class.forName("com.mysql.jdbc.Driver"); System.out.println("数据库驱动加载成功"); //3.获取数据库连接对象 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3308/test", "root", ""); //连接的是MySQL57 - localhost:3308 - 无密码 ** 如果连接不上MySQL57,去“控制面板-管理工具-服务”中启动 System.out.println("数据库连接成功"); //4.定义sql语句 String sql = "update student set balance = 2000 where id = 1"; //5.获取执行sql的对象 Statement Statement stmt = conn.createStatement(); //6.执行sql int count = stmt.executeUpdate(sql); //executeUpdate返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败。 //7.处理结果 System.out.println(count); //输出结果为SQL表中的影响行数 //8.释放资源 stmt.close(); conn.close();
JdbcDemo2:student表 添加一条记录 insert
Statement stmt = null; Connection conn = null; try { //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //Alt+Enter:异常外抛出/try-catch //2.定义sql String sql = "insert into student values(null,'E',3000)"; //3.获取Connection的对象 conn = DriverManager.getConnection("jdbc:mysql://localhost:3308/test", "root", ""); //4.获取执行sql的对象Statement stmt = conn.createStatement(); //5.执行sql int count = stmt.executeUpdate(sql); //影响行数 //6.处理结果 System.out.println(count); //输出结果为SQL表中的影响行数 if(count > 0){ System.out.println("添加成功!"); }else{ System.out.println("添加失败!"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { //不管添加有没有成功,都要释放资源,所以要放在finally //7.释放资源 // 先定义的后释放:在释放资源时,要先释放stmt //(1)释放stmt //stmt.close(); //注:try里定义的stmt是局部变量,在finally里调用会报错,所以要在try-catch外定义,以提升它的作用域 //避免空指针异常 if(stmt != null){ try { stmt.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } //(2)释放conn if(conn != null){ try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } }
JdbcDemo3:student表 修改一条记录
JdbcDemo4:student表 删除一条记录
JdbcDemo5:执行DDL(create,alert,drop)语句(一般直接在MySQLWorkbench里执行):创建student2表
JdbcDemo6:获取表一行 ResultSet:结果集对象,封装查询结果
Statement stmt = null; Connection conn = null; ResultSet rs = null; //1.注册驱动 try { Class.forName("com.mysql.jdbc.Driver"); //2.连接 conn = DriverManager.getConnection("jdbc:mysql://localhost:3308/test","root",""); //3.定义sql语句 String sql = "select * from student"; //显示表 //4.获取执行sql对象 stmt = conn.createStatement(); //5.执行sql rs = stmt.executeQuery(sql); //6.处理结果 //6.1 让游标向下移动一行 rs.next(); //6.2 获取数据 int id = rs.getInt(1); String name = rs.getString("name"); double balance = rs.getDouble(3); System.out.println(id + "---" + name + "---" + balance); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { //7.释放资源 if(rs != null){ try { rs.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(stmt != null){ try { stmt.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } }
JdbcDemo7:获取表
//6.处理结果 while (rs.next()){ //法二:6.1循环判断结果集下一行是否有数据/游标是否是最后一行末尾。 //6.2 获取数据 int id = rs.getInt(1); String name = rs.getString("name"); double balance = rs.getDouble(3); System.out.println(id + "---" + name + "---" + balance); }
JdbcDemo8:定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回打印。
(JdbcDemo7+定义Emp类)
JdbcUtils:JDBC工具类
(配置文件jdbc.properties+JdbcDemo8)
JdbcDemo9:登录
JdbcDemo10:使用Connection对象来管理事务
* 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
* 在执行sql之前开启事务
* 提交事务:commit()
* 当所有sql都执行完提交事务
* 回滚事务:rollback()
* 在catch中回滚事务
2、JDBC连接池
(1)C3P0
C3P0Demo1:C3P0演示
C3P0Demo2:C3P0参数验证
使用c3p0-config.xml文件中默认配置和第2个配置
(2)Druid
DruidDemo1:Druid演示
JDBCUtils:Druid连接池的工具类
DruidDemo2:完成添加操作:给account表添加一条记录
3、JDBCTemplate
(写完JDBCUtils,用JDBCTemplate,可以简化update等操作)
JdbcTemplateDemo1:JdbcTemplate入门