DMS DAO原型--ServiceDAO的findAll方法

DMS(Database Management System 数据库管理系统)
DAODAO(Data Access Object) 数据访问对象 是一个面向对象的数据库接口.DAO的设计原则是实现数据访问和业务逻辑的分离,封装最基本的增删改查方法(curd).
1.DMS DAO原型——ServiceDAO的findAll方法
案例一:如何使用Java代码连接数据库,实现查询全部的业务帐号信息。
SERVICE表结构介绍

字段名称 类型 备注 字段描述
ID NUMBER (11) PRIMARY KEY NOT NULL 业务账号ID
ACCOUNT_ID NUMBER(11) FOREIGN KEY 账务账号ID
UNIX_HOST VARCHAR2(15) NOT NULL 服务器地址
OS_USERNAME VARCHAR2(50) NOT NULL 服务器上的OS账号
LOGIN_PASSWD VARCHAR2(30) NULL 登录口令
STATUS CHAR(1) NOT NULL 0:开通;1:暂停;2:删除
CREATE_DATE DATE NOT NULL 创建日期,创建即开通
PAUSE_DATE DATE NULL 暂停日期
CLOSE_DATE DATE BULL 删除日期
COST_ID NUMBER(11) FOREIGN KEY NOT NULL 资费编码

在创建表时不考虑外键约束,建表语句如下:

CREATE TABLE SERVICE(
ID NUMBER(11) CONSTRAINT SERVICE_ID_PK PRIMARY KEY NOT NULL,
ACCOUNT_ID NUMBER(11) NOT NULL,
ACCOUNT_ID NUMBER(11) NOT NULL,
UNIX_HOST VARCHAR2(15) NOT NULL,
 OS_USERNAME VARCHAR2(50) NOT NULL,
 LOGIN_PASSWD VARCHAR2(30) NOT NULL,
STATUS CHAR(1) NOT NULL,
 CREATE_DATE DATE NOT NULL,
 PAUSE_DATE DATE,
 CLOSE_DATE DATE,
 COST_ID NUMBER(11) NOT NULL
 );

在插入测试数据之前修改默认的时间格式.

alter session set nls_date_format = 'yyyy mm dd hh24:mi:ss';

在SERVICE表中插入测试数据并提交。

INSERT INTO SERVICE VALUES (2001,1010,'192.168.0.26','guojing',
 '12345',0,'2009 03 10 10:00:00',null,null,1);

INSERT INTO SERVICE VALUES (2002,1011,'192.168.0.26','huangrong',
'12345',0,'2009 03 01 15:30:05',null,null,1);

 INSERT INTO SERVICE VALUES (2003,1011,'192.168.0.20','huangrong',
 '12345',0,'2009 03 01 15:30:10',null,null,3);

INSERT INTO SERVICE VALUES (2004,1011,'192.168.0.23','huangrong',
'12345',0,'2009 03 01 15:30:15',null,null,6);

INSERT INTO SERVICE VALUES (2005,1019,'192.168.0.26','luwushuang',
 '12345',0,'2012 02 10 23 :50:55',null,null,4);

 INSERT INTO SERVICE VALUES (2006,1019,'192.168.0.20','luwushuang',
'12345',0,'2012 02 10 00 :00:00',null,null,5);

 INSERT INTO SERVICE VALUES (2007,1020,'192.168.0.20','weixiaobao',
'12345',0,'2012 02 10 11:05:20',null,null,6);

INSERT INTO SERVICE VALUES (2008,1020,'192.168.0.20','guojing',
 '12345',0,'2012 02 11 12:05:21',null,null,6);
INSERT INTO SERVICE VALUES (2009,1020,'192.168.0.20','tongxiangyu',
'12345',0,'2012 02 12 10:05:20',null,null,6);

 INSERT INTO SERVICE VALUES (2010,1020,'192.168.0.20','baizhantang',
 '12345',0,'2012 02 11 11:05:30',null,null,6);

 INSERT INTO SERVICE VALUES (2011,1018,'192.168.0.20','moxiaobei',
 '12345',0,'2012 02 11 12:05:31',null,null,6);

 INSERT INTO SERVICE VALUES (2012,1018,'192.168.0.20','luxiucai',
'12345',0,'2012 02 12 12:06:30',null,null,6);

INSERT INTO SERVICE VALUES (2013,1018,'192.168.0.20','lidazhui',
 '12345',0,'2012 02 13 13:07:31',null,null,6);

 INSERT INTO SERVICE VALUES (2014,1015,'192.168.0.20','guofurong',
'12345',0,'2012 02 14 14:08:32',null,null,6);

INSERT INTO SERVICE VALUES (2015,1015,'192.168.0.20','xingbutou',
 '12345',0,'2012 02 15 15:09:33',null,null,6);

COMMIT;

创建ServiceDAO类,在类中新建方法findAll,实现查询全部的业务帐号信息。
在findAll方法中,首先注册连接Oracle数据库的驱动程序。

Class.forName("oracle.jdbc.OracleDriver");

通过调用DriverManager的getConnection方法,获取Connection类的对象,建立连接。
getConnection方法有三个参数,第一参数表示连接数据库的字符串,包含了要连接数据库信息,
例如连接Oracle数据库的连接字符串格式为:
jdbc:oracle:thin:@<主机名>:<端口号(默认1521)>:<实例名>
第二参数表示连接数据库的用户名,第三个参数表示连接数据库的密码,可以根据连接数据库
的不同,用户名和密码的不同,相应的修改以上所述的三个参数。

con = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:ORCL","scott", "tiger"

Connection表示应用程序与数据库的连接,通过调用它的createStatement()方法可以获取数
据库操作对象Statement。

stmt = con.createStatement();

Statement主要用于执行SQL语句并返回它所生成结果。通过调用它的executeQuery方法,该
方法有一个参数,表示要执行的SQL语句。

ResultSet   rs = stmt.executeQuery("select ID, ACCOUNT_ID, UNIX_HOST, OS_USERNAME,
LOGIN_PASSWD, CREATE_DATE from SERVIC");

ResultSet表示数据库查询操作的结果集。它具有指向其当前数据行的光标。最初光标被置
于第一行之前,调用其next 方法将光标移动到下一行,该方法在 ResultSet 对象没有下一行时返回
false,因此可以在 while 循环中使用它来迭代结果集。
ResultSet提供了getXXX(String column)方法,例如:getInt(String column)等,获取当
前ResultSet 对象的当前行中指定列名的值,其中参数column表示数据库表中的列名字。推荐使用
根据列名去获取列的数据信息。

while (rs.next()) {
System.out.println(rs.getInt("ID") + ","
 + rs.getInt("ACCOUNT_ID") + ","
+ rs.getString("UNIX_HOST")
+ "," + rs.getString("OS_USERNAME") + ","
 + rs.getString("LOGIN_PASSWD") + ","
 + rs.getTimestamp("CREATE_DATE"));
 }

ResultSet提供了getXXX(int columnIndex)方法,例如:getInt(int columnIndex)等,获
取当前ResultSet 对象的当前行中指定列索引的值,其中参数columnIndex表示要获取的列的数据
在表中是第几列,注意:列数从1开始。

while (rs.next()) { System.out.println(rs.getInt(1) + "," +
 rs.getInt(2) + "," + rs.getString(3) + "," + rs.getString(4)
 "," + rs.getString(5) + "," + rs.getTimestamp(6)); }

数据库的连接资源是有限的,使用完毕后需要及时释放。否则会因资源耗尽使应用程序瘫痪,
无法正常工作。 调用JDBC对象的close方法可以释放与该对象关联的系统资源。

rs.close();
stmt.close();

ServiceDAO类代码如下:

public class ServiceDAO {
public void findAll() {
      Connection con = null;
      Statement stmt = null;
      ResultSet rs = null;
       try {
              Class.forName("oracle.jdbc.OracleDriver");
                con = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:ORCL",
                                                                          "scott", "tiger");
                  stmt = con.createStatement();
                   rs = stmt .executeQuery("select ID, ACCOUNT_ID, UNIX_HOST, OS_USERNAME,
                                                            LOGIN_PASSWD, CREATE_DATE from SERVICE");
                      while (rs.next()) {
                                     System.out.println(rs.getInt("ID") + ","
                                         + rs.getInt("ACCOUNT_ID") + "," + rs.getString("UNIX_HOST")+ "," + rs.getString("OS_USERNAME") + ","
                                         + rs.getString("LOGIN_PASSWD") + ","+ rs.rs.getTimestamp("CREATE_DATE"));
                                              }

                                          rs.close();
                                           stmt.close();

                         } catch (ClassNotFoundException e) {
                                                                      System.out.println("驱动类无法找到!");
                                                                       throw new RuntimeException(e);
                           } catch (SQLException e) {
                                        System.out.println("数据库访问异常!");
                                         throw new RuntimeException(e);
                             } finally {
                                   try {
                                         if (con != null) {
                                                               con.close();
                                                              }
                                          } catch (SQLException e) {
                                      } 
                                }
                    }
}

TestServiceDAO类代码如下:

public class TestServiceDAO {
@Test
 public void testFindAll() {
      ServiceDAO serviceDAO = new ServiceDAO();
      serviceDAO.findAll();
       }
 }

实现根据服务器地址和服务器的OS账号查询业务帐号信息。
在ServiceDAO类中创建findByUsernameAndHost方法,实现根据服务器地址和服务器的OS
账号查询业务帐号信息。
设置要查询的服务器地址和服务器的OS帐号。
在SQL语句中,设置查询的条件,注意字符串的拼接方式。

你可能感兴趣的:(学习笔记)