发表于: 2017-04-11 23:56:35

2 1260


今天完成的事:

关于DAO:用来控制访问数据库的一些操作的接口

学习JDBC

JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源。

JDBC为访问不同的数据库提供了一种 统一的途径,为开发者屏蔽了一些细节问题。

JDBC的目标是使Java程序员 使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

java.sql.DriverManager用来装载驱动程序,获取数据库连接。

java.sql.Connection完成对某一指定数据库的联接

java.sql.Statement在一个给定的连接中作为SQL执行声明的容器,他包含了两个重要的子类型。

Java.sql.PreparedSatement 用于执行预编译的sql声明

Java.sql.CallableStatement用于执行数据库中存储过程的调用

java.sql.ResultSet对于给定声明取得结果的途径

接口和实现分层的必要性

接口正常来说应该是一开始就设计好的,不能随意的修改,如果你经常修改,首先需要考虑dao层是否考虑的足够充分

而为什么有接口层,是为了进行更好的隔离,最简单的例子就是,如果你对service层需要进行单元测试了,

而又不希望你对dao层进行实际的操作(可能是条件不允许),这时你很可能需要针对测试去mock一个dao出来,接口的优势就体现出来了




1.在eclipse导入Java 的jar包的方法

在使用JDBC编程时需要连接数据库,导入JAR包是必须的,导入其它的jar包方法同样如此,导入的方法是 

打开eclipse

1.右击要导入jar包的项目,点properties 

2.左边选择java build path,右边选择libraries 

3.选择add External jars 

4.选择jar包的按照路径下的

确定后就行了。

Java连接MySQL的最新驱动包下载地址 

http://www.mysql.com/downloads/connector/j


简单的说JDBC主要完成三件事:

›第一与数据库建立连接;

›第二向数据库发送SQL语句;

›第三处理数据库返回结果。

具体步骤如下:

›第一步:向驱动程序管理器加载、注册JDBC驱动程序。

›第二步:获得特定 的数据库连接。

›第三步:得到SQL语句容器,并发送SQL语句。

›第四步:如果SQL语言有结果集返回的话,处理结果集。

›第五步:关闭数据库连接,这一步非常重要,因为数据库连接是一种非常宝贵的资源,在使用完毕后,必须关闭数据库连接,应放在finally语句中。


注册驱动程序

v向驱动程序管理器加载注册驱动程序时,有一个类和一个接口与之有关,即DriverManager类和Driver接口。

     (1) DriverManager类:DriverManager类代表驱动程序管理器,提供了一批static方法负责驱动程序的调入以及得到特定的数据库连接。这个类中的静态方法如下:

›public static void registerDriver(Driver driver) throws SQLException

  向驱动程序管理器注册一个驱动程序。

›public static void deregisterDriver(Driver driver)throws SQLException

  删除驱动程序管理器中的一个驱动程序。

›public static Connection getConnection(String url)throws SQLException

  获得一个特定的数据库连接,url与上面的格式一样。

›public static Connection getConnection(String url,String user,String password )throws SQLException

  获得一个数据库连接,并且指定用户名和密码。

     (2) Driver接口:接口代表一个驱动程序的对象。

  注册一个odbc的驱动器

  DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());

 

v另外,java.lang包的Class类中有一个静态方法也可以完成这个工作:

  public static ClassforName (String className) throws  ClassNotFoundException

v注册一个odbc的驱动器:

  Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

v其他驱动器的注册:这两者都会抛异常,注意异常处理

  Oracle驱动:

  Class.forName(“oracle.jdbc.driver.OracleDriver”) ;

  DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

 

v这个时候要求要找到驱动程序所在的程序库,比如Oracle的JDBC驱动程序在classes12.zip或classes12.jar,必须将该驱动程序的完整路径名放在类路径上,另一种做法是修改classpath环境变量,为其配置上classes12.jar,使用时还要将包导入:

  import oracle.jdbc.driver.*;

连接数据库

vDriverManager类的静态方法getConnection()方法可以连接一个指定的数据库,如:

//连接odbc

   Connection con1 = DriverManager.getConnection(“jdbc:odbc:school”);

//连接Oracle

  String url = “jdbc:oracle:thin:@localhost:1521:myoracle”;

  String userName = “scott”;

  String password = “tiger”;

  Connection conn3 = DriverManager.getConnection(url,userName,password);

v注意异常处理

得到SQL语句容器,并向数据库发送SQL语句

获得SQL语句容器的方法定义在Connection接口中,通过Connection接口我们

可以得到三种类型的容器,如下所示:

(1) public Statement createStatement()throws SQLException

获得SQL语句的容器结果不可滚动不可更新。

(2)public PreparedStatementpreparedStatement(String sql) throws SQLException

获得预编译的SQL语句容器,可以出现?占位符,然后设置,只能是in参数。

(3) public CallableStatementpreparedCall(String sql) throws SQLException

获得调用数据库存储过程或函数的一个对象,占位符?可以是in参数也可以

是out参数。

查看类库掌握3种SQL容器中的方法:后面章节还要详细讲解,先了解一下:

(1)Statement

(2)PreparedStatement

(3)CallableStatement

向数据库发送SQL语句:发送SQL语句在Statment接口中,如下所示:

(1)public intexecuteUpdate(String sql) throws SQLException

向数据库发送SQL语句,注意不能是select语句,返回结构应该是影响的行数。

(2)public ResultSetexcuteQuery(String sql) throws SQLException

向数据库发送select语句,返回结果集。

如:

 try{

  Statement stat = conn.createStatement();

  String sql = “insetr into ……”//省略

  int rows = stat .excuteUpdate(sql);

  System.out.println(rows);

}

Catch(SQLException e){}

处理查询结果

通常对数据库操作最多的就是查询操作,使用executeQuery()方法发送查询语句并返回一个ResultSet对象。例如:

ResultSetrs = stmt.executeQuery(“select * from emp”);

ResultSet是一个以列组织的数据行,默认行指针在第一行前面的位置。

方法如下:

(1)booleannext() throws SQLException

(2)void close() throws SQLException

(3)不同的get方法,对应返回数据库中不同类型

 

下面是开发过程中经常要用到的遍历结果集常用的格式:

 ResultSetrs = stat.executeQuery(“select * from student”);

 while(rs.next()){

   Stirng name = rs.getString(“stud_name”);

   int id = rs.getInt(“stud_id”);

   Java.sql.Date birthday = rs.getDate(“stud_birthday”);

   ……

}

关闭数据库连接

由于数据库连接是一种非常宝贵的资源,所以在处理结束后要关闭连接,为此Connection对象提供了简单的close()方法关闭连接。

除了要关闭数据库连接,还要用close方法关闭所有的Statement和ResultSet对象。

代码实例如下:

 try{

  

}

 catch(SQLException e){……}

 finally{

   try{

  if(conn!=null){

  rs.close();

   stat.close();

  conn.close();

  }

  }

   catch(SQLException e){……}

}

 编写数据库连接的工具类

明天计划的事:使用JDBC实现接口和实现类的编写,学习Junit,并尝试写自己的第一个单元测试

收获:照着教程敲,一开始还是有点雾里看花的意思,慢慢理解吧



返回列表 返回列表
评论

    分享到