7.jdbc
来源:互联网 发布:docker nginx负载均衡 编辑:程序博客网 时间:2024/06/11 18:00
1.理解
- java操作数据库.jdbc是oracle公司指定的一套规范(一套接口)
- 驱动:jdbc的实现类.由数据库厂商提供.
- jdbc作用:
- 连接数据库
- 发送sql语句
- 处理结果
2. jdbc操作步骤:
- 数据库和表
- 创建一个项目
- 导入驱动jar包(mysql-connector-java-5.1.39-bin.jar)
- 新建一个目录lib,将包放在此目录下
- 选中驱动右键,build path
编码:
注册驱动
Class.forName("com.mysql.jdbc.Driver");
获取连接
static Connection getConnection(String url, String user, String password) 参数1:告诉我们连接什么类型的数据库及连接那个数据库协议:数据库类型:子协议 参数 mysql: jdbc:mysql://localhost:3306/数据库名称 oracle: jdbc:oracle:thin@localhost:1521@实例参数2:账户名 root参数3:密码Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/day07", "root", "123456");
编写sql
String sql = "select * from category";
创建预编译的语句执行者
PreparedStatement st = conn.prepareStatement(sql);
- 设置参数
- 执行sql
ResultSet rs = st.executeQuery(); 处理结果
while(rs.next()){ System.out.println(rs.getString("cid") + "::" + rs.getString("cname")); }
- 释放资源
//先打开的后关闭
rs.close();
st.close();
conn.close();
3. jdbc-api详解:
- 所有的包 都是 java.sql 或者 javax.sql
3.1 DriverManager:管理了一组jdbc的操作 类
`DriverManager.registerDriver(new Driver());`
3.2 Driver:java.sql 接口 驱动
Connection:连接 接口
3.2.1 常用方法:
获取语句执行者:
Statement createStatement() :获取普通的语句执行者 会出现sql注入问题 ★PreparedStatement prepareStatement(String sql) :获取预编译语句执行者 (了解)CallableStatement prepareCall(String sql):获取调用存储过程的语句执行者 setAutoCommit(false) :手动开启事务 commit():提交事务 rollback():事务回滚
3.3 Statement:语句执行者 接口
PreparedStatement:预编译语句执行者 接口
3.3.1 常用方法:
设置参数: setXxx(int 第几个问号,Object 实际参数); 常见的方法: setInt setString setObject执行sql: ResultSet executeQuery() :执行 r 语句 返回值:结果集 int executeUpdate() :执行cud 语句 返回值:影响的行数
3.4 ResultSet:结果集 接口
执行查询语句之后返回的结果
3.4.1 常用方法:
boolean next():判断是否有下一条记录,若有返回true且将光标移到下一行,若没有呢则返回false 光标一开始处于第一条记录的上面获取具体内容 getXxx(int|string) 若参数为int :第几列 若参数为string:列名(字段名) 例如: 获取cname的内容可以通过 getString(2) getString("cname") 常用方法: getInt getString 也可以获取int值 getObject 可以获取任意
4. 将类加载到内存中:
方式1: Class.forName("全限定名");//包名+类名 com.mysql.jdbc.Driver方式2: 类名.class;方式3: 对象.getClass();
5. 配置文件
5.1 常见的配置文件格式
- properties:里面内容的格式 key=value
- xml
5.2 获取配置文件
若我们的配置文件为properties,并且放在src目录下.我们可以通过 ResourceBundle工具快速获取里面的配置信息
使用步骤:
1.获取ResourceBundle 对象: static ResourceBundle getBundle("文件名称不带后缀名") 2.通过ResourceBundle 对象获取配置信息 String getString(String key) :通过执行key获取指定的value
6. 连接池
6.1 连接池概述:管理数据库的连接
作用:
提高项目的性能.就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.所有的连接池必须实现一个接口 javax.sql.DataSource接口
获取连接方法:
Connection getConnection() 归还连接的方法就是以前的释放资源的方法.调用connection.close();
6.2 常用连接池:
DBCPC3P0
6.2.1 DBCP:
apache组织
使用步骤:
1.导入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)2.使用api a.硬编码 //创建连接池 BasicDataSource ds = new BasicDataSource(); //配置信息 ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql:///day07"); ds.setUsername("root"); ds.setPassword("1234"); b.配置文件 实现编写一个properties文件 //存放配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("src/dbcp.properties")); //设置 //prop.setProperty("driverClassName", "com.mysql.jdbc.Driver"); //创建连接池 DataSource ds = new BasicDataSourceFactory().createDataSource(prop);
6.3 C3P0:
hibernate和spring使用,有自动回收空闲连接的功能.
使用步骤:
1.导入jar包(c3p0-0.9.1.2.jar)2.使用api a.硬编码(不推荐) new ComboPooledDataSource() b.配置文件 配置文件的名称:c3p0.properties 或者 c3p0-config.xml 配置文件的路径:src下 编码只需要一句话 new ComboPooledDataSource()//使用默认的配置 new ComboPooledDataSource(String configName)//使用命名的配置 若配置的名字找不到,使用默认的配置
dbutils
是apache组织的一个工具类,jdbc的框架,更方便我们使用
使用步骤:
1.导入jar包(commons-dbutils-1.4.jar)2.创建一个queryrunner类 queryrunner作用:操作sql语句 构造方法: new QueryRunner(Datasource ds);3.编写sql4.执行sql query(..):执行r操作 update(...):执行cud操作
核心类或接口
QueryRunner:类名
- 作用:操作sql语句
- 构造器:
new QueryRunner(Datasource ds);
注意:底层帮我们创建连接,创建语句执行者 ,释放资源.
常用方法:
query(..):update(..):DbUtils:释放资源,控制事务 类closeQuietly(conn):内部处理了异常commitAndClose(Connection conn):提交事务并释放连接....
ResultSetHandler:封装结果集 接口
ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, ColumnListHandler, KeyedHandler, MapHandler, MapListHandler, ScalarHandler (了解)ArrayHandler, 将查询结果的第一条记录封装成数组,返回 (了解)ArrayListHandler, 将查询结果的每一条记录封装成数组,将每一个数组放入list中返回 ★★BeanHandler, 将查询结果的第一条记录封装成指定的bean对象,返回 ★★BeanListHandler, 将查询结果的每一条记录封装成指定的bean对象,将每一个bean对象放入list中 返回. (了解)ColumnListHandler, 将查询结果的指定一列放入list中返回 (了解)MapHandler, 将查询结果的第一条记录封装成map,字段名作为key,值为value 返回 ★MapListHandler, 将查询结果的每一条记录封装map集合,将每一个map集合放入list中返回 ★ScalarHandler,针对于聚合函数 例如:count(*) 返回的是一个Long值