2阶——JDBC,JDBCTemplate(操作数据库)
JDBC:操作所有关系型数据库的规则,即接口;各个数据库厂商去实现接口提供所谓的驱动jar
1:导入jar包
2:注册驱动
3:获取数据库连接对象Connection
4: 定义Sql
5: 获取Statement对象
6 执行sql接收返回结果 resultset
7:释放资源
package cn.jdbc; import com.mysql.jdbc.Driver; import java.sql.*; public class Demo1 { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/day11"; String username = "root"; String password = "123456"; try { Class.forName("com.mysql.jdbc.Driver"); //将Driver类加载到内存 就会自动执行以下的静态代码块 // com.mysql.jdbc.Driver 通过查看源码Driver中含有以下静态代码块 // static { // try { // DriverManager.registerDriver(new Driver()); // } catch (SQLException var1) { // throw new RuntimeException("Can't register driver!"); // } // } Connection cn = DriverManager.getConnection(url,username,password); String sql = "select * from day11"; PreparedStatement sta = cn.prepareStatement(sql); ResultSet rs = sta.executeQuery(); while (rs.next()){ int id = rs.getInt(1); String name = rs.getString(2); System.out.println(id+"___"+name); } rs.close(); sta.close(); cn.close(); } catch (Exception e) { e.printStackTrace(); } } }
JdbcTemplate简介
参见:https://www.cnblogs.com/caoyc/p/5630622.html
Spring对数据库的操作在jdbc上面做了简单的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。
JdbcTemplate主要提供以下方法:
-
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
-
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
-
query方法及 queryForXXX 方法:用于执行查询相关语句;
- call 执行存储过程
主要代码
<?xml version="1.0" encoding="utf-8"?> <c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/xxx</property> <property name="user">root</property> <property name="password"></property> <property name="initialPoolSize">5</property> <property name="maxPoolSize">10</property> <property name="checkoutTimeout">3000</property> </default-config> <named-config name="otherc3p0"> </named-config> </c3p0-config>
//c3p0连接池核心对象会自动去读取src下的c3p0-config.xml配置文件 ComboPooledDataSource dataSource = new ComboPooledDataSource(); JdbcTemplate temp = new JdbcTemplate(dataSource); // 自动获取conncetion对象 自动释放资源
操作代码
package cn.jdbctemplate; import com.mchange.v2.c3p0.ComboPooledDataSource; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import java.util.*; public class Demo1 { public static void main(String[] args) { //c3p0连接池核心对象会自动去读取src下的c3p0-config.xml配置文件 ComboPooledDataSource dataSource = new ComboPooledDataSource(); JdbcTemplate temp = new JdbcTemplate(dataSource); // 自动获取conncetion对象 自动释放资源 //update 执行更新 String sql = "update day17 set name = 222222 where id = ? "; //temp.update(sql,1); //执行插入 String sql2 = "insert into day17(id,name) values( ? , ? ) "; //temp.update(sql2,5,"insert.."); //执行删除 String sql3 = "delete from day17 where id = ? "; temp.update(sql3,5); //...................查询.................... //queryForMap 查询的结果必须是唯一的!不然报错 String sql4 = "select * from day17 where id = ? "; //Map<String, Object> map = temp.queryForMap(sql4,1); //System.out.println(map); //{id=1, name=222222} //queryForList String sql5 = "select * from day17"; // List<Map<String, Object>> maps = temp.queryForList(sql5); //for(Map<String,Object> m : maps){ //System.out.println(m); //{id=1, name=222222} //{id=2, name=电脑部1} //} //query 将查询的数据封装javabean再存入集合中 List<Student> list = temp.query(sql5, new BeanPropertyRowMapper<Student>(Student.class)); for(Student s : list){ System.out.println(s); //Student{id=1, name='222222'} // Student{id=2, name='电脑部1'} } //queryForObject 一般执行聚合函数 String st = "select count(id) from day17"; Long aLong = temp.queryForObject(st, Long.class); System.out.println(aLong); } }
//批量操作
String sql="insert into user (name,deptid) values (?,?)"; List<Object[]> batchArgs=new ArrayList<Object[]>(); batchArgs.add(new Object[]{"caoyc",6}); batchArgs.add(new Object[]{"zhh",8}); batchArgs.add(new Object[]{"cjx",8}); jdbcTemplate.batchUpdate(sql, batchArgs);
坚持