JDBC连接数据库的技术演进

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: JDBC连接数据库的技术演进                                                                                                            ...
+关注继续查看

JDBC连接数据库的技术演进

                                                                                                                                                         帅宏军

1.下载sqlserver驱动程序

    http://msdn.microsoft.com/zh-cn/data/aa937724.aspx

 

2.使用MyEclipse创建Web程序,在Lib中引用上面下载的sqljdbc4.jar驱动

 

3.创建Jdbc测试类

packagecn.uhj.jdbc; 

importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement; 
importorg.junit.Test;
 
public class JdbcTest {      
       @Test
       public void TestJdbc() throwsClassNotFoundException, SQLException{
              //1、加载sqlserver数据库驱动
              DriverManager.registerDriver(new SQLServerDriver());
             
              //2、创建数据库连接
              Connection con =DriverManager.getConnection("jdbc:sqlserver://192.168.1.6:1433;DatabaseName=CpadLine", "sa", "123");
             
              //3、创建状态
              Statement state =con.createStatement();
             
              //4、查询数据库并返回结果
              ResultSet result =state.executeQuery("select * from Member.UserBasicInfo");
             
              //5、输出查询结果
              while(result.next()){
                     System.out.println(result.getString("email"));
              }
             
              //6、关闭数据库
              result.close();
              state.close();
              con.close();
             
       }
}


4.研究MySql的Driver源码,优化数据库操作

   没有SqlServer下的源码,我们权且研究一下MySql的源码,来分析一下驱动加载的过程。      

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
       // 这是静态代码块,在类加载时运行,这里已经完成了驱动的加载
       static {
              try {
                     java.sql.DriverManager.registerDriver(new Driver());
              } catch (SQLException E) {
                     throw newRuntimeException("Can't register driver!");
              }
       }
 
 
       public Driver() throws SQLException {
              // Required forClass.forName().newInstance()
       }
}


       从上面的源码中我们可以看出,在静态代码块中,已经使用  DriverManager.registerDriver(new Driver());语句完成了驱动的加载,如果我们再调用一次DriverManager.registerDriver(new Driver());语句,则该语句执行了两次。那么如何规避这个问题呢?使用反射技术加载驱动。将代码重构如下:

      

 public void TestJdbc() throwsClassNotFoundException, SQLException{
              //1、通过反射机制加载sqlserver驱动对象
              Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
             
              //2、创建数据库连接
              Connection con = DriverManager.getConnection("jdbc:sqlserver://192.168.2.6:1433;DatabaseName=customer", "sa", "123");
             
              //3、创建状态
              Statement state =con.createStatement();
             
              //4、查询数据库并返回结果
              ResultSet result =state.executeQuery("select * from users");
             
              //5、输出查询结果
              while(result.next()){
                     System.out.println(result.getString("email"));
              }
             
              //6、关闭数据库
              result.close();
              state.close();
              con.close();             
       }

     

5.如何兼容数据库的更换

       使用上述代码时,发生下面两种需求变更,必然要修改代码。

       1)数据库的用户名和密码发生了变化

       2)数据更换为mysql或者oracle

 

       如何解决这个问题呢?使用配置文件技术:

      

       1)新建一个dbconfig.properties文件,内容清单如下:

       

       DRIVERCLASS= com.microsoft.sqlserver.jdbc.SQLServerDriver
       URL= jdbc:sqlserver://192.168.2.6:1433
       USER=sa
       PWD=123

 

       2)重构数据库操作代码如下

package cn.uhj.jdbc;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle; 
import org.junit.Test;
 
 
public class JdbcTest {
    private static final String DRIVERCLASS;
    private static final String URL;
    private static final String USER;
    private static final String PWD;
 
    static {
        ResourceBundlebundle = ResourceBundle.getBundle("dbconfig");
        DRIVERCLASS =bundle.getString("DRIVERCLASS");
        URL = bundle.getString("URL");
        USER = bundle.getString("USER");
        PWD = bundle.getString("PWD");
    }  
       
    @Test
    public void TestJdbc() throws ClassNotFoundException,SQLException{
        //1、通过反射机制加载sqlserver驱动对象
        Class.forName(DRIVERCLASS);
       
        //2、创建数据库连接
        Connectioncon = DriverManager.getConnection(URL, USER, PWD);
       
        //3、创建状态
        Statementstate = con.createStatement();
       
        //4、查询数据库并返回结果
        ResultSetresult = state.executeQuery("select * from users");
       
        //5、输出查询结果
        while(result.next()){
            System.out.println(result.getString("email"));
        }
       
        //6、关闭数据库
        result.close();
        state.close();
        con.close();       
    } 
}

经过重构的代码,没有显式使用数据库连接类型,用户名、密码等可能引起变化的数据。通过修改配置文件,就可满足上述需求变更,而不需要修改代码。满足了系统灵活性。

 

转载请注明出处:http://blog.csdn.net/shuaihj/article/details/14002129

 


相关实践学习
使用交互方式创建数据表
本次实验主要介绍如何在RDS-SQLServer数据库中使用交互方式创建数据表。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
4月前
|
druid Java 数据库连接
JDBC核心技术3
JDBC核心技术3
42 0
|
4月前
|
Java 关系型数据库 MySQL
JDBC核心技术2
JDBC核心技术2
55 0
|
4月前
|
SQL 存储 Java
JDBC核心技术1
JDBC核心技术1
22 0
|
7月前
|
SQL druid Java
如何使用JDBC操作数据库?一文带你吃透JDBC规范(二)
如何使用JDBC操作数据库?一文带你吃透JDBC规范(二)
66 0
|
11月前
|
Java 大数据 关系型数据库
【大数据系列之JDBC】(一):MySQL5.1驱动下载
【大数据系列之JDBC】(一):MySQL5.1驱动下载
100 0
【大数据系列之JDBC】(一):MySQL5.1驱动下载
|
12月前
|
SQL 监控 druid
JDBC核心技术(三)
JDBC核心技术(三)
72 0
JDBC核心技术(三)
|
12月前
|
SQL 缓存 Oracle
JDBC核心技术(二)
JDBC核心技术(二)
175 0
JDBC核心技术(二)
|
12月前
|
SQL 存储 缓存
JDBC核心技术(一)
JDBC核心技术(一)
110 0
JDBC核心技术(一)
|
12月前
|
SQL 缓存 监控
【JDBC】数据库连接池技术
1.为什么需要数据库连接池? 我们在讲多线程的时候说过,创建线程是一个昂贵的操作,如果有大量的小任务需要执行,并且频繁地创建和销毁线程,实际上会消耗大量的系统资源,往往创建和消耗线程所耗费的时间比执行任务的时间还长,所以,为了提高效率,可以用线程池。
190 1
【JDBC】数据库连接池技术
|
Java 数据库连接 数据库
原生JDBC连接数据库案例教学
前言: 我们在刚刚接触后端开发时,有没有思考过,怎么才能后java代码和数据库进行交互的呢?
推荐文章
更多