JDBC
Java DataBase Connectivity
规范
JDBC是一套协议(规范)
是java开发人员和数据库厂商达成的协议
是由sun定义一组接口
由数据库厂商来实现
并规定了java开发人员访问数据库所使用的方法
JDBC的实现是由数据库厂商提供,以驱动程序形式提供
作用
连接数据库
操作数据库
处理结果集
使用事务
特点
JDBC是java唯一的统一的访问数据库的方法
JDBC是统一的访问接口,可以访问任何提供了驱动的数据库
驱动:JDBC的实现代码
对具体访问数据库的代码进行封装
对外提供一组统一的接口
JDBC的发展
1.JDBC+ODBC 桥驱动
2.JDBC+本地驱动
3.纯java网络服务器驱动
4.纯java驱动
工厂链模式
java.sql包和javax.sql包
DriverManager 类 驱动管理器,管理驱动的类,创建连接,他是连接对象的工厂
Driver 接口 驱动
Connection 接口 数据库的连接
作用
跟数据库做连接
根据驱动产生不同的连接
事务处理
数据库操作对象的工厂
Statement 接口以及子接口 数据库操作对象
作用
发送sql语句
ResultSet 接口 结果集
作用
数据库返回的结果封装成结果集对象
处理结果集
编码
1.注册驱动
2.建立连接
3.获得操作对象
4.发送sql
5.处理结果集
6.释放资源
注册驱动
方式一:
Driver driver=new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
方式二:
Class.forName(driverClassName);
方式三:
java -Djdbc.drivers=驱动名
url
mysql
jdbc:mysql://ip:port/库名
Oracle
jdbc:oracle:thin:@ip:port:sid
SQLServer
jdbc:microsoft:sqlserver://ip:port
驱动
mysql
com.mysql.jdbc.Driver
Oracle
oracle.jdbc.driver.OracleDriver
预编译的操作对象
PreparedStatement
jdbc首先会将sql语句交给数据库编译
执行时只是传递参数,不会改变sql语句的流程
不要使用Statement
1.注册驱动 (mysql 驱动类)
方式一:
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
方式二:
private static String driverCalssName="com.mysql.jdbc.Driver";
class.forName(driverCalssName);
方式三:
java -Djdbc.drivers=驱动名
2.建立链接
Connection con =Drivermanager.getConnection(url,username,password);
服务器的位置
String url="jdbc:mysql://127.0.0.1:3306/jdbc?useUnicode=true;D" ;
String username="root";
String password="123";
端口号
3.创建数据库操作对象
Statement stat =con.createStatement();
String sql= new StringBuffer()
.append("create table t_student(")
.append("id int primary key auto_increment,")
.append("no varchar(10),")
.append("name varchar(10),")
.append("sex boolean")
.append(")")
.toString();
4.释放操作对象和连接
stat.execute(sql);
stat.executeUpdate();
stat.close();
con.close();
5.结果集 Query 查询
java中JDBC下表从1开始,其他从0开始
ResultSet rs=null;
String sql=new StringBuffer()
rs=stat.executeQuery(sql);
if(rs.next()) 查询一条
while(rs.next()) 查询多条
{
int id=rs.getInt(1,"id");
String no =rs.getString(2);
}
预编译的操作对象
Preparedstatement
准备好的操作对象,先将你的sql语句到数据库编译。不会换sql语句。
不要使用 statement
String sql=new StringBuffer()
.append("(no,name,sex)")
.append(" (?,?,?) ")
ps=con.prepareStatement(sql)
ps.setString(1,student.getNo())
ps.setString(2,student.getName())
ps.executeUpdate();
保存数据的类型序列化 Serializable
对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象。对象序列化机制允许把内存 中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,通过网络将 这种二进制流传输到另一个网络节点。其他程序一旦获得了这种二进制流(无论是从磁盘中获取的,还 是通过网络获取的),都可以将这种二进制流恢复成原来的Java对象。
序列化的含义和意义 序列化机制允许将实现序列化的Java对象转换成字节序列,这些字节序列可以保存在磁盘上,或通过网 络传输,以备以后重新恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。
对象的序列化(Serialize)指将一个Java对象写入IO流中,与此对应的是,对象的反序列化 (Deserialize)则指从IO流中恢复该Java对象如果需要让某个对象支持序列化机制,则必须让它的类是 可序列化的(serializable)。
为了让某个类是可序列化的,该类必须实现如下两个接口之一: Serializable(常用) ExternalizableJava 很多类已经实现了Serializable,该接口是一个标记接口,实现该接口无须实现任何方法,它只是表明该类的实例是可序列化的。
所有可能在网络上传输的对象的类都应该是可序列化的,否则程序将会出现异常。
public
封装JDBC
JdbcUtil
1.将链接性息写入配置文件,读配置文件
2.jdbc操作第一步,注册驱动,只注册一次
3.提供获得Connection的方法,并做了异常转换
4.提供释放资源的方法
util配置文件
连接不能写成属性会被大家共享
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class JdbcUtil {
private static Properties config;
static{
try {
config=new Properties();
config.load(JdbcUtil.class
.getClassLoader()
.getResourceAsStream("dataSource.properties"));
Class.forName(config.getProperty("driverClassName"));
} catch (Exception e) {
e.printStackTrace();
throw new ExceptionInInitializerError("JdbcUtil初始化失败");
}
}
public static Connection getConnection(){
Connection con=null;
try {
con=DriverManager.getConnection(config.getProperty("url"),
config.getProperty("username"),
config.getProperty("password"));
} catch (Exception e) {
throw new DataAccessException("数据访问失败",e);
}
return con;
}
public static void close(Connection con,PreparedStatement ps,ResultSet rs){
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)