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语句由多个子句组成,其各个子句的含义如下所示.

  1. SELECT [DISTINCT] * |(字段名 1,字段名 2,字段名 3,...);字段1,字段2...表示从表中查询的指定字段,型号通配符表示表中的所有字段,两者为互斥关系,任选其中一个,"DISTINCT"是可选参数,用于删除查询结果中重复的数据,

  2. FROM 表名,表示从指定的表中查询数据,

  3. GROUP BY 字段名[HAVING 条件表达式2] ; GROUP BY是可选参数,用于将查询结果按照指定字段进行分组,HAVING也是可选参数,用于对分组后的结果进行过滤.

  4. ORDER BY 字段名[ASC|DESC]:ORDER BY 是可选参数,用于将查询结果按照指定字段进行排序.排序方式由参数ASC或DESC控制,其中ASC表示按升序进行排序,DESC 降序.默认为升序,

  5.  [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)构造方法演示如何通过读取配置文件创建数据

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值