- 浏览: 509265 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (150)
- JavaScript (4)
- Jdbc (2)
- Jquery (5)
- Jndi (1)
- HttpClient (3)
- Jsoup (1)
- Linux (9)
- Lucene (5)
- Ubuntu (7)
- Mysql (16)
- Oracle (2)
- Mongodb (12)
- Tomcat (3)
- Hibernate (1)
- Spring (11)
- Struts2 (2)
- 开发工具 (4)
- Servlet (3)
- MVC (1)
- Json (4)
- 敏捷开发 (1)
- maven (6)
- 框架整合 (2)
- Java Core (8)
- Others (6)
- 网络服务 (2)
- Tags (1)
- Tools (12)
- 代码管理 (8)
- Redis (9)
- Log4j (1)
最新评论
-
ipodao:
果然有高人翻译啊,谢了~
dom4j api 详解 -
zhuwensheng:
字符串都不用单引号引着吗?
Oracle+110个常用函数 -
宋建勇:
...
HttpClient 处理中文乱码
一.JDBC原理概述
1,JDBC是一套协议,是JAVA开发人员和数据库厂商达成的协议,也就是由Sun定义一组接口,由数据库厂商来实现,并规定了JAVA开发人员访问数据库所使用的方法的调用规范。
2,JDBC的实现是由数据库厂商提供,以驱动程序形式提供。
3,JDBC在使用前要先加载驱动。
JDBC对于使用者要有一致性,对不同的数据库其使用方法都是相同的。
驱动开发必须要实现Driver接口。
数据库驱动的实现方式
JDBC-ODBC桥接式
JDBC网络驱动,这种方式是通过中间服务器的协议转换来实现的
JDBC+本地驱动,这种方式的安全性比较差。
JDBC驱动,由数据库厂商实现。
二.JDBC的API
java.sql包和javax.sql包
Driver接口(驱动),在加载某一 Driver 类时,它应该创建自己的实例并向 DriverManager 注册该实例。这意味着用户可以通过调用以下程序加载和注册一个驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver")
DriverManager类(驱动管理器),它可以创建连接,它本身就是一个创建Connection的工厂(Factory)。
Connection接口,会根据不同的驱动产生不同的连接
Statement接口,发送sql语句
ResultSet接口(结果集),是用来接收select语句返回的查询结果的。其实质类似于集合。
三.JDBC应用步骤
1,注册加载一个driver驱动
2,创建数据库连接(Connection)
3,创建一个Statement(发送sql)
4,执行sql语句
5,处理sql结果(select语句)
6,关闭Statement
7,关闭连接Connection。
注意:6,7两个步骤是必须要做的,因为这些资源是不会自动释放的,必须要自己关闭
访问Oracle的数据库的驱动名字叫ojdbc14.jar,要使用这个驱动程序,要先将他加到环境变量CLASSPATH中。
注册加载驱动driver,也就是强制类加载
Class.forName(Driver包名.Driver类名)。
Driver d=new Driver类();//注意:这个方法不能用参数来构造
DriverManager.registerDriver(d);
Oracle的Driver的全名oracle.jdbc.driver.OracleDriver
mysql的Driver的全名com.mysql.jdbc.Driver
SQLServer的Driver的全名com.microsoft.jdbc.sqlserver.SQLServerDriver
创建连接
DriverManager.getConnection(String url,String username,String password);
Connection连接是通过DriverManager的静态方法getConnection(.....)来得到的,这个方法的实质是把参数传到实际的Driver中的connect()方法中来获得数据库连接的。
Oracle的URL值是由连接数据库的协议和数据库的IP地址及端口号还有要连接的数据库的库名(DatebaseName)
Oracle URL的格式
jdbc:oracle:thin:(协议)@XXX.XXX.X.XXX:XXXX(IP地址及端口号):XXXXXXX(所使用的库名)
例:jdbc:oracle:thin:@192.168.0.20:1521:tarenadb
MySql URL的写法
例: jdbc:mysql://localhost:3306/tarena
SQLServer URL的写法
例:jdbc:microsoft:sqlserver://localhost:1433/test
java -Djdbc.drivers=驱动的完整类名
使用虚拟机参数,加载驱动 -D表示为虚拟机参数赋值
java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver:com.mysql.jdbc.Driver
四.JDBC基本方法
DriverManager:如果有多个驱动可用的话,DriverManager会根据URL选择其中一个可用的驱动.
Driver:可以选择固定的驱动
Driver driver = new oracle.jdbc.driver.OracleDriver();
String user = "sd0613";
String password = "sd0613";
Properties prop = new Properties();
prop.setProperty("user",user);
prop.setProperty("password",password);
driver.connect(url,properties);
executeQuery(sqlString);//返回结果集
executeUpdate(sqlString);//返回值为该次操作影响的记录条数,create table返回0
execute(sqlString);
//适用于不知道具体的操作是什么,返回值是boolean类型的
//如果返回值是true,代表执行查询操作;否则代表执行更新操作.
ResultSet
next()方法:
1.判断是否存在下一条记录
2.将游标移向下一条记录
getXXX(字段名或字段序号)//注意:字段序号从1开始
关闭问题:
使用Connection对象获得一个Statement,Statement中的executeQuery(String sql) 方法可以使用select语句查询,并且返回一个结果集 ResultSet通过遍历这个结果集,可以获得select语句的查询结果,ResultSet的next()方法会操作一个游标从第一条记录的前边开 始读取,直到最后一条记录。executeUpdate(String sql) 方法用于执行DDL和DML语句,可以update,delete操作。
注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为Statement和ResultSet是需要连接时才可以使用的,所以在使用结束之后有可能其他的Statement还需要连接,所以不能先关闭
一、Statement
execute(sql); 当不知道执行的SQL语句是什么类型的时候执行 ,返回值是boolean
executeQuery(sql); 执行查询语句
executeUpdate(sql); 执行更新语句
二、PreparedStatement
可以使用参数替代sql语句中的某些参数使用 "?"代替,他先将带参数的sql语句发送到数据库,进行编译,然后PreparedStatement会将参数发送给数据库。
在使用PreparedStatement时,在设置相应参数时,要指明参数的位置和类型,以及给出参数值
根据不同的参数类型使用不同的setXXX(参数的位置,参数值)来设置参数
例:
public void insert(Student s){
Connection con=ConnectionFactory.getConnection();//建立连接
String sql="insert into student(id,name) values(?,?)";
PreparedStatement ps=null;
try {
ps=con.prepareStatement(sql);//创建一个PreparedStatement
int index=1;
ps.setInt(index++,s.getStuId()); //为参数赋值
ps.setString(index++,s.getName());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
if(ps!=null)
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(con!=null)
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
CallableStatement是可以用非sql语句来访问数据库,他是通过调用存储过程(PL/SQL)来访问数据库的。可以直接使用连接来调用 prepareCall(...)方法,来执行这个存储过程,"..."是存储过程的名字。
对于系统时间要去数据库时间
TimeStamp 和 Date都可以保存时间
TimeStamp可以保存时、分、秒的数据,Date只保存日期年月的信息。
SQLException是检查异常必须处理要么throws ,要么try{}catch(){}
getErrorCode()可以获得错误码,可以对错误进行查询。
三、源数据
JDBC中有两种源数据,一种是数据库元数据,另一种是ResultSet元数据。
源数据就是描述存储用户数据的容器的数据结构。
ResultSet rs=ps.executeQuery(sql);
ResultSetMetaData m=rs.getMetaData();
getColumnCount(),获得实际列数
getColumnName(int colnum),获得指定列的列名
getColumnType(int colnum),获得指定列的数据类型
getColumnTypeName(int colnum),获得指定列的数据类型名
//打印结果集
public static void printRS(ResultSet rs)throws SQLException{
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next()){
for(int i = 1 ; i < = rsmd.getColumnCount() ; i++){
String colName = rsmd.getColumnName(i);
String colValue = rs.getString(i);
if(i>1){
System.out.print(",");
}
System.out.print(name+"="+value);
}
System.out.println();
}
}
四、数据库源数据
DatabaseMetaData
getURL(),获得连接数据库的URL
getDatabaseProductName() 获得数据库产品的名称
getDriverVersion() 获得JDBC驱动程序的String形式的版本号
getTables()获得数据库中该用户的所有表
getUserName() 获得数据库用户名。
五、异常的处理
try{}
catch(SQLException){}
try{}
catch(Exception){}
一.事务(Transaction)
原子操作:不可再分的操作,一个操作不能再分成比它更细小的操作.
事务是针对原子操作的,要求原子操作不可再分,并且必须同时成功同时失败。
事务就是把一些非原子操作,变成原子操作,由应用服务器来提出要求,由数据库服务器来执行操作.
在JDBC中默认是自动提交的,如果要想使用事务,需要按以下步骤执行:
1.要调用con.setAutoCommite(false)方法,把自动提交(commit)置为false。
2.进行正常的数据库操作
3.如果操作成功了可以选择con.commit(),或者操作失败时选择con.roolback();
注意:打开事务就要关闭自动提交,当不需要再使用事务的时候调用setAutoCommite(true).
二.事务并发产生的问题
三种并发产生的后果:
1,脏读:一个事务读取到了另外一个事务没有提交的数据。
2,重复读:一个事务读取到了另外一个事务提交的数据。它是要保持在同一时间点上读取到的数据相同,希望在一段时间内的数据是不变的。
3,幻读:一个事务读取到了另外一个事务提交的数据。用同样的操作读取两次,得到的记录数不相同。
三.事务隔离级别
五种控制级别:
TRANSACTION_NONE不使用事务。
TRANSACTION_READ_UNCOMMITTED 允许脏读。
TRANSACTION_READ_COMMITTED防止脏读,最常用的隔离级别,并且是大多数数据库的默认隔离级别
TRANSACTION_REPEATABLE_READ可以防止脏读和不可重复读,
TRANSACTION_SERIALIZABLE可以防止脏读,不可重复读取和幻读,(事务串行化)会降低数据库的效率
以上的五个事务隔离级别都是在Connection类中定义的静态常量,使用setTransactionIsolation(int level) 方法可以设置事务隔离级别。
如:con.setTransactionIsolation(Connection.REPEATABLE_READ);
四.JDBC2.0新特性
1.可滚动特性和可更新特性
JDBC1.0中是指游标的移动的方向和方式是单向,单步(相对)移动,功能比较简单.
JDBC2.0中游标可以双向,相对或者绝对移动.
可滚动结果集:这种结果集不但可以双向滚动,相对定位,绝对定位,并且还可以修改数据信息。
1)滚动特性
定位函数:
boolean absolute(int row),定位到指定的记录位置。定位成功返回true,不成功返回false。
void afterLast() ,把游标移动到最后一条记录的后面(逻辑位置)。
void beforeFirst() ,把游标移动到第一条记录的前面(逻辑位置)。
//由于第一条记录的前面和最后一条记录的后面这两个位置肯定存在,所以无需判断是否存在,返回值设为void.
boolean first(),把游标定位到第一条记录。
boolean last(),把游标定位到最后一条记录。
//当结果集为空的时候,这两个方法会返回false.
boolean next(),此方法是使游标向下一条记录移动。
boolean previous() ,此方法可以使游标向上一条记录移动,前提是前面还有记录。
boolean relative(int rows) ,相对定位方法,参数值可正可负,参数为正,游标从当前位置向后移动指定值条记录,参数为负,游标从当前位置向前移动指定值条记录。
判断函数:
ifBeforeFirst()判断是否在在第一条记录之前.
ifAfterLast()判断是否在在最后一条记录之后.
ifFirst()判断是否为第一条记录.
ifLast()判断是否为最后一条记录.
要使用可滚动结果集时,需要一次设置更新特性与滚动特性,不能分开.
1.更新特性常量:
CONCUR_READ_ONLY 只读结果集(默认)
CONCUR_UPDATABLE 可更新结果集
2.滚动特性常量:
TYPE_FORWARD_ONLY ,该常量表示指针只能向前移动的 ResultSet 对象的类型。(默认)
TYPE_SCROLL_INSENSITIVE ,该常量指示可滚动但通常不受其他更改影响的 ResultSet 对象的类型。
TYPE_SCROLL_SENSITIVE ,该常量指示可滚动并且通常受其他更改影响的 ResultSet 对象的类型。
//敏感:数据库改变,结果集改变.
语法:
Statement st=null;
st=con.createStatement(ReusltSet.TYPE_SCROLL_INSENSITIVE,ResuleSet.CONCUR_UPDATABLE)
在创建Statement的时候就要指定这两个参数,使用Statement,第一个参数代表滚动特性常量,第二个代表更新特性常量
2)可更新特性
a.moveToInsertRow();记录当前游标位置,将游标移到和结果集结构类似的缓冲区;
b.使用updateXxx(int column,columnType value)方法来更新指定列数据;
c.使用insertRow() 方法插入记录;
d.将游标指回原位,moveToCurrentRow() 。
能否使用JDBC2.0 ResultSet的新特性,要看使用的数据库驱动是否支持.
还有只能用于单表且表中有主键字段(可能会是联合主键),不能够有表连接,会取
可更新操作必须满足以下条件:
a.查询只能引用一张表.
b.不能包含任何连接操作.
c.必须把完整的主键查到结果集里面;
d.保证所有字段为非空字段并且没有默认值。
五.数据库元数据:
DatabaseMetaData dbmd = con.getMetaData();//得到数据库元数据
dbmd.supportsResultSetConcurrency(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_UPDATABLE);//判断是否支持可更新操作
六.批量更新
优势:
1.节省传递时间
2.并发处理
PreparedStatement:
1.addBatch() 将一组参数添加到 PreparedStatement对象内部
2.executeBatch() 将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
Statement:
addBatch(String sql)方法会在批处理缓存中加入一条sql语句
executeBatch()执行批处理缓存中的所有sql语句。
注意:PreparedStatement中使用批量更新时,要先设置好参数后再使用addBatch()方法加入缓存。
批量更新中只能使用更新或插入语句
七.SQL3中的数据类型
Array:数组
Sturct:结构
大对象:
Blob:大的二进制数据文件对象。
Clob:大的文本文件对象。
优点:
1.理论上大小没有上限,受制于数据库表空间的大小.
2.流式读取.
使用大对象的步骤:
1.先插入一个空的占位对象empty_blob()(oracle的函数):insert into t_blob values(?,?,empty_blob());
2.获得大对象:select blob_data from t_blob where name = ? for update;
3.获取流进行写入:blob.setBinaryStream(0);
4.通过流来获取blob中存储的数据:blob.getBinaryStream()
一、ID的High/Low算法
高位数字分别与低位数字相匹配,得到的数字是唯一的
减少与数据库的交互
二、ORM
1、类映射成表
类名与表名对应
2、属性定义映射成列,类型之间必须是兼容的
3、类关系映射成表关系
一对一双向关系
内存中都保存对方的一个引用
数据库中,表b的id是主键,也是外键,引用a表的id主键 -- share pk
表b中有一个字段aid是外键,引用a表的主键,并且有唯一约束 -- pk+fk
共享主键:
create table car_pk (
id number(10,0) not null,
name varchar2(15),
serial varchar2(30),
manufacturer varchar2(50),
producedate date,
primary key (id)
);
create table engine_pk (
id number(10,0) not null,
model varchar2(20),
manufacturer varchar2(50),
producedate date,
primary key (id)
);
alter table engine_pk
add constraint fk_engine_car_pk
foreign key (id)
references car_pk(id);
外键+唯一约束
create table car_fk (
id number(10,0) not null,
name varchar2(15) not null,
serial varchar2(30) not null,
manufacturer varchar2(50) not null,
producedate date,
primary key (id)
);
create table engine_fk (
id number(10,0) not null,
model varchar2(20) not null,
manufacturer varchar2(50) not null,
producedate date,
carid number(10,0) unique,
primary key (id)
);
alter table engine_fk
add constraint fk_engine_car_fk
foreign key (carid)
references car_fk(id);
实体对象:在内存中有id属性的
值对象:没有id的,依赖其他对象存在
一对多关系
一的一方保存多一方的一个集合,最好使用set,保证无重复元素
多的一方保存一一方的一个对象的引用
public class Order implements Serializable{
private int id;
private String owner;
private String phone;
private String address;
private Set<Item> items = new HashSet<Item>();
}
public class Item implements Serializable{
private int id;
private String product;
private int amount;
private Order order;
}
create table ec_item (
id number(10,0) not null,
product varchar2(15) not null,
amount number(10,0) not null,
orderid number(10,0) not null,
primary key (id)
);
create table ec_order (
id number(10,0) not null,
owner varchar2(15) not null,
phone varchar2(15) not null,
address varchar2(50),
primary key (id)
);
alter table ec_item
add constraint fk_item_order
foreign key (orderid)
references ec_order(id);
多对多
双方都保存对方的多个引用
例子:学生选课
public class TarenaCourse implements Serializable{
private int id;
private String name;
private int period;
private Set<TarenaStudent> students = new HashSet<TarenaStudent>();
}
public class TarenaStudent implements Serializable{
private int id;
private String name;
private Date birthday;
private Set<TarenaCourse> courses = new HashSet<TarenaCourse>();
}
create table student (
id number(10,0) not null,
name varchar2(15) not null,
birthday date,
primary key (id)
);
create table student_course (
sid number(10,0) not null,
cid number(10,0) not null,
primary key (sid, cid)
);
create table course (
id number(10,0) not null,
name varchar2(15) not null,
perion number(10,0),
primary key (id)
);
alter table student_course
add constraint fk_student
foreign key (sid)
references student(id);
alter table student_course
add constraint fk_course
foreign key (cid)
references course(id);
通过学生姓名找课程
select c.name from cource c,student s,student_course sc
where c.id=sc.cid and s.id=sc.sid
and s.name = 's1'
三、继承关系
public abstract class Computer implements Serializable{
private int id;
private int price;
private String manufacturer;
}
public class Desktop extends Computer{
private boolean isLCD;
}
public class Notepad extends Computer{
private float weight;
private float thickness;
}
1、建3张表 table per class
子类中保存父类的主键作为外键
create table computer_tpc (
id number(10,0) not null,
price number(10,0) not null,
manufacturer varchar2(30) not null,
primary key (id)
);
create table desktop_tpc (
computerid number(10,0) not null,
islcd char(1),
primary key (computerid)
);
create table notepad_tpc (
computerid number(10,0) not null,
weight float,
thickness float,
primary key (computerid)
);
alter table desktop_tpc
add constraint fk_desk_computer_tpc
foreign key (computerid)
references computer_tpc(id);
alter table notepad_tpc
add constraint fk_note_computer_tpc
foreign key (computerid)
references computer_tpc(id);
查找所有电脑的配制(只要是电脑就能被查出来)
select c.id,c.price,d.islcd,n.weight,n.thickness
from computer c, desktop d,notepad n
where c.id = d.computerid(+)
and c.id = n.computer(+)
2、建2张表
create table desktop (
id number(10,0) not null,
price number(10,0) not null,
manufacturer varchar2(30) not null,
islcd char(1),
primary key (id)
);
create table notepad (
id number(10,0) not null,
price number(10,0) not null,
manufacturer varchar2(30) not null,
weight float,
thickness float,
primary key (id)
);
3、建1张表
create table computer_tph (
id number(10,0) not null,
category char(1) not null,
price number(10,0) not null,
manufacturer varchar2(30) not null,
islcd char(1),
weight float,
thickness float,
primary key (id)
);
四、JDBC2.0扩展
1、JDBC DataSource
DataSourse(数据源),包含了连接数据库所需的信息,可以通过数据源或的数据库连接,有时由于某些连接数据库的信息会变更,
所以经常使用包含数据库连接信息的数据源。
JDBC取连接有2种方式:Driver Manager 和 数据源
2、JNDI和DataSourse
主要功能:定位服务
JNDI,(命名路径服务)也用于存储数据,但是他所存储的是一写零散的信息。
JNDI的方法是在javax.naming包下
InitialContext 连接,初始化上下文,这个类的提供者一般也是服务器的提供者
查找和绑定
查找由我们做,绑定我们并不关心,只配制数据源就好了
代替DriverManager定位数据源
遍布式企业的数据源的属性可以存储在同一个目录(JNDI)中
以这种方式集中管理用户名、密码、数据库名和JDBC URL
创建连接:
Context jndiContext = new InitialContext();
DataSource source = (DataSource)jndiContext.lookup(" ");
COnnection con = source.getConnection();
3、连接池
要提供连接池数据源,带缓存的连接
带缓存的连接,即可池化的连接,其close()方法,在物理上并没有被关闭,而是保留在一个队列中并被反复使用。
4、分布式事务
事务分为JDBC事务和JTA
JDBC事务,由容器管理
JTA,分布式事务,由容器管理
<!--EndFragment-->
相关推荐
### JDBC原理详解 #### 一、JDBC的工作原理 JDBC (Java Database Connectivity) 是 Java 平台中用于连接和操作关系型数据库的标准 API。它为开发者提供了与各种数据库进行交互的能力,允许 Java 应用程序能够以...
### JDBC原理详解 在深入探讨JDBC的工作原理之前,我们先来了解一下JDBC的基本概念及其在Java开发中的重要性。 #### 一、JDBC简介 JDBC(Java Database Connectivity)是一种用于执行SQL语句的标准Java API,它...
在Java编程中,JDBC(Java Database Connectivity)是Java语言访问数据库的标准,它提供了一组API,使得Java应用程序能够与各种不同的数据库系统进行交互。JDBC不仅定义了接口,还规定了实现这些接口的数据库驱动...
通过理解和掌握这些JDBC原理和使用方法,Java开发者能够有效地进行数据库操作,实现数据的存取、更新和查询等功能。同时,了解不同数据库的特定URL格式和驱动加载方式,有助于在实际项目中灵活应对各种数据库环境。
本文将深入探讨JDBC的基本原理、API以及使用步骤。 首先,JDBC的核心是一套由Java接口组成的API,这些接口定义了与数据库进行通信的方法。数据库厂商需要按照JDBC规范实现这些接口,然后以驱动程序的形式提供给...
综上所述,JDBC是Java与数据库交互的基础,理解并熟练掌握JDBC原理和实践,对于任何Java开发者来说都是至关重要的,无论是进行简单的数据操作,还是构建复杂的数据库应用。通过深入学习和实践,可以更好地应对各种...
JDBC原理和驱动程序的分类涉及以下几种驱动: 1. JDBC-ODBC桥驱动:这是最初级的驱动形式,通过ODBC层将JDBC调用映射到ODBC调用。这种方式简单,但效率较低,且不适用于分布式应用。 2. 本地API部分Java驱动(JDBC...
#### 一、JDBC原理概述 **JDBC**(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了与数据库建立连接、发送...
JDBC原理概述 1,JDBC是一套协议,是JAVA开发人员和数据库厂商达成的协议,也就是由Sun定义一组接口,由数据库厂商来实现,并规定了JAVA开发人员访问数据库所使用的方法的掉用规范。 2,JDBC的实现是由数据库厂商...
### JDBC开发过程与原理 #### 一、JDBC概述及原理 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一的访问接口。它使得Java应用程序能够方便地访问各种数据库,...
**JDBC原理** - **规范与实现**:JDBC本身只是一个接口规范,具体实现则由各个数据库厂商提供,称为驱动程序。这意味着对于不同的数据库,只需要相应的驱动即可实现连接和数据操作。 - **驱动类型**:JDBC支持四种...
#### 一、JDBC原理与特点 JDBC(Java Database Connectivity)是一种用于执行SQL语句的标准Java API,它允许Java程序连接多种关系数据库,为开发者提供了访问数据库的一致性方法。JDBC定义了一系列接口,由具体的...
在Java Web开发中,"Servlet + JDBC + JSP" 是一种经典的组合,常用于构建基于服务器端的应用程序。本文将详细解析这些技术及其在"mvc模式"架构中的应用。 **Servlet** 是Java的一种标准,用于扩展服务器的功能。...
1. JDBC原理 - JDBC是一套协议,定义了Java与数据库之间的通信规范。 - 数据库厂商需实现JDBC接口,提供驱动程序。 - 使用JDBC前需加载对应数据库的驱动。 - JDBC驱动类型包括:JDBC-ODBC桥接、JDBC网络驱动、...
在Java编程领域,JDBC(Java Database Connectivity)是连接Java应用程序和关系数据库的标准接口。它允许程序员使用SQL语句执行数据库操作,如查询、插入、更新和删除数据。...不过,了解底层的JDBC原理仍然是必要的。
关于jdbc连接池连接数据库的原理
1. **深入理解 Sharding-JDBC 原理**:了解 Sharding-JDBC 的工作原理有助于更好地配置和优化分片策略。 2. **编写单元测试**:通过编写单元测试来验证分片逻辑的正确性。 3. **持续监控**:在生产环境中持续监控...
JDBC原理** JDBC的核心在于它的接口定义和驱动程序。SUN公司定义了JDBC接口,这些接口包括了与数据库交互的所有方法。然而,实际与数据库通信的是数据库厂商提供的驱动程序。JDBC是接口,而驱动程序是这些接口的...
Java DAO(Data Access Object)和JDBC(Java Database Connectivity)是Java编程中处理数据库操作的重要技术。本练习代码主要关注如何...但了解底层的JDBC原理仍然是非常重要的,因为这有助于更好地理解和解决问题。