MySQL及JDBC知识
MySQL
-
显示当前所有数据库SHOW DATABASES;
-
创建数据库CREATE DATABASE chapter16;
-
切换数据库USE DATABASE charpter16;
-
drop database sss;
-
创建数据表
CREATE TABLE USER
( id INT(10) PRIMARY KEY,
username VARCHAR(20),
age INT(10)
);
-
显示数据库中所有表SHOW TABLES;
-
显示表结构DESC USER;
CREATE TABLE student
(
sno INT(10) PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL ,
ssex CHAR(4) DEFAULT"male"
);
desc student;
修改数据表:ALTER TABLE 旧表名 RENAME [TO] 新表名;
alter table user rename t_user;
删除数据表:drop table 表名;
数据的基本操作:
1.添加数据insert
INSERT INTO 表名(字段名1,字段名2,...) VALUSE(值1,值2,...);
CREATE TABLE goods (
id INT(4),
NAME VARCHAR(20) NOT NULL,
price FLOAT
);
INSERT INTO goods VALUES(1,"巧克力",20.5);
INSERT INTO goods (id,NAME,price) VALUES(5,'薯条',6.5);
2.更新数据
update 表名 set 字段名1=值1[,字段名2=值2,...][where 条件表达式];
UPDATE goods SET NAME='汉堡' WHERE id>=4 AND id<=5 ;
3.删除数据
delete from 表名 [where 条件表达式];
delete from goods where ID=1;
DELETE FROM goods WHERE id IN (1,4,5);
单表查询
SELECT [DISTINCT] * |(字段名 1,字段名 2,字段名 3,...)
FROM 表名
[WHERE 条件表达式1]
[GROUP BY 字段名 [HAVING 条件表达式2]]
[ORDER BY 字段名[ASC|DESC]]
[LIMIT [OFFSET,] 记录数]
从上述语法格式中可以看出,一个SELECT语句由多个子句组成,其各个子句的含义如下所示.
-
SELECT [DISTINCT] * |(字段名 1,字段名 2,字段名 3,...);字段1,字段2...表示从表中查询的指定字段,型号通配符表示表中的所有字段,两者为互斥关系,任选其中一个,"DISTINCT"是可选参数,用于删除查询结果中重复的数据,
-
FROM 表名,表示从指定的表中查询数据,
-
GROUP BY 字段名[HAVING 条件表达式2] ; GROUP BY是可选参数,用于将查询结果按照指定字段进行分组,HAVING也是可选参数,用于对分组后的结果进行过滤.
-
ORDER BY 字段名[ASC|DESC]:ORDER BY 是可选参数,用于将查询结果按照指定字段进行排序.排序方式由参数ASC或DESC控制,其中ASC表示按升序进行排序,DESC 降序.默认为升序,
-
[LIMIT [OFFSET,] 记录数]:LIMIT是可选参数,用于限制查询结果的数量.LIMIT后面可以跟两个参数,第一个参数OFFSET表示偏移量,如果偏移量为0,则从查询结果的第一条记录开始,如果偏移量为1,则从查询结果的第二条记录开始,以此类推.OFFSET为可选值,如果不指定其默认值为0第二个参数记录数表示返回查询记录的条数.
select 语句查询
1.查询所有字段 SELECT * FROM 表名
2.带关系运算符的查询 where 条件表达式 ,常用的关系运算符>,<,=,不等于(!=,<>),<=,>=.
3.带BETWEEN AND 关键字的查询 :用于判断某个字段的值是否在指定的范围之内,如果字段的值在指定范围内,则满足条件,该字段所在的记录将被查询出来,反之不会查询出来.WHERE 字段名 [NOT] BETWEEN 值 1 AND 值 2
在上述语法包含值1和值2 双向闭区间
4.带LIKE关键字的查询 :WHERE 字段名 [NOT] LIKE '匹配字符串';
匹配字符串可以是一个普通字符串,也可以含"%"和"_"通配符 其中 "%"代表任意长度的字符串,"_"代表长度为1 的字符串.
5.带AND关键字的多条件查询 可以连接两个或者多个AND 表示"且" WHERE 条件1 and 条件2
6.带OR关键字的多条件查询 :在使用SELECT语句查询数据时,也可以使用OR关键字连接多个查询条件.与AND关键字不同,在使用OR关键字时,只要记录满足任意一个条件就会被查询出来.表示 或
7.聚合函数:COUNT() /SUM()/AVG()/MIN()/MAX() count常用于统计记录个数
8.对查询结果进行排序 ORDER BY 字段名1 [ASC|DESC],字段名2[ASC|DESC]...
ASC升序 DESC降序 默认为ASC
9.LIMIT分页查询 LIMIT [OFFSET,] 记录数
OFFSET偏移量为可选项,不指定默认0 ,功能:从0(OFFSET)开始显示(记录数)条记录.
如:SELECT *FROM goods ORDER BY id LIMIT 4,4; 从第5条记录开始,一共4条记录 即第5~8条记录.
MySQL 的多表操作
上面所讲内容都针对一张表的操作,即单表操作.然而在实际的开发中,很多功能都会涉及两张以上的表的操作,即多表操作.
外键约束:
外键是指在一张表中定义的,能确定另一张表记录的字段.该字段中引用了另一张表中的一列或多列,被引用的列应该具有主键约束或唯一性约束.外键用于建立和加强两个表数据之间的链接.
CREATE TABLE t_grade(
id INT(5) NOT NULL PRIMARY KEY,
NAME VARCHAR(40)
);
CREATE TABLE t_student(
sid INT(5) NOT NULL PRIMARY KEY,
sname VARCHAR(40),
gid INT(5) NOT NULL
);
如果学生表中的gid字段的值是学生所在的班级id,并且它引入了班级表中的主键id,那么gid就可以作为表t_student 的外键.在这两个表中,被引用的t_grade 表是主表,引用外键的t_student 表是从表,它们是主从关系.添加外键约束的语法格式如下:
alter table 表名 add constraint FK_ID foreign key (外键字段名) REFERENCES 外表表名 (主键字段名);
ALTER TABLE t_student ADD CONSTRAINT FK_ID FOREIGN KEY (gid) REFERENCES t_grade(id);
上述SQL语句执行成功后,两张表就已经通过外键关联了起来.
从上图中可以明确地看出,gid为t_student表的外键,并且gid外键依赖于t_grade表中的id主键.
成功添加外键后,t_student表和t_grade表之间就已经形成多对一的关系,因为外键列只能插入参照列存在的值,所以如果要为两个表添加数据,就需要先为主表t_grade添加数据,再为从表t_student添加数据,具体如下.
INSERT INTO t_grade(id,name) VALUES(1,'一班');
INSERT INTO t_grade(id,name) VALUES(2,'二班');
INSERT INTO t_student(sid,sname,gid) VALUES(1,'张三',1);
INSERT INTO t_student(sid,sname,gid) VALUES(2,'李四',1);
INSERT INTO t_student(sid,sname,gid) VALUES(3,'王五',2);
INSERT INTO t_student(sid,sname,gid) VALUES(4,'赵六',2);
内连接
内连接(INNER JOIN)又称简单连接或自然连接,是一种常见的连接查询.内连接使用比较运算符对两个表中的数据进行比较,并列出连接条件匹配的数据行,组合成新的记录,也就是说在内连接查询中,只有满足条件的记录才能出现在查询结果中.
内连接的语法格式如下所示:
SELECT 查询子段 FROM 表1 [INNER] JOIN 表2 ON 表1.关系字段=表2.关系字段
CREATE TABLE dept(
did INT(5) NOT NULL PRIMARY KEY,
dname VARCHAR (40)
);
CREATE TABLE emp(
id INT(5) NOT NULL PRIMARY KEY,
NAME VARCHAR (40),
age INT (3),
did INT(5) NOT NULL
);
INSERT INTO dept (did,dname) VALUES(1,'运维部'),(2,'测试部'),(3,'研发部'),(5,'测试部');
INSERT INTO emp (id,NAME,age,did) VALUES(1,'张三',21,1),(2,'李四',25,1),(3,'王五',21,2),(4,'赵六',23,4);
SELECT emp.name,dept.dname FROM dept JOIN emp ON dept.did=emp.did;
从结果来看,只有dept.did=emp.did相等的员工才会被显示. 需要注意的是,在MySQL中,还可以使用WHERE条件语句实现相同的功能.
SELECT emp.name,dept.dname FROM dept,emp where dept.did=emp.did;
由结果可见,where子句和INNER JOIN的查询结果是一直的.
需要注意的是,这两个语句的查询结果虽然相同,但是INNER JOIN 是内连接语句,WHERE 是条件判断语句,在WHERE 语句后可以直接添加其他条件,而INNER JOIN 语句则不可以.
外连接
在上节所讲解的内连接查询中,返回的结果只包含符合查询条件和连接条件的数据,然而有时还需要包含没有关联的数据,即返回的查询结果中不仅包含符合条件的数据,还要包括左表(左连接或左外连接)、右表(右连接或右外连接)或两个表(全外连接)中的所有数据,此时就需要使用外连接查询.
外连接分为左连接和右连接,其语法格式如下所示:
SELECT 所查字段 FROM 表1 LEFT|RIGHT [OUTER] JOIN 表2 ON 表1.关系字段=表2.关系字段 where 条件
外连接的语法格式和内连接类似,只不过使用的是LEFT JOIN和RIGHT JOIN 关键字,其中关键字左边的表被称为左表,关键字右边的表被称为右表.
在使用左连接和右连接查询时,查询结果是不一致的,具体如下:
LEFT JOIN(左连接):返回包括左表中的所有记录和右表中符合连接条件的记录,
RIGHT JOIN(右连接):返回包括右表中的所有记录和左表中符合连接条件的记录.
dept表 emp表
1.LEFT JOIN
左连接的结果包括LEFT JOIN 子句中指定的左表的所有记录和右表中符合连接条件的记录,如果左表中的某条记录在右表中不存在,则在右表中显示为空.
在dept 和emp表之间使用左连接查询,SQL语句如下所示:
SELECT dept.did ,dept.dname,emp.name FROM dept LEFT JOIN emp on dept.did =emp.did;
人事部没有did=5的员工
2.RIGHT JOIN (右连接) 与左连接相反
SELECT dept.did ,dept.dname,emp.name FROM dept RIGHT JOIN emp on dept.did =emp.did;
name值为赵六的员工并没有被分配部门
子查询(嵌套查询)
子查询指的是一个查询语句嵌套在另一个查询语句内部的查询,它可以嵌套在SELECT,SELECT ...INTO语句或INSERT INTO等语句中.在执行查询语句时,首先会执行子查询中的语句,然后将返回的结果作为外层查询的过滤条件进行查询.在子查询中,通常可以使用IN,EXISTS,ANY,ALL操作符.下面针对子查询进行详细讲解.
1.带IN关键字的子查询
使用IN关键字进行子查询时,内层查询语句仅返回一个数据列,这个数据列中的值将供外层查询语句进行比较操作.
例如,要查询存在年龄为21岁员工的部门,其SQL语句如下所示:
SELECT * FROM dept WHERE did IN(SELECT did FROM emp WHERE age=21);
2.带ANY关键字的子查询
ANY关键字表示满足其中任意一个条件.
SELECT * FROM dept WHERE did>any(select did from emp);
3.带ALL关键字的子查询
ALL关键字与ANY关键字比较类似,ALL关键字需要满足所有条件
SELECT *FROM dept WHERE did>all(select did from emp);
4.带比较运算符的子查询
SELECT *FROM dept WHERE did=(select did from emp where name ='李四');
JDBC
在实际项目中,数据库的操作都是通过程序完成的,不同的开发语言也对不同的数据库提供了支持,java也不例外,它为了能够操作数据库,提供了一套访问数据库的标准JAVA类库,即JDBC.
JDBC(JAVA DATABASE CONNECTIVITY)是一套用于执行SQL语句的JAVA API (主要位于java.sql包中),应用程序通过这套API可以连接到关系型数据库,并使用SQL语句对数据库中的数据进行增,删,改,查等操作.
不同类型的数据库其内部处理数据的方式是不同的,如果直接使用数据库厂商提供的访问接口操作数据库,会导致应用程序的可移植性变差.例如,当前用户使用的是Oracle提供的接口操作数据库,如果需要更换数据库,则需要重新编写操作数据库的部分代码,这样导致了程序的可移植性非常差.如果使用JDBC的API操作数据库就不会出现这种情况.JDBC要求各个数据库厂商按照统一标准提供数据库驱动,应用程序直接通过JDBC和数据库驱动连接数据库,开发人员就不需要了解底层数据库的交互,大大的提高程序的可移植性.
应用程序通过JDBC访问数据库的过程如下所示.
从上可见,JDBC是连接JAVA程序与数据库驱动之间的桥梁,当应用程序使用JDBC访问某个数据时,只需要通过数据库驱动连接指定的数据库即可,无须直接操作数据库.
JDBC常用API
Driver 接口
Driver是每个驱动程序类必须实现的接口,专门供数据厂商使用.需要注意的是,在编写JDBC程序时,必须要把所使用的数据库驱动程序和类库(指MySQL的驱动JAR包)加载到项目的classpath中.
DriverManager类
DriverManager类负责管理JDBC驱动程序,其作用于用户和驱动程序之间,负责跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。在DriverManager类中,定义了两个静态方法如下表
方法名称 |
功能描述 |
static Connection getConnection(String url,String user,String pwd) |
建立到给定数据库URL的连接,并返回表示连接的Connection对象 |
static void registerDriver(Driver driver) |
向DriverManager注册给定驱动程序 |
Connection接口
Connection接口用于创建数据库的连接,只有获得该连接对象后才能访问数据库,并操作数据表.在Connection接口中,定义了一系列的方法,其常用方法如下表
方法名称 |
功能描述 |
Statement createStatement() |
创建一个Statement对象从而将SQL语句发送到数据库 |
PreparedStatement prepareStatement(String sql) |
创建一个PreparedStatement对象从而将参数化的SQL语句发送到数据库. |
Statement接口
Statement接口用于将普通的SQL语句发送到数据库中.该接口的对象通过Connection.createStatement()方法获得.利用该对象把普通的SQL语句发送到数据库进行编译,然后返回数据库的处理结果.在Statement接口中,提供了三个常用的执行SQL语句的方法,如下表
方法名称 |
功能描述 |
boolean execute(String sql) |
用于执行给定的SQL语句,该语句可能返回多个结果 |
int executeUpdate(String sql) |
用于执行给定的SQL语句,该语句可能为INSERT,UPDATE或DELETE语句,或者是不返回任何内容的SQL语句 |
ResultSet executeQuery(String sql) |
用于执行给定的SQL语句,该语句的返回单个ResultSet对象 |
PreparedStatement接口
Statement接口封装了JDBC执行SQL语句的方法,Statement对象每次执行SQL语句时,都会进行一次编译,这样大大的降低了程序的执行效率.为此,JDBC API 提供了一个PreparedStatement接口,PreparedStatement是Statement的子接口,拥有Statement接口中的所有方法,并且可以对SQL语句进行预编译,预编译后的数据会存储在PreparedStatement对象中,当执行相同的SQL语句时,程序就会使用PreparedStatement对象中的数据,而不需要对SQL语句再次进行编译,这样就极大的提高了对数据库的访问效率.
PreparedStatement接口还扩展了带有参数SQL语句的执行操作,应用于该接口种的SQL语句可以使用占位符"?"代替其参数,然后通过setXxx()方法为SQL语句的参数赋值.在PreparedStatement接口中,提供了一些常用的方法,如下表
方法名称 |
功能描述 |
int executeUpdate() |
在此PreparedStatement对象中执行SQL语句,该语句必须是SQL数据操作语言语句,如Insert,update,delete语句;或者是无返回值内容的SQL语句,如DDL语句 |
ResultSet executeQuery() |
在此PreparedStatement对象中执行SQL查询,并返回该查询生成的 ResultSet对象 |
void setInt(int parameterIndex,int x) |
将指定参数设置为给定的int值 |
void setString(int parameterIndex,String x) |
将指定参数设置为给定的String值 |
void setFloat(int parameterIndex,Float x) |
将指定参数设置为给定的Float值 |
void setDate(int parameterIndex,Date x) |
将指定参数设置为给定的Date值 |
需要注意的是,表中的setDate()方法可以设置日期内容,但参数Date的类型是java.sql.Date而不是java.util.Date.
再通过setXxx()方法为SQL语句中的参数赋值时,可以通过参数于SQL类型相匹配的方法(例如,如果参数具有的SQL类型为String,那么应该使用setString方法),也可以通过setObject()方法设置多种类型的输入参数.具体如下所示.
String sql="SELECT *FROM goods WHERE id<? AND name=? AND price=?";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1,1); //使用参数的已定义SQL类型
ps.setString(2,"水彩笔");//使用参数的已定义SQL类型
ps.setObject(3,7.5);//使用setObject()方法设置参数
ps.executeUpdate();
ResultSet接口
用于保存JDBC执行查询时返回的结果集,该结果集与数据库表字段相对应,在ResultSet接口内部有一个指向表格数据行的游标(或指针),ResultSet接口对象的游标最初位于结果集的第一行前面,当执行一次next()方法之后才会将指针指向第一个记录.每调用一次next()方法,数据库游标向下移动一行,直到记录集最后一行.在应用程序中经常使用next()方法作为while循环的条件以迭代ResultSet结果集.
ResultSet接口中常用方法如下
方法名称 |
功能描述 |
String getString(int columnIndex) |
以Java编程语言中String的形式获取此ResultSet对象的当前行中指定列的值 |
String getString(String columnName) |
以Java编程语言中的String形式获取此ResultSet对象的当前行中指定列的值 |
int getint(int columnIndex) |
以Java编程语言中的int的形式获取此ResultSet对象当前行中指定列的值 |
int getInt(String columnName) |
以Java编程语言中的int的形式获取此ResultSet对象当前行中指定列的值 |
Date getDate(int columnIndex) |
以Java编程语言中java.sql.Date对象的形式获取此ResultSet对象当前行中指定列的值 |
Date getDate(String columnName) |
以Java编程语言中java.sql.Date对象的形式获取此ResultSet对象当前行中指定列的值 |
boolean next() |
将光标从当前位置向前移一行 |
实现第一个JDBC程序
通常,JDBC的使用可以按照以下几个步骤进行.
1.加载并注册数据库驱动
注册数据库驱动的具体方式如下所示:
DriverManager.registerDriver(Driver driver);
或
Class.forName("DriverName");
2.通过DriverManager获取数据库连接
获取数据库连接的具体方式如下所示:
Connection conn=DriverManager.getConnection(String url,String user,String pwd);
从上述代码我们可以看出,getConnection()方法中有三个参数,它们分别表示连接的数据库的URL地址,登录数据库的用户名和密码.以MySQL为例,其URL的书写格式如下所示:
jdbc:mysql://hostname:port/databasename
在上述代码中,jdbc:mysql:是固定的写法,mysql指MySQL数据库.hostname指主机的名称(如果数据库在本机中,则hostname可以写为localhost或127.0.0.1;如果要连接的数据库在其他计算机上,则hostname为要连接的计算机的IP),port指连接数据库的端口号(MySQL端口号默认为3306),而databasename指MySQL中相应数据库的名称
3.通过Connection对象获取Statement对象
注意:都是java.sql包
Connection创建Statement的方式有以下三种:
(1)createStatement(),创建基本的Statement对象.
(2)prepareStatement(),创建PreparedStatement对象.
(3)prepareCall(),创建CallableStatement对象.
Statement stmt=conn.createStatement();
4.使用Statement执行SQL语句
所有的Statement都有以下三种执行SQL语句的方法.
(1)execute():可以执行任意SQL语句.
(2)executeUpdate():主要用于执行DML和DDL语句.执行DML语句,如INSERT,UPDATE或DELETE时,返回值是受影响的行数,执行DDL语句返回0.
(3)executeQuery():通常执行查询语句,执行后返回代表结果集的ResultSet对象.
ResultSet rs=stmt.executeQuery(sql);
5.操作ResultSet 结果集
如果执行SQL语句是查询语句,则执行结果将返回一个ResultSet对象,该对象中保存了SQL语句查询的结果.程序可以通过操作该ResultSet对象取出执行结果.
while (rs.next())
{
id=rs.getInt(1);
name=rs.getString("name");
price=rs.getFloat("price");
}
6.关闭连接并释放资源
每次操作数据库结束后都要关闭数据库连接,释放资源,包括关闭ResultSet,Statement,Connection等资源.
package chapter16;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class GoodsDAO {
public void findAllGoods()
{
Statement statement=null;
Connection connection=null;
ResultSet rs=null;
try {
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//1.通过反射加载数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
//2.通过DriverManager获取Connection对象
String url="jdbc:mysql://localhost:3306/chapter";
String user="root";
String password="root";
connection=DriverManager.getConnection(url, user, password);
//3.通过connection对象获得statement对象
statement=connection.createStatement();
//4.使用statement对象执行SQL语句
String sql="SELECT * FROM goods";
rs=statement.executeQuery(sql);
//5.操作ResultSet数据集
System.out.println("id \t name \t price \t");
while (rs.next())
{
int id =rs.getInt(1);
String name=rs.getString("name");
float price=rs.getFloat("price");
System.out.println(id+" \t"+name+" \t"+price+" \t");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if (rs!=null)
{
try {
rs.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
rs=null;
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
statement=null;
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
connection=null;
}
}
}
new GoodsDAO().findAllGoods();
id name price
1 铅笔 0.5
2 圆珠笔 1.5
3 水彩笔 7.5
4 钢笔 5.0
5 尺子 2.0
6 橡皮 1.5
7 书包 35.0
8 计算器 9.5
注意:
在实现第一个JDBC程序时,还有两个地方需要注意,具体如下:
1.注册驱动
虽然使用DriverManager.registerDriver(new com.mysql.jdbc.Driver()) 方法也可以完成注册,但是此方法会被数据库驱动注册两次.这是因为Driver类的源码中,已经在静态代码块中完成了数据库驱动的注册.所以,为了避免数据库驱动被重复注册,只需要在程序中使用Class.forName()方法加载驱动类即可.
2.释放资源
每次操作数据库结束后都要及时关闭数据库资源,释放连接占用的数据库和JDBC资源,以免影响系统的运行速度.为了保证资源的释放,在Java程序中,应该将最终必须要执行的操作放在finally代码块中.
数据库连接池
在JDBC编程中,每次创建和断开Connection对象都会消耗一定的时间和I/O资源.这是因为每一次的数据访问请求都必须经历建立数据库连接,打开数据库,存取数据和关闭数据库连接等步骤,而数据库处理通常是整个业务处理中最频繁的步骤,并且在各种数据库操作的步骤中,数据库的连接和释放通常特别耗时,这必然导致系统性能急剧下降甚至崩溃.
为了避免频繁地创建和释放数据库连接,数据库连接池技术应运而生.数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是重新建立.应用程序如何通过连接池连接数据库如下所示..
从上图可以看出,数据库连接池在初始化时将创建一定数量的数据库连接 放到连接池中,当应用程序访问数据库时并不是直接创建Connection,而是向数据库连接池中"申请"一个Connection.如果连接池中有空闲的Connection,则将其返回,否则创建新的Connection.使用完毕后,连接池会将该Connection回收,并交付给其他的线程使用,以减少创建和断开数据库连接的次数,提高数据库的访问效率.
DataSource接口
DataSource接口用于表示数据源.在数据源中存储了所有建立数据库连接的信息.就像通过指定文件名称可以在文件系统中找到文件一样,通过提供正确的数据源名称,也可以找到相应的数据库连接.在DataSource接口中,定义了两个返回值为Connection对象的方法,具体如下:
Connection getConnection();
Connection getConnection(String username.String password);
上述两个重载的方法,都能用于获取Connection对象.不同的是,第一个方法是通过无参的方式建立与数据库的连接,而第二个方法是通过传入登录信息的方式建立与数据库的连接..
**C3P0接口
C3P0接口是一个开放源代码的JDBC连接池,它包括了实现jdbc3和jdbc2扩展规范说明的Connection和Statement的DataSources对象.在使用C3P0数据源开发时,需要了解数据源对象的相关方法,该类的常用方法如下:
方法名称 |
功能描述 |
void setDriverClass() |
设置连接数据库的驱动名称 |
void setJdbcUrl() |
设置连接数据库的路径 |
void setUser() |
设置连接数据库的登录账号 |
void setPassword() |
设置连接数据库的登录密码 |
void setMaxPoolSize() |
设置数据库连接池最大的连接数目 |
void setMinPoolSize() |
设置数据库连接池最小的连接数目 |
void setInitialPoolSize() |
设置数据库连接池初始化的连接数目 |
Connection getConnection() |
从数据库连接池中获取一个连接 |
当使用C3P0数据源时,首先需要创建数据源对象,创建数据源对象可以使用ComboPooledDataSource类的两个构造方法,分别是ComboPooledDataSource()和ComboPooledDataSource(String configName).
下面使用ComboPooledDataSource(String configName)构造方法演示如何通过读取配置文件创建数据