데이터 베이스 MySQL 튜토리얼 JAVA连接ACCESS、MYSQL、SQLSEVER、ORACLE数据库_MySQL

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

Jun 01, 2016 pm 01:07 PM

.概述

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。按照以下步骤:

控制面板——管理工具——数据源(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.3JDBC 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.2MyEclipse异常

提示信息: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.3SS数据库错误:

提示信息:已成功与服务器建立连接,但是在登录过程中发生错误。   (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();			}		}}
로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Alter Table 문을 사용하여 MySQL에서 테이블을 어떻게 변경합니까? Alter Table 문을 사용하여 MySQL에서 테이블을 어떻게 변경합니까? Mar 19, 2025 pm 03:51 PM

이 기사는 MySQL의 Alter Table 문을 사용하여 열 추가/드롭 테이블/열 변경 및 열 데이터 유형 변경을 포함하여 테이블을 수정하는 것에 대해 설명합니다.

MySQL 연결에 대한 SSL/TLS 암호화를 어떻게 구성합니까? MySQL 연결에 대한 SSL/TLS 암호화를 어떻게 구성합니까? Mar 18, 2025 pm 12:01 PM

기사는 인증서 생성 및 확인을 포함하여 MySQL에 대한 SSL/TLS 암호화 구성에 대해 설명합니다. 주요 문제는 자체 서명 인증서의 보안 영향을 사용하는 것입니다. [문자 수 : 159]

MySQL에서 큰 데이터 세트를 어떻게 처리합니까? MySQL에서 큰 데이터 세트를 어떻게 처리합니까? Mar 21, 2025 pm 12:15 PM

기사는 MySQL에서 파티셔닝, 샤딩, 인덱싱 및 쿼리 최적화를 포함하여 대규모 데이터 세트를 처리하기위한 전략에 대해 설명합니다.

인기있는 MySQL GUI 도구는 무엇입니까 (예 : MySQL Workbench, Phpmyadmin)? 인기있는 MySQL GUI 도구는 무엇입니까 (예 : MySQL Workbench, Phpmyadmin)? Mar 21, 2025 pm 06:28 PM

기사는 MySQL Workbench 및 Phpmyadmin과 같은 인기있는 MySQL GUI 도구에 대해 논의하여 초보자 및 고급 사용자를위한 기능과 적합성을 비교합니다. [159 자].

드롭 테이블 문을 사용하여 MySQL에서 테이블을 어떻게 드롭합니까? 드롭 테이블 문을 사용하여 MySQL에서 테이블을 어떻게 드롭합니까? Mar 19, 2025 pm 03:52 PM

이 기사에서는 Drop Table 문을 사용하여 MySQL에서 테이블을 떨어 뜨리는 것에 대해 설명하여 예방 조치와 위험을 강조합니다. 백업 없이는 행동이 돌이킬 수 없으며 복구 방법 및 잠재적 생산 환경 위험을 상세하게합니다.

외국 키를 사용하여 관계를 어떻게 표현합니까? 외국 키를 사용하여 관계를 어떻게 표현합니까? Mar 19, 2025 pm 03:48 PM

기사는 외국 열쇠를 사용하여 데이터베이스의 관계를 나타내고 모범 사례, 데이터 무결성 및 피할 수있는 일반적인 함정에 중점을 둡니다.

JSON 열에서 인덱스를 어떻게 생성합니까? JSON 열에서 인덱스를 어떻게 생성합니까? Mar 21, 2025 pm 12:13 PM

이 기사에서는 PostgreSQL, MySQL 및 MongoDB와 같은 다양한 데이터베이스에서 JSON 열에서 인덱스를 작성하여 쿼리 성능을 향상시킵니다. 특정 JSON 경로를 인덱싱하는 구문 및 이점을 설명하고 지원되는 데이터베이스 시스템을 나열합니다.

일반적인 취약점 (SQL 주입, 무차별 적 공격)에 대해 MySQL을 어떻게 보호합니까? 일반적인 취약점 (SQL 주입, 무차별 적 공격)에 대해 MySQL을 어떻게 보호합니까? Mar 18, 2025 pm 12:00 PM

기사는 준비된 명령문, 입력 검증 및 강력한 암호 정책을 사용하여 SQL 주입 및 무차별 적 공격에 대한 MySQL 보안에 대해 논의합니다 (159 자)

See all articles