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;
}