JDBC 配置

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);
//导致类加载    Driver驱动的静态代码块会执行,注册驱动

方式三:

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";
                                端口号
//url mysql     jdbc:mysql://ip:port/库名
    //Oracle    jdbc:oracle:thin:@ip:port:sid
//?传参 &
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()) 查询多条
//下一行是否有记录  把记录内容存到rs里   自动往后移动
{
    int id=rs.getInt(1"id");//可以写表头,传的是表头
    String no =rs.getString(2);
}    

//1、.next()方法的作用:指针指向下一条记录,有记录(有值)返回true并把记录内容存入到对应的对象中,也就是obj.next()的obj中。如果没有返回false。

//2、.next()方法的应用:一般和ResultSet对象和while循环一起使用,去迭代结果集,并在循环中调用getXXX(intfieldIndex)/getXXX(String columnName)方法获取字段值。

//过程:ResultSet对象具有指向其当前数据行的指针。开始,指针被置于第一行。.next()方法将指针移动到下一行,然后while循环迭代遍历ResultSet对象。

//while (obj.next()) {

//}

预编译的操作对象
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();
			}
		}
    }	
	
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值