数据持久化
持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。
持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。
Java 中的数据存储技术
1) JDBC直接访问数据库
2) 第三方O/R工具,如Hibernate, ibatis 等
注:JDBC是java访问数据库的基石,其他技术都是对jdbc的封装
什么是JDBC
1) 是一组接口(api),接口的实现由各个数据库厂商实现
2) 是sun提出的连接数据库的规范
3) 是java连接数据库的抽象层
ODBC(Open Database Connectivity,开放数据库连接)
是微软公司开放服务结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API
JDBC分类
1) JDBC-ODBC桥:桥接器型驱动程序
2) 部分本地api部分java的驱动程序,也是桥接器型驱动程序
3) JDBC网络纯java驱动程序
4) 本地协议的纯java驱动程序
JDBC API接口
JDBC连接数据库注册驱动的方法
//连接数据库的驱动和 //oracle的 String url="jdbc:oracle:thin:@localhost:1521:orcl" className="oracle.jdbc.driver.oracleDriver" //mysql的 String url="jdbc:mysql://localhost:3306/test" Properties info=new Properties(); info.setProperty("user","root"); info.setProperty("password","123456"); // 方法一: java.sql.Driver driver=new com.mysql.jdbc.Driver(); Connection conn=driver.connect(); //方法二:注册驱动 DriverMananger.registerDriver(new com.mysql.jdbc.Driver()); Connection conn=DriverManager.getConnection(url,info); //方法三:class.forName方式 Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection(url,"root","123456");
Statment操作数据库步骤
(安全性较低,容易通过sql注入暴库,或者登录)
如: username='a' or 1=1 or 1=''
1,注册驱动
Class.forName("com.mysql.jdbc.Driver");
2,获取连接
DriverManager 是驱动程序管理类
url: jdbc:mysql://localhost:3306/test
* jdbc:连接数据库使用的是jdbc协议
* mysql:子协议,该协议随着数据库的变化而变化
* localhost:3306/tet: 定位到数据库
* localhost: 数据库服务器所在的ip地址
* 3306:数据库服务器监听的端口号
* test: 连接的数据库的名称
String url="jdbc:mysql://localhost:3306/test"; Connection conn=DriverManager.getConnection(url,user,password);
3,创建statement对象
Statement stmt=conn.createStatement();
4, 执行sql语句
stmt.executeUpdate(sql);
* 该方法执行insert udpate delete 这些DML语句,返回影响的行
* 该方法执行 create drop alter 这些DDL语句,返回0
5, 释放资源
finally{//最好每个需要关闭的资源都try一下 if(stmt!=null){ stmt.close(); } if(conn!=null){ stmt.close(); } }
PreparedStatement操作数据库步骤
* PreparedStatement 能最大可能提高性能:预编译语句有可能被重复调用
* PreparedStatement能保证安全性
1,获取连接
Connection conn=DriverManager.getConnection(url,user,password);
2, 组织带占位符?号的sql语句
String sql="update person set name=?,email=? where id=? ";
3, 创建一个PreparedStatement对来来预编译sql
PreparedStatement pstmt=conn.prepareStatement(sql);
4,设置占位符?的值
pstmt.setString(1, "yxkong"); pstmt.setString(2, "fishingsky@qq.com"); pstmt.setInt(3, 4);
* setXxx(index,value)
*Xxx数据库表中的字段对应java的数据类型
*参数1:占位符?的索引,从1开始
*参数2: 对应的1的值
5,执行
pstmt.executeUpdate();
*执行DML语句,返回值大于0
*执行DDL 返回值=0
6,释放资源
CallabelStatement操作数据库步骤
1,注册连接
Connection conn=DriverManager.getConnection(url,user,password);
2,调用存储过程的sql
String sql = "{call add_stu(?,?,?,?)}";
3,创建一个CallableStatement 来对存储过程预编译
CallableStatement stmt = conn.prepareCall(sql);
4,给占位符?赋值
pstmt.setString(1, "yxkong"); pstmt.setString(2, "fishingsky@qq.com"); pstmt.setInt(3, 4);
5,执行
stmt.execute();
文章评论