您好,欢迎访问一九零五行业门户网

JAVA连接ACCESS、MYSQL、SQLSEVER、ORACLE数据库

. 概述 1.1 jdbc 概念 jdbc(java database connectivity) 是 java 语言为了支持 sql 功能而提供的与数据库连接的用户的接口, jdbc 中包括了一组由( java )语言书写的接口和类,它们都是独立于特定的 dbms, 或者说他们可以和各种数据库相关联。 1.2 jdbc
. 概述
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用于执行对一个数据库内嵌过程的调用。
       面向底层的jdbcdriver 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。按照以下步骤:
(注意:如果你的操作系统是64位的,而eclipse是32位的,此时你也应该用32位的odbc,方法是:运行 c:\windows\syswow64\odbcad32.exe 。 因为控制面板中打开的odbc数据管理器默认是64位的。 否则会报错:[microsoft][odbc 驱动程序管理器] 在指定的 dsn 中,驱动程序和应用程序之间的体系结构不匹配。)
控制面板——管理工具——数据源(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 booleanlinkbyusingaccess() { 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(); returnfalse; } 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 voidtestsqlserver() { 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; stringpassword = 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 externaljars..然后选择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版本显示为sqlserver(express))。
提示信息:com.microsoft.sqlserver.jdbc.sqlserverexception:用户 'javadb'登录失败。
分析:程序能够运行到此,证明数据库加载正确。
解决方法:
用户名或密码错误;数据库中不存在此用户。
3.2.3 ss数据库错误:
提示信息:已成功与服务器建立连接,但是在登录过程中发生错误。   (provider:  共享内存提供程序,   error:   0   -  管道的另一端上无任何进程。) 
解决方法:
选中服务器(右键)->属性->安全性->服务器身份验证修改为sql server和windows身份验证模式;展开服务器上的安全性->登陆名->选中sa登陆帐号(右键)->状态->登陆修改为启用;重启sql server服务即可。(注:必须重启才能见效);重启microsoft sql server managementstudio(不是必须的)。
问题描述:在登录时无法打开默认数据库
解决方法:
此问题与上一个问题有所关联。是没有设置“用户映射”数据库。用另外一个可用的用户登录,然后选择“安全性”——“登录名”——“用户映射”,选择一个数据库。
问题描述:使用新建的账户登录之后发现数据库中只有系统数据库,刷新提示“无法为该请求检索数据”
解决方法:使用具有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:publicoracle() { 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; stringpassword = 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;publictestmysql() { 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; stringpassword = 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(); } }}
其它类似信息

推荐信息