JDBC笔记

JDBC:是一种用于执行SQL语句的JAVA的API,可以为多种关系数据库提供统一访问
由一组由java语言编写的类和接口组成,是标准规范。

每个数据库厂商的驱动都必须遵循这个规范,表现为不同的数据库驱动。驱动是JDBC这个接口的实现。
1.注册驱动.(回想代码,关键字,Class)
2.获得连接.(Connection,获取连接,DriverManager)
3.获得语句执行平台(一般是preparestatement,高效、预编译)
4.执行sql语句(sql语句一定要写对,我去啊,)
5.处理结果(看执行的操作,是返回的影响行数还是结果集)
6.释放资源.(注意每个资源关的顺序,一般是最后开的最早关……)

增删改:用的是返回整型的executeUpdate()
查:用的是返回结果集的executeQuery()
如果想要查看获取的值的情况花功夫打印出来就行
诶,今天又犯了一个毛病,sql语句中含有中文的问号
问号跟下面的setXxx要一一匹配,不然特别容易哦出错。
sql语句中的占位符你也可以使用scanner动态获取键盘输入的值
巧妙利用字符数组,可以获取你想要的结果。

接下来就是优化的过程了,首先优化的是JDBCUtils工具类,因为每次增删改查都需要执行注册驱动等
那些操作,是在是太麻烦了,就写在一个工具类里面,每次调用工具类里面的静态方法获取连接,这样就
获得了第一次优化。其次优化的是properties,java中有一个类,里面有方法以流的方式读取配置文件
所以编写一个配置文件db.properties,里面存放的键值对,这个文件有着十分严格的语法要求,不能加啥子双引号、单引号,就是一个有等号的表达式,写着数据库里面的Driver、Url、User、Password这些信息,在你更换数据库工具(比如说换成SQLServer)、或者更换一个数据库(shop数据库)时就只需要改配置文件了,不需要去找代码改。

继续优化,阿帕奇这个伟大的公司又站出来了,调用commmons里面的成员DBUtils,它简化了JDBC开发。诶,总是做一些好事……DBUtils是JDBC数据库操作使用工具,小巧、简单实用。
比较重要的三个核心功能:
QueryRunner中提供对sql语句操作的API.
两个方法:
update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作
第三个放的是要存入的数据,进行了封装:

QueryRunner qr = new QueryRunner();
String sql = "INSERT INTO zhangwu(name,money,parent) VALUES(?,?,?)";
Object[] params = {"股票收入", 5500, "收入"};
Connection conn = JDBCUtils.getConnection();
int line = qr.update(conn,sql,params);// 用来完成表数据的增加、删除、更新操作
//结果集处理
System.out.println("line = " + line);

query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作
ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
ResultSetHander是结果集处理类,ArrayHandler    将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
ArrayListHandler    将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
BeanHandler    将结果集中第一条记录封装到一个指定的javaBean中。
BeanListHandler    将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
ColumnListHandler    将结果集中指定的列的字段值,封装到一个List集合中
ScalarHandler    它是用于单数据。例如select count(*) from 表操作。
MapHandler    将结果集第一行封装到Map集合中,Key 列名, Value 该列数据
MapListHandler    将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合
DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
这部分对于自己来说也是十分新奇的,好东西谁不用,学的越多以后用的越好玩的越6,,以后翻看笔记时也会感慨万千吧。这次写笔记值看了一种。。留着慢慢看

再来优化,实际开发中,获得连接和释放资源都是非常消耗系统资源的两个过程,为了解决这个问题,通常采用连接池技术,来共享连接Connection,程序都是一步步优化而来的,不断优化,不断节省资源。省钱才是王道啊。close()方法并不是销毁连接,而是归还连接,要用时在池子中巴拉按揭取出来,不用时放回去。嗯?好像以前学流的时候学的缓冲技术啊,暂时性存储。常见的连接池DBCP,C3P0。学高深了就是钻到缓存去了,优化程序去了,呵。
public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/daydb";
    public static final String USERNAME = "root";
    public static final String PASSWORD = "root";
    /*
     * 创建连接池BasicDataSource
     */
    public static BasicDataSource dataSource = new BasicDataSource();
    //静态代码块
    static {
        //对连接池对象 进行基本的配置
        dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
        dataSource.setUrl(URL); //指定要连接的数据库地址
        dataSource.setUsername(USERNAME); //指定要连接数据的用户名
        dataSource.setPassword(PASSWORD); //指定要连接数据的密码
    }
    /*
     * 返回连接池对象
     */
    public static DataSource getDataSource(){
        return dataSource;
    }

 

一、概述: JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。JDBC的实现由数据库厂商以驱动程序的形式提供。JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。 ODBC:基于C语言的数据库访问接口。 JDBC也就是Java版的ODBC。 JDBC的特性:高度的一致性、简单性(常用的接口只有4、5个)。 1.在JDBC中包括了两个包:java.sqljavax.sql。 ① java.sql 基本功能。这个包中的类和接口主要针对基本的数据库编程服务,如生成连接、执行语句以及准备语句和运行批处理查询等。同时也有一些高级的处理,比如批处理更新、事务隔离和可滚动结果集等。 ② javax.sql 扩展功能。它主要为数据库方面的高级操作提供了接口和类。如为连接管理、分布式事务和旧有的连接提供了更好的抽象,它引入了容器管理的连接池、分布式事务和行集等。 注:除了标出的Class,其它均为接口。 API 说明 java.sql.Connection 与特定数据库的连接(会话)。能够通过getMetaData方法获得数据库提供的信息、所支持的SQL语法、存储过程和此连接的功能等信息。代表了数据库。 java.sql.Driver 每个驱动程序类必需实现的接口,同时,每个数据库驱动程序都应该提供一个实现Driver接口的类。 java.sql.DriverManager (Class) 管理一组JDBC驱动程序的基本服务。作为初始化的一部分,此接口会尝试加载在”jdbc.drivers”系统属性中引用的驱动程序。只是一个辅助类,是工具。 java.sql.Statement 用于执行静态SQL语句并返回其生成结果的对象。 java.sql.PreparedStatement 继承Statement接口,表示预编译的SQL语句的对象,SQL语句被预编译并且存储在PreparedStatement对象中。然后可以使用此对象高效地多次执行该语句java.sql.CallableStatement 用来访问数据库中的存储过程。它提供了一些方法来指定语句所使用的输入/输出参数java.sql.ResultSet 指的是查询返回的数据库结果集。 java.sql.ResultSetMetaData 可用于获取关于ResultSet对象中列的类型和属性信息的对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值