linux配置jdbc访问数据库,Java访问数据库之JDBC实现方式

数据库连接池

数据库连接池用

c3p0-0.9.1.2.jar

包,通过配置文件的方式来维护数据库连接信息。在类路径下新建

c3p0-config.xml

文件,内容如下:

xml

version

=

"1.0"

encoding

=

"UTF-8"

?>

<

c3p0-config

>

<

named-config

name

=

"shiro"

>

<

property

name

=

"user"

>

root

property

>

<

property

name

=

"password"

>

123456789

property

>

<

property

name

=

"driverClass"

>

com.mysql.jdbc.Driver

property

>

<

property

name

=

"jdbcUrl"

>

jdbc:mysql://

localhost

:3306/

shiro

?characterEncoding=

utf

-8

property

>

<

property

name

=

"acquireIncrement"

>

5

property

>

<

property

name

=

"initialPoolSize"

>

5

property

>

<

property

name

=

"minPoolSize"

>

5

property

>

<

property

name

=

"maxPoolSize"

>

20

property

>

<

property

name

=

"maxStatements"

>

20

property

>

<

property

name

=

"maxStatementsPerConnection"

>

5

property

>

named-config

>

c3p0-config

>

JdbcUtils

该类主要用来加载

c3p0

数据源属性,获取

connection

及释放

connection

/**

* 获取数据库连接,及

sql

语句

*

@author

逍遥居士

*

@version

V 1.0

*/

public

class

JdbcUtils {

private

static

DataSource

dataSource

=

null

;

static

{

//加载c3p0数据源

dataSource

=

new

ComboPooledDataSource(

"shiro"

);

}

/**

* 返回、connection

*

*

@return

*

@throws

SQLException

*/

public

static

Connection getConnection()

throws

SQLException {

return

dataSource

.getConnection();

}

/**

* 根据

sql

语句名获取具体的

sql

语句命令

*

*

@param

name

*

@return

*/

public

static

String getSql(String

name

) {

Map

sqls

=

null

;

try

{

sqls

= QueryLoader.

instance

().load(

"/sql.properties"

);

return

sqls

.get(

name

);

}

catch

(IOException

e

) {

e

.printStackTrace();

}

return

null

;

}

/**

* 释放连接资源

*

*

@param

connection

*/

public

static

void

realseDb(Connection

connection

) {

if

(

connection

!=

null

) {

try

{

connection

.close();

}

catch

(SQLException

e

) {

e

.printStackTrace();

}

}

}

public

static

void

relase(ResultSet

reslutSet

,Statement

satement

) {

if

(

reslutSet

!=

null

) {

try

{

reslutSet

.close();

}

catch

(SQLException

e

) {

e

.printStackTrace();

}

}

if

(

satement

!=

null

) {

try

{

satement

.close();

}

catch

(SQLException

e

) {

e

.printStackTrace();

}

}

}

}

JDBC

Dao

接口

Dao

定义

Dao

的基本操作

,

BaseDao

提供实现

/**

*

Dao

接口

, 定义

Dao

的基本操作

, 由 BaseDao 提供实现.

*

*

@param

:

*

Dao

实际操作的泛型类型

*

@author

逍遥居士

*

@version

V 1.0

*/

public

interface

DAO {

/**

* 执行 INSERT 操作, 返回插入后的记录的 ID

*

*

@param

sql:

*            待执行的 SQL 语句

*

@param

args:

*            填充占位符的可变参数

*

@return

: 插入新记录的 id

*/

int

insert(String

sql

, Object...

args

);

/**

* 执行 UPDATE 操作, 包括 INSERT(但没有返回值), UPDATE, DELETE

*

*

@param

sql:

*            待执行的 SQL 语句

*

@param

args:

*            填充占位符的可变参数

*/

boolean

update(String

sql

, Object...

args

);

/**

* 执行单条记录的查询操作, 返回与记录对应的类的一个对象

*

*

@param

sql:

*            待执行的 SQL 语句

*

@param

args:

*            填充占位符的可变参数

*

@return

: 与记录对应的类的一个对象

*/

T query(String

sql

, Object...

args

);

/**

* 执行多条记录的查询操作, 返回与记录对应的类的一个 List

*

*

@param

sql:

*            待执行的 SQL 语句

*

@param

args:

*            填充占位符的可变参数

*

@return

: 与记录对应的类的一个 List

*/

List queryForList(String

sql

, Object...

args

);

/**

* 执行一个属性或值的查询操作, 例如查询某一条记录的一个字段, 或查询某个统计信息, 返回要查询的值

*

*

@param

sql:

*            待执行的 SQL 语句

*

@param

args:

*            填充占位符的可变参数

*

@return

: 执行一个属性或值的查询操作, 例如查询某一条记录的一个字段, 或查询某个统计信息, 返回要查询的值

*/

E getForValue(String

sql

, Object...

args

);

/**

* 执行批量更新操作

*

*

@param

sql:

*            待执行的 SQL 语句

*

@param

args:

*            填充占位符的可变参数

*/

void

batch(String

sql

, Object[]...

args

);

}

BaseDao

泛型类

BaseDao

实现

DAO

的方法。

/**

* 定义BaseDao泛型类

*

*

@author

逍遥居士

*

@version

V 1.0

*

*

@param

*            实际操作类型

*/

public

class

BaseDAO

implements

DAO {

private

QueryRunner

queryRunner

=

new

QueryRunner();

private

Class

type

;

public

BaseDAO() {

type

= ReflectionUtils.

getSuperGenericType

(getClass());

}

/**

* 返回一个具体的值

*

*

@param

sql

*

@param

args

*

@return

*/

public

E getForValue(String

sql

, Object...

args

) {

Connection

connection

=

null

;

try

{

connection

= JdbcUtils.

getConnection

();

return

(E)

queryRunner

.query(

connection

,

sql

,

new

ScalarHandler<>(),

args

)

;

}

catch

(SQLException

e

) {

e

.printStackTrace();

}

finally

{

JdbcUtils.

realseDb

(

connection

);

}

return

null

;

}

/**

* 返回多个对象

*

*

@param

sql

*

@param

args

*

@return

*/

public

List queryForList(String

sql

, Object...

args

) {

Connection

connection

=

null

;

try

{

connection

= JdbcUtils.

getConnection

();

return

queryRunner

.query(

connection

,

sql

,

new

BeanListHandler<>(

type

),

args

);

}

catch

(SQLException

e

) {

e

.printStackTrace();

}

finally

{

JdbcUtils.

realseDb

(

connection

);

}

return

null

;

}

/**

* 返回一个对象

*

*

@param

sql

*

@param

args

*

@return

*/

public

T query(String

sql

, Object...

args

) {

Connection

connection

=

null

;

try

{

connection

= JdbcUtils.

getConnection

();

return

queryRunner

.query(

connection

,

sql

,

new

BeanHandler<>(

type

),

args

);

}

catch

(SQLException

e

) {

e

.printStackTrace();

}

finally

{

JdbcUtils.

realseDb

(

connection

);

}

return

null

;

}

/**

* 增、删、改

*

*

@param

sql

*

@param

args

*/

public

boolean

update(String

sql

, Object...

args

) {

Connection

connection

=

null

;

boolean

flag

=

false

;

try

{

connection

= JdbcUtils.

getConnection

();

queryRunner

.update(

connection

,

sql

,

args

);

flag

=

true

;

}

catch

(SQLException

e

) {

e

.printStackTrace();

}

finally

{

JdbcUtils.

realseDb

(

connection

);

}

return

flag

;

}

/**

* 根据插入的记录获取相应的主键值

*

*

@param

sql

*

@param

args

*/

@Override

public

int

insert(String

sql

, Object...

args

) {

int

id

= 0;

Connection

connection

=

null

;

java.sql.PreparedStatement

preparedStatement

=

null

;

ResultSet

resultSet

=

null

;

try

{

connection

= JdbcUtils.

getConnection

();

preparedStatement

=

connection

.prepareStatement(

sql

, Statement.

RETURN_GENERATED_KEYS

);

if

(

args

!=

null

) {

for

(

int

i

= 0;

i

<

args

.

length

;

i

++) {

preparedStatement

.setObject(

i

+ 1,

args

[

i

]);

}

}

preparedStatement

.executeUpdate();

resultSet

=

preparedStatement

.getGeneratedKeys();

if

(

resultSet

.next()) {

id

=

resultSet

.getInt(1);

}

}

catch

(SQLException

e

) {

e

.printStackTrace();

}

finally

{

JdbcUtils.

relase

(

resultSet

,

preparedStatement

);

}

return

id

;

}

/**

* 批量处理

*

*

@param

sql

*

@param

args

*/

@Override

public

void

batch(String

sql

, Object[]...

args

) {

Connection

connection

=

null

;

try

{

connection

= JdbcUtils.

getConnection

();

queryRunner

.batch(

connection

,

sql

,

args

);

}

catch

(SQLException

e

) {

e

.printStackTrace();

}

}

}

具体业务

DAO

实现

根据不同的业务来定义需要的接口,例如维护用户信息(

CRUD

)的

UserDao

93066127fc04706394ef00afe38c05f8.png

在数据持久层定义

UserDao

的实现类

UserDaoImpl

去继承

BaseDao

泛型类实现具体的

UserDao

8665e82d16fee8ae9507996ddef62ca8.png

在逻辑业务层去实例化

UserDaoImpl

,再调用相应的方法完成数据的

CRUD

26f860ac3fbea8a41ffc3a260138d324.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值