Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决

I. 概述

1.1 JDBC概念

JDBC(Java Database Connectivity)是Java语言为了支持SQL功能而提供的与数据库连接的用户的接口,JDBC中包括了一组由(Java)语言书写的接口和类,它们都是独立于特定的DBMS,或者说他们可以和各种数据库相关联。

1.2 JDBC用途

JDBC由一组Java语言编写的类和接口组成,使用内嵌式的SQL,主要实现三方面功能:建立于数据库的链接,执行SQL声明以及处理SQL执行结果;JDBC支持基本的SQL功能,使用它可以方便地与不同的关系型数据库建立联系,进行相关操作,并无需再为不同的DBMS分别编写程序。

在JDBC出现之前,通过Java访问数据库唯一方法是利用Java输入输出流访问iruwuqi端的CGI程序,通过CGI程序访问和操作数据库并得到结果。每一次访问都会由Web服务器启动一个新的CGI进程与数据库建立连接,在这种方式下,访问效率和速度都很低,且容易引入错误。

1.3 JDBC结构和特点

简单的说,JDBC能完成下列三件事:

与一个数据库建立连接;

向数据库发送SQL语句;

处理数据库返回的结果。

JDBC包含两部分与数据库独立的API:面向程序开发人员的JDBC API和面向底层的JDBC Driver API。

面向程序开发人员的JDBC API被描述成聚集抽象的Java接口,通过这些接口应用程序可以对某个数据库打开连接,执行SQL语句并且处理结构。最重要的接口有如下几种:

java.sql.DriverManager: 处理驱动的调入并且对产生新的数据库连接提供支持

java.sql.Connection:      代表队特定数据库的连接

java.sql.Statement:        代表一个特定的容器,来对一个特定的数据库执行SQL语句

java.sql.ResultSet:         控制对一个特定语句进行数据的存取

其中java.sql.Statement又有两个子类:java.sql.PreparedStatement用于执行预编译的SQL语句和java.sql.CallableStatement用于执行对一个数据库内嵌过程的调用。

面向底层的JDBC Driver API 主要是针对数据库厂商开发数据库底层驱动程序使用的,一般情况下用于开发应用程序的程序员用不到这些类库。Java的应用程序员通过SQL包中的定义的一系列抽象类对数据库进行操作,而实现这些抽象类并完成实际操作的是数据库驱动器Driver运行的。

1.4 JDBC与其他的API

处理JDBC之外,到目前为止,微软的ODBC可能是用的最为广泛的访问关系数据库的API,甚至比JDBC的应用更加广泛,它提供了连接几乎任何一种平台、任何一种数据库的能力。当然也可以在java中直接使用ODBC,在JDBC的协助下,用JDBC-ODBC桥接器实现。但是为什么要用JDBC呢?

ODBC并不适合在Java中直接使用。完全精确地实现从C代码ODBC到Java API编写的JDBC的翻译也并不令人满意。ODBC并容易学习,它将简单和复杂特性混杂,。JDBC这样的Java API 对于纯Java方案来说是必须的。

II. Java与Access数据库(Access2007)

2.1 加载驱动

引入相应的类和包,使用JDBC的源程序都需要输入java.sql包,必要的时候还需要载入JDBC-ODBC驱动包:

import sun.jdbc.odbc.JdbcOdbcDriver必要的话引入javax.sql。

2.2 加载数据源

这里所谓的数据源就是用Access建立的数据库文件。假设该源名为IProducts.mdb。按照以下步骤:

控制面板——管理工具——数据源(ODBC)  (如图2.1)


图2.1

打开ODBC Data Source Administrator对话框——选择系统DSN(不选用户DSN,因为系统DSN可以避免调试时候出现权限问题),然后“添加”,在弹出的页面选择Microsoft Access Driver(装了2007,可以选*.mdb, *.accdb)(如图2.2)

图2.2

“完成”——“选择”

在右边选择要添加的数据库文件,“数据源名”里填写“IProducts”(这个随意填写,不过要记住后面要用到的)。

2.3 代码实现

CODE:

public boolean linkByUsingAccess() {
        Statement stat = null;
        Connection con = null;
        ResultSet rs = null;
        try {
            // 加载JDBC驱动
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            // 创建数据库连接
            con = DriverManager.getConnection("jdbc:odbc:IProducts", "","");

// 没有设置密码,所以用户名和密码留空

String sql = "select * from devil_lang_map";
            stat = con.createStatement();
            rs = stat.executeQuery(sql);
            int i = 97;
            while (rs.next()) {
                String value = rs.getString("human");
                treeMap.put(((char) i++) + "", value);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stat != null) {
                    stat.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
                return false;
            }
        }
        return true;
    }

2.4 注意

2.4.1 在装载驱动时(执行Class.forName()),驱动将自动向JDBC注册自己。需要注意的是,使用Class.forName()方法可能抛出一个ClassNotFoundException异常,所以在驱动程序类有可能不存在时,会抛出这个异常。

2.4.2 打开连接于数据库建立连接的标准方法是调用DriverManager.getConnection。该方法接收含有某个URL的字符串。DriverManager类(即所谓的JDBC管理层)将尝试找到可与那个URL所代表的数据库进行连接的驱动程序。DriverManager类存有已注册的Driver类的清单。当调用方法getConnection时,它将检查清单中的每个驱动程序,知道找到可与URL中指定的数据库进行连接的驱动程序为止,Driver Manager的getConnection方法使用这个URL来建立市级的链接。

2.4.3 JDBC URL的标准语法由三部分组成,各部分间用冒号分隔,例如jdbc:<子协议>:<子名称>

jdbc——协议。JDBC URL中的协议总是JDBC;<子协议>——驱动程序名或数据库连接机制(可以一个或多个驱动程序支持)。子协议名的典型事例是odbc,该名称是为用于指定ODBC风格的数据资源名称的URL专门保留的。例如,为了通过JDBC-ODBC桥来访问某个数据库。<子名称>——一种标识数据库的方法。

III. Java与SQL Server数据库(SQL Server2008)

(注:为方便起见,下面的Sql Server一律以SS代替)

3.1 连接代码与语句分析

3.1.1 重要语句功能简述

Class.forName(“xxx”);

JDBC中已经有多个驱动,此句话是遍历系统中已经注册的驱动程序,直到找到一个正确的驱动程序。

Connection con = DriverManager.getConnection(url);

如果无法获得连接,程序将会抛出一个异常,所以如果程序已经执行到这里,说明已经连接成功。

3.1.2 代码

CODE:

public void testSQLServer() {
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            //DriverManager.setLogStream(System.out);
            String url = "jdbc:sqlserver://localhost:1492;databasename=javaDB";
            String user = "JavaDB";
            String password = "8316051";
            con = DriverManager.getConnection(url, user, password);
            stat = con.createStatement();
            String sql = "select * from currentdb";
            rs = stat.executeQuery(sql);
            while(rs.next()) {
                System.out.println("DB_Name: " + rs.getString("NAME"));
                System.out.println("DB_Corporation: " + rs.getString("CORPORATION"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stat != null) {
                    stat.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
}

3.2 Sql Server 2008错误解决与MyEclipse连接SS异常解决

3.2.1 驱动引导问题

首先,从官网上下载驱动:http://www.microsoft.com/downloadS/details.aspx?familyid=99B21B65-E98F-4A61-B811-19912601FDC9&displaylang=zh-cn

此驱动同时支持SS2000, SS2005, SS2008。

加载方法在工程上右键——Properties——Java Build Path——Libraries——Add External JARs..然后选择jar包即可。

驱动中有两个jar包sqljdbc.jar和sqljdbc4.jar。

分别加载后如图3.1和3.2

图3.1

图3.2

然而加载sqljdbc.jar后连接数据库提示如下异常:(图3.3)

图3.3

后来移除了sqljdbc.jar(移除方法同加载方法,只是选择不同而已),加载sqljdbc4.jar,连接SS数据库只需要将包引入,而不需显示地将包import。(如图3.4)

图3.4

3.2.2 MyEclipse异常

提示信息:com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1368 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。确保使用了正确的JDBC驱动程序(注意版本)解决方案:

检查驱动连接语句“con = DriverManager.getConnection(url, user, password);“一句中的端口号是否与Sql Server Configuration Manager中的TCP/IP里面设置的TCP端口一致;在cmd中输入”telnet localhost port”来检查某个端口是否已经开启,如果提示无法开启端口,则证明该端口由于某种原因无法开启。禁用TCP/IP服务,然后重启;重启Sql Server服务(Express版本显示为Sql Server(Express))。

提示信息:com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'JavaDB' 登录失败。

分析:程序能够运行到此,证明数据库加载正确。

解决方法:

用户名或密码错误;数据库中不存在此用户。

3.2.3 SS数据库错误:

提示信息:已成功与服务器建立连接,但是在登录过程中发生错误。   (provider:   共享内存提供程序,   error:   0   -   管道的另一端上无任何进程。)

解决方法:

选中服务器(右键)->属性->安全性->服务器身份验证修改为"SQL SERVER和WINDOWS身份验证模式";展开服务器上的"安全性"->登陆名->选中SA登陆帐号(右键)->状态->登陆修改为启用;重启Sql Server服务即可。(注:必须重启才能见效);重启Microsoft SQL Server Management Studio(不是必须的)。

问题描述:在登录时无法打开默认数据库

解决方法:

此问题与上一个问题有所关联。是没有设置“用户映射”数据库。用另外一个可用的用户登录,然后选择“安全性”——“登录名”——“用户映射”,选择一个数据库。

问题描述:使用新建的账户登录之后发现数据库中只有系统数据库,刷新提示“无法为该请求检索数据”

解决方法:使用具有sysadmin权限的账户登录,然后在“安全性”——“登录名”中右键点新用户的用户名,在弹出的“登录属性”对话框中选择“服务器角色”,选择“sysadmin”。此时刷新新用户,就会看到其他的数据库。如果要设置新用户的owner,则在“登录属性”对话框中选择“用户映射”,选中要设置的数据库,选中下面的“db_owner”即可。

3.2.4 创建一个新账户

在一个具有sysadmin权限的账户中点击“安全性”——“登录名“右键点击,然后在用户名一栏输入用户名,选择Windows认证或者Sql Server认证,然后输入密码(Windows认证不需要),取消密码过期一项,在最底下选择数据库和语言,然后确认。

IV. Java与Oracle数据库

4.1 加载驱动

该驱动所在位置是:

Oracle安装目录——Ora92——lib——ojdbc14.jar

注:如果不加载驱动,则异常为:java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

4.2 连接代码

CODE:

public Oracle() {
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            String url = "jdbc:oracle:thin:@localhost:1521:Jason";
            String user = "scott";
            String password = "tiger";
            con = DriverManager.getConnection(url, user, password);
            stat = con.createStatement();
            String sql = "select * from emp";
            rs = stat.executeQuery(sql);
            while(rs.next()) {
                System.out.println(rs.getString(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stat != null) {
                    stat.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
}

V. Java与My SQL

5.1 加载驱动

加载驱动:mysql-connector-java-5.1.5-bin.jar

5.2 代码

CODE;

public testMySql() {
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/datang";
            String user = "root";
            String password = "admin";
            con = DriverManager.getConnection(url, user, password);
            stat = con.createStatement();
            String sql = "select * from t_admin";
            rs = stat.executeQuery(sql);
            while (rs.next()) {
                System.out.println(rs.getString(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stat != null) {
                    stat.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
}

Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决的更多相关文章

  1. SQL Server,MySQL,Oracle三者的区别

    SQL Server,MySQL,Oracle三者的区别 2016-10-14 转自:SQL Server,MySQL,Oracle三者的区别 目录 1 Oracle.Sql Server.MySql ...

  2. 数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接

    前言 DataGrip:Jet Brains出品的一款数据库管理工具(没错,是Jet Brains出品,必属精品).DataGrip整合集成了当前主流数据库(如:SQL Server, MySQL, ...

  3. asp.net连接SQL server,SQLLite,Oracle,Access数据库

    asp.net中连接数据库有两种方式为appSettings和connectionStrings connectionStrings比较常用,所以只讲一下connectionStrings方式的连接 ...

  4. JMeter配置JDBC测试SQL Server/MySQL/ORACLE

    一.配置SQL Server 1.下载sql驱动,将sqljdbc4.jar放到JMeter安装目录/lib下. 2.启动JMeter,右键添加->配置文件->JDBC Connectio ...

  5. SQL Server,MySql,Oracle数据库的默认端口号

    SQL Server默认端口号为:1433 MySQL 默认端口号为:3306 Oracle 默认端口号为:1521

  6. sql server,mysql,oracle平时用法的区别

    由于工作的原因,上家公司一直使用的oracle,后来接触了的几个项目,既有使用mysql的又有使用sqlserver,自己在使用sqlserver及mysql要实现某功能时,经常要在网上找来找去,所以 ...

  7. Windows 2008服务器环境PHP连接SQL Server数据库的配置及连接方法

    背景: PHP程序常用的数据库是Mysql数据库,但是由于实际项目需要,要求PHP网站连接SQL Server数据库查询一些必要信息.因此,本文就来给大家介绍一下如何安装及配置PHP扩展,可以实现PH ...

  8. sql server 2008启动时:已成功与服务器建立连接,但是在登录过程中发生错误。(provider:命名管道提供程序,error:0-管道的另一端上无任何进程。)(Microsoft SQL Server,错误:233) 然后再连接:错误:18456

    问题:sql server 2008启动时:已成功与服务器建立连接,但是在登录过程中发生错误.(provider:命名管道提供程序,error:0-管道的另一端上无任何进程.)(Microsoft S ...

  9. SQL Server、Oracle和MySQL判断NULL的方法

    SQL Server.Oracle和MySQL判断NULL的方法 本文讲述SQL Server.Oracle.MySQL查出值为NULL的替换. 在SQL Server Oracle MySQL当数据 ...

随机推荐

  1. # 20145106 《Java程序设计》第4周学习总结

    教材学习内容总结 翻开第六章的书,发现书中的例子居然是"假设我正在开发一款rpg游戏" public class Magician extends Role { public vo ...

  2. linux下查看cpu核心数

    1.查看物理CPU个数 cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l 2.查看每个物理CPU含有的core个数 cat ...

  3. SPOJ BALNUM Balanced Numbers(数位DP+状态压缩)题解

    思路: 把0~9的状态用3进制表示,数据量3^10 代码: #include<cstdio> #include<map> #include<set> #includ ...

  4. NOIP2016 “西湖边超萌小松鼠” 模拟赛

    总的来说,这套题的难度比较接近近些年来Day1的真实难度,认为非常值得一打 GotoAndPlay 题目大意 询问这个图上是否存在一种跳法,能跳到这个图上的每一个点 题目解析 犯了个低级错误,双向边忘 ...

  5. UVa 11889 最小公倍数

    https://vjudge.net/problem/UVA-11889 题意: 输入两个整数A和C,求最小的整数B使得lcm(A,B)=C. 思路: 首先C是A的公倍数,如果C%A不为0肯定是无解的 ...

  6. Codeforces Round #381 (Div. 2) D. Alyona and a tree dfs序+树状数组

    D. Alyona and a tree time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  7. QtTcp_资料

    1.百度搜索关键字“Qt TCP” 2. 2.1.Qt学习之路_5(Qt TCP的初步使用) http://www.cnblogs.com/tornadomeet/archive/2012/06/30 ...

  8. nodejs使用multiparty模块实现文件上传(另附express.bodyParser()的说明)

    最近师弟师妹们在用formidable做文件上传的时候会出现form.parse()不会触发的问题,在stackoverflow也没有找到答案,反而是几个答案推荐使用multiparty来代替,因为那 ...

  9. JSP 日期处理

    JSP 日期处理 使用JSP最重要的优势之一,就是可以使用所有Java API.本章将会详细地讲述Java中的Date类,它在java.util包下,封装了当前日期和时间. Date类有两个构造函数. ...

  10. org.springframework.beans.factory.BeanCreationException: sqlSessionFactory

    sqlSessionFactory实例化错误 pom默认导入的jar包中存在低版本,导致实例化sqlSessionFactory错误,删除此jar包即可