JDBC 技术 对数据库的访问

JDBC  是一种java 数据库连接技术,能实现java程序对各种数据库的访问。由一组使用java 语言编写的类和接口组成,这些类和接口称为JDBC API,他们位于包java.sql 以及javax.sql中。这也是最最原始的java连接数据库的方式。以后的Hibernate 、mybatis等等都是对这一技术的封装而已。下面来详细讲解下JDBC 的相关操作技术:

先来了解一下需要掌握的理论知识

一、JDBC 的主要作用

1.建立与数据库之间的访问连接。
2.将编写好的SQL 语句发送到数据库执行。
3.对数据库返回的执行结果进行处理。

二、JDBC 的工作原理
将自己编写的java 应用程序使用java.sql和javax.sql 包中的JDBC API 来连接和操作数据库。

三、JDBC API 工作的五个重要环节
1.DriverManager 类: 依据数据库的不同,管理JDBC 驱动,即跟踪已注册的驱动程序,当调用getConnection()方法时它会搜索整个驱动程序列表找到能够连接的只i的那个的驱动程序对数据库进行连接,主要分为 ORACLE 的驱动类  Mysql 的驱动类,
语法为 Class.forName("JDBC 驱动类的完整路径”)。 
2.Connection接口:负责连接数据库并担任传送数据的任务。这个接口是最最重要的一环,他是调DriverManager 类里的方法连接的 ,直接通过这一步来连接的数据库。
语法为 Connection con = DriverManager.getConnection(数据库的url ,连接的数据库用户名、密码); 数据库的url  不同的数据库有不同的写法的。用户名和密码是可选的,但一般都需要的。
3.Statement接口: 负责执行SQL 语句,这一步是向连接好的数据库传递 编写的SQL 并予以执行。这一步是调用Connection接口的实现 的方法来执行的。
语法 Statement stmt = connection.createStatement9();
4.ResultSet接口:负责保存Statement执行后所产生的查询结果。这是最终的结果所得 根据最后三个字母Set可以知道,最后得到的其实是一个集合,但是一种类似与键值对的,通过 他的实现的 next()方法判断是否为空,通过getString("字段名")  取值,取出的都是String 类型的,当然也有例外 日期 用getTimestamp("日期字段名")方法来取,取出的是Timestamp 类型的,id用getInt("id")方法取 ,取出的是INT 类型的
语法,ResultSet rs = stmt.executeQuery(sql)
           while(rs.next()){
            int id = rs.getInt("id");
            String title = rs.getString("title");
           Timestamp time =rs. getTimestamp("creatdate");
           ......
            }
5.释放资源。即对使用的接口进行非空判断,予以关闭。
语法  if(rs!=null){
            rs.close();
         }
         if(stmt!=null){
        stmt.close();
        }
        if(connection!=null){
        connection.close();
       }

下面直接上一段代码:
public class TestJdbc {
 try{
 Class.forName("oracle.jdbc.driver.OracleDriver");
 Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:news", "scott", "tiger");
 String sql = "select * from news_detail";
 Statement stmt = connection.createStatement();
 ResultSet rs = stmt.executeQuery(sql);
            while(rs.next()){
             int id = rs.getInt("id");
             String title = rs.getString("title");
            Timestamp time =rs. getTimestamp("creatdate");
            ......
 }catch (SQLException e) {
  e.printStackTrace();
 }finally{
  if(rs!=null){
               rs.close();
            }
            if(stmt!=null){
           stmt.close();
           }
           if(connection!=null){
           connection.close();
          }
 }
  
 }

 像上面把所有的信息都写在代码里有一个很大的问题,如果数据库一旦做了改动 ,还得去改动代码,这样肯定是不好的。所以有一种方式就是将数据库的连接信息写在一个配扩展名为 properties的配置文件里,然后通过一些工具类将配置文件的信息读取到代码中。

一、配置文件的创建

先建个 扩展名为properties 的文件
写入数据库连接的信息,在配置文件中采用key_value 对应的方式进行类容的组织,关键代码:
jdbc.driver_class = oacle.jdbc.driver.OrecleDriver
jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:news
jdbc.connection.username=scott
jdbc.connection.password=tiger

那么要如何读取,需要写一个工具类, 使用Properties对象的load()方法来实现,还需要用到流来实现对文件的操作。但此处的流是通过  类的对象的getClassLoader()方法得到一个类的加载器在用加载器的getResourceAsStream("")方法读取流信息。例:ConfigManager.class.getClassLoader).getResourceAsStrem("配置文件名"),下面直接上一个数据库访问的工具类代码:

public class ConfigManager {
 private static ConfigManager configManager;
 private static Properties properties;
 
 private ConfigManager(){
  String configFile = "database.properties";
  properties = new Properties();
  InputStream in = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
  try {
   properties.load(in); //里面存的是键值对的形式,可用getProperty("")方法获取,后面有相应方法;
   in.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
   
  }
 //通过单例模式设置实例化的个数
 public static ConfigManager getInstance(){
  if(configManager==null){
   configManager = new ConfigManager();
  }
  return configManager;
 }
 //通过key获取对应的value
 public String getString(String key){
  return properties.getProperty(key);
  
 }
 
}


工具类写好后就可以,运用起来读取配置文件信息然后放到代码里面实现数据库的访问了。下面上代码:

String driver = ConfigManager.getInstance().getString("jdbc.driver_class");
  String url = ConfigManager.getInstance().getString("jdbc.connectin.url");
  String username = ConfigManager.getInstance().getString("jdbc.connection.username");
  String password = ConfigManager.getInstance().getString("jdbc.connection.password");
  try{
 Class.forName(driver);
 Connection connection = DriverManager.getConnection(url, username, password);
 String sql = "select * from news_detail";
 Statement stmt = connection.createStatement();
 ResultSet rs = stmt.executeQuery(sql);
            while(rs.next()){
             int id = rs.getInt("id");
             String title = rs.getString("title");
            Timestamp time =rs. getTimestamp("creatdate");
            ......
 }catch (SQLException e) {
  e.printStackTrace();
  // TODO: handle exception
 }finally{
  if(rs!=null){
               rs.close();
            }
            if(stmt!=null){
           stmt.close();
           }
           if(connection!=null){
           connection.close();
          }
 }
  
 }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值