用单例模式定义一个访问数据库的工具类DbUtil,并调用

用单例模式定义一个访问数据库的工具类DbUtil,并调用,第1张

1单例模式只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被公用的场合适合使用,如多个模块使用同一个数据源连接对象等等2单例的缺点就是不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。用单例模式,就是在适用其优点的状态下使用。

Java可以使用JDBC访问数据库,也可以使用各类ORM框架访问数据库,但这些框架最终还是通过JDBC访问数据库,它们只是封装了数据库 *** 作,而使得开发者可以减少这部分消耗。因此,本文只讲解JDBC访问方式。

JDBC访问一般分为如下流程:

1、加载JDBC驱动程序:

在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),

这通过javalangClass类的静态方法forName(String className)实现。

例如:

try{

//加载MySql的驱动类

ClassforName("commysqljdbcDriver") ;

}catch(ClassNotFoundException e){

Systemoutprintln("找不到驱动程序类 ,加载驱动失败!");

eprintStackTrace() ;

}

成功加载后,会将Driver类的实例注册到DriverManager类中。

2、提供JDBC连接的URL

•连接URL定义了连接数据库时的协议、子协议、数据源标识。

•书写形式:协议:子协议:数据源标识

协议:在JDBC中总是以jdbc开始

子协议:是桥连接的驱动程序或是数据库管理系统名称。

数据源标识:标记找到数据库来源的地址与连接端口。

例如:(MySql的连接URL)

jdbc:mysql://localhost:3306/testuseUnicode=true&characterEncoding=gbk ;

useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为

gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。

3、创建数据库的连接

•要连接数据库,需要向javasqlDriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。

•使用DriverManager的getConnectin(String url,String username,String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。

例如:

//连接MySql数据库,用户名和密码都是root

String url = "jdbc:mysql://localhost:3306/test" ;

String username = "root" ;

String password = "root" ;

try{

Connection con =

DriverManagergetConnection(url , username , password ) ;

}catch(SQLException se){

Systemoutprintln("数据库连接失败!");

seprintStackTrace() ;

}

4、创建一个Statement

•要执行SQL语句,必须获得javasqlStatement实例,Statement实例分为以下3种类型:

1、执行静态SQL语句。通常通过Statement实例实现。

2、执行动态SQL语句。通常通过PreparedStatement实例实现。

3、执行数据库存储过程。通常通过CallableStatement实例实现。

具体的实现方式:

Statement stmt = concreateStatement() ;

PreparedStatement pstmt = conprepareStatement(sql) ;

CallableStatement cstmt = conprepareCall("{CALL demoSp( , )}") ;

5、执行SQL语句

Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute

1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。

2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等

3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。

具体实现的代码:

ResultSet rs = stmtexecuteQuery("SELECT FROM ") ;

int rows = stmtexecuteUpdate("INSERT INTO ") ;

boolean flag = stmtexecute(String sql) ;

6、处理结果

两种情况:

1、执行更新返回的是本次 *** 作影响到的记录数。

2、执行查询返回的结果是一个ResultSet对象。

•ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。

•使用结果集(ResultSet)对象的访问方法获取数据:

while(rsnext()){

String name = rsgetString("name") ;

String pass = rsgetString(1); // 此方法比较高效(列是从左到右编号的,并且从列1开始)

}

7、关闭JDBC对象

*** 作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:

1、关闭记录集

2、关闭声明

3、关闭连接对象

if(rs != null){ // 关闭记录集

try{

rsclose() ;

}catch(SQLException e){

eprintStackTrace() ;

}

}

if(stmt != null){ // 关闭声明

try{

stmtclose() ;

}catch(SQLException e){

eprintStackTrace() ;

}

}

if(conn != null){ // 关闭连接对象

try{

connclose() ;

}catch(SQLException e){

eprintStackTrace() ;

}

}

数据层还需要函数,否则你这个结构就不叫三层结构了,你这个函数应该是在数据访问层里到,数据访问层返回给逻辑层的数据不应该是SqlDataReader对象,你可以选择返回String[],List<>,HashTable等。

数据访问层:

给你几个我的函数吧:

public

static

void

Open()

{

if

(conState

==

ConnectionStateClosed)

{

conOpen();

}

}

public

static

void

Close()

{

if

(conState

==

ConnectionStateOpen)

{

conClose();

}

}

public

static

SqlCommand

CreateCommand(string

sql)

{

return

new

SqlCommand(sql,

con);

}

public

static

List<string>

RunSQLReturnList(string

sql)

{

List<string>

info

=

new

List<string>();

SqlCommand

cmd

=

CreateCommand(sql);

Open();

SqlDataReader

sdr

=

cmdExecuteReader();

while

(sdrRead())

{

for

(int

i

=

0;

i

<

sdrFieldCount;

i++)

{

infoAdd(sdrGetName(i)ToString());

infoAdd(sdrGetValue(i)ToString());

}

}

Close();

return

info;

}

public

static

Hashtable

RunSQLReturnHashTable(string

sql)

{

List<string>

lt

=

RunSQLReturnList(sql);

Hashtable

ht

=

new

Hashtable();

for

(int

i

=

0;

i

<

ltCount;

i

+=

2)

{

ht[lt[i]]

=

lt[i

+

1];

}

return

ht;

}

数据访问层返回给逻辑层HashTable对象hashTable1:

userusername=hashTable1["Name"]ToString();

逻辑层返回给表示层实体对象user

label1text

=

userUserName;

protected void hukum()

{

string sql = "select from 表名"; //------

string conStr = ConfigurationManagerConnectionStrings["myplace1"]ToString();

SqlConnection conn = new SqlConnection(conStr);

connOpen();

SqlCommand cmd = new SqlCommand(sql, conn);

SqlDataReader drrr = cmdExecuteReader(); //------

//drrrRead(); //------

if (drrrRead())

{

v = true;

ResponseWrite("表已存在!");

}

else

{

v = false;

ResponseWrite("表不存在!");

}

connClose();

}

关于junit单元测试工具的安装请参看第二课的内容(其实就是导入一个junit的jar包就行了)

首先认识几个注解标签

@Test:测试方法

@Before:初始化方法

@After:释放资源

执行顺序:@Before->@Test->@After

第一步新建测试文件夹(目的就是用来存放测试类,使项目更整洁,分类明确,好管理)

选中项目右键new->Source Folder 输入文件夹的名称例如test

在测试文件夹下创建测试类(就是创建个普通的类)

如下在测试类中使用junit进行单元测试

下面只是先搭建一个测试框架

搭建好之后测试hibernate访问数据库的代码注意:导入的包不要弄错,都是hibernate的包

public class StudentTest { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init(){ //创建配置对象 Configuration config = new Configuration(); //创建服务注册对象 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()applySettings(configgetProperties())buildServiceRegistry(); //创建会话工厂对象 sessionFactory = configbuildSessionFactory(serviceRegistry); //会话对象 session = sessionFactoryopenSession(); //开启事务 transaction = sessionbeginTransaction(); } @Test public void testSaveStudents(){ Student s = new Student(1, "小明", new Date(), "北京xxxx街道5号楼201"); sessionsave(s);//保存对象到数据库 } @After public void destory(){ transactioncommit();//提交事务 sessionclose();//关闭会话 sessionFactoryclose();//关闭会话工厂 }}

进行测试如下: 选中测试方法右键run as ->junit test就行了

执行成功控制台打印信息:

查看数据库表

可以看到增加了一条信息,测试成功

在数据库中,通常会将权限分为以下五类:

访问权限:控制用户对数据库资源的访问权限。

数据 *** 作权限:控制用户对数据库中数据的 *** 作权限,如插入、更新、删除等。

结构 *** 作权限:控制用户对数据库中表、视图、存储过程等结构的 *** 作权限,如创建、修改、删除等。

安全权限:控制用户对数据库安全设置的权限,如设置密码、角色等。

系统权限:控制用户对数据库系统的 *** 作权限,如创建数据库、备份数据库等。

注意:不同的数据库系统可能会有所差异,上述权限类别仅供参考。

看你的代码 SQLHelper这个类你应该是单独的一个程序集(dll),你得先把SQLHelper的这个程序集添加的你现在的这个项目中

在你现在的项目中,在解决方案资源管理器中的项目上,右键选择“添加引用”,在“浏览”选项卡中选择SQLHelper的dll;当然,如果SQLHelper就在你这个解决方案中(作为一个项目),在“项目”的选项卡中选择就行了……,编译下运行就可以了。

以上就是关于用单例模式定义一个访问数据库的工具类DbUtil,并调用全部的内容,包括:用单例模式定义一个访问数据库的工具类DbUtil,并调用、java如何访问数据库、asp.net c#调用类访问数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9288520.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存