JDBC连接数据库

[2014/07/07]在学习JDBC的时候,无论是数据库的安装与配置,还是JDBC驱动的问题,感觉力不从心,时间浪费了不少,效果却是一般。故写下这篇博文,作为以后工作的参考,免得以后再次陷入一些silly mistakes。本博文将会持续更新。另外,得找个时间系统地学习一两个数据库才行。

[2014/07/27]本来已经写好了Ucanaccess的连接方法的,由于实习的事还是耽搁了一阵子,驱动都已经更新版本了,所以也更新一下。

[2014/07/29]总算写完了四个,以后学习其他数据库时再补充。

一、连接Access数据库

题外话:Access数据库大家应该都听说过,但是实际上用得比较少,一般适合非计算机专业的人士使用。就像微软其他office软件一样,入门比较简单。一般来说,JDBC连接Access数据库可以采用JDBC-ODBC Bridge的方法。但是,自从JDK8不再支持JDBC-ODBC驱动,而微软也还没公布相关的解决方案,连接Access变得比较麻烦了。不过许多开源组织与开发者都提供了一些相关的JAR包专门用于JDBC连接Access,这里推荐一个:Ucanaccess。感觉Ucanaccess用起来挺方便的,最重要的是作者一直都在维护,如果发现bug随时都可以report。如果实在要用JDBC-ODBC驱动的话,我会建议将JDK8降为JDK7,但这并不是一个长久的方法。

数据库:Access2013

驱动:Ucanaccess

配置:将Ucanaccess的JAR包以及相关的依赖包(一共5个JAR包)放置在<项目主目录>/WEB-INF/lib目录下(或%CATALINA_HOME%/lib目录下)

样例数据库文件:demo.mdb

样例JSP代码:

<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb2312"%>
<%@ page import="java.sql.*"%>
<html>
	<body>
		<center>
			<h1>用户信息</h1>
			<table border="1">
				<tr>
					<th>用户名</th>
					<th>密码</th>
					<th>姓名</th>
					<th>性别</th>
					<th>地址</th>
				</tr>
				<%
					Connection conn = null;
					try {
						Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");	
						String url = "jdbc:ucanaccess://" + application.getRealPath("/chap13/demo.mdb");
						conn = DriverManager.getConnection(url, "", "");
					} catch (ClassNotFoundException e) {
						e.printStackTrace();
					} catch (SQLException e) {
						e.printStackTrace();
					}
					String sql = "select fuser,pwd,fname,sex,address from tuser";
					Statement stmt = conn.createStatement();
					ResultSet rs = stmt.executeQuery(sql);
					while (rs.next()) {
				%>
						<tr>
							<td><%=rs.getString(1)%></td>
							<td><%=rs.getString(2)%></td>
							<td><%=rs.getString(3)%></td>
							<td><%=rs.getString(4)%></td>
							<td><%=rs.getString(5)%></td>
						</tr>
				<%
					}	
				%>
			</table>
		</center>
	</body>
</html>

大坑:保证提供的数据库文件是个有效的文件。我曾经在mdb文件里的表中设置了一个user属性,结果连接的时候,响应的时候页面返回user的值竟然全部都是连接数据库的用户名(由于我连接数据库的用户名和密码均为空串,所以得到的值也变成了空串)。最坑的是,Access没有提醒我这个问题(设置name属性时倒是提醒了)。所以建议表中的属性还是不要设置常见的关键字。

二、连接MySQL数据库

题外话:MySQL数据库是最常用的开源数据库之一,但是自从被Oracle收购以后更新速度大大减慢。为了规避MySQL被闭源的风险,原作者另外又创立了MariaDB,基本兼容MySQL,这里推荐一下。说实话,MySQL数据库应该是我目前用过的操作最简便,支持性最好的数据库了。在官网上,各种驱动都能在下载页面找到最新版本,不需要在网上到处搜。

数据库:MySQL5.7

驱动:Connector J

配置:只需要将JDBC的JAR包放置在<项目主目录>/WEB-INF/lib目录下(或%CATALINA_HOME%/lib目录下)

命令:net start mysql57

样例数据库实例:shop

样例JSP代码:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ page import="java.sql.*"%>
<%
    Connection conn = null;
    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        String user = "root";
        String password = "root";
        String url = "jdbc:mysql://localhost/shop?useunicode=true&characterEncoding=gbk";
        conn = DriverManager.getConnection(url, "root", "root");
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
%>

注意:在连接数据库以前别忘了开启数据库服务。可以在计算机(右键)->管理->服务中找到MySQL57并开启。

三、连接SQL Server数据库

题外话:SQL Server是微软推出的商用数据库,在使用方面延续了微软产品的特点。在前些年,SQL Server的更新周期比较长,因此失去了一些数据库市场的份额。于是现在的更新周期基本上维持在1~2年,而且增加了很多很炫酷的新特性。但是,不得不吐槽的是,SQL Server在安装与配置方面提供的官方支持出其意料的差,本人安装了三四次才成功安装与配置好SQL Server2014,期间在MSDN,StackOverflow等寻求了各种支持,但仍然 不得其解,详情请浏览后面的吐槽。

数据库:SQL Server2014

驱动:Microsoft JDBC Driver 4.0 for SQL Server

配置:经验证,必须将JAR包放置在%JAVA_HOME%/jre/lib/ext中才能加载驱动。

命令:net start mssqlserver

样例数据库实例:pubs

样例JSP代码:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ page import="java.sql.*"%>
<%
    String url = "jdbc:sqlserver://localhost:1433;DatabaseName=pubs";
    String user = "sa";
    String password = "";
    Connection con = DriverManager.getConnection(url, user, password);
%>
吐槽:由于可以吐槽的地方不是一般的多,而是非常非常多,所以还是分点说明吧。

T1:首先,虽然微软为了增加SQL Server的竞争力,将更新周期大大缩短,但是在兼容性方面却非常的差,比如,如果安装了SQL Server2014之前的版本,将无法成功安装SQL Server2014;如果安装了SQL Server2012之前的版本,将无法成功安装SQL Server2012,如此类推。简而言之,如果你想使用最新版的SQL Server,必须将以前的SQL Server完全卸载(别忘了注册表),也有其他的可选方案,重装系统或者使用虚拟机。虽然微软提供了相关的解决方案的工具,但是作用不大(准确来说是毫无作用,否则我为啥在这里吐槽?)。这一点是网络上众网友贡献的真理。另外,SQL Server不仅版本兼容性差,而且与Visual Studio也可能造成冲突。所以,为了万无一失,请在安装SQL Server前也把Visual Studio卸掉。

T2:其次,安装程序设计奇差。我不会抱怨完全安装所有组件需要花费超过半个钟的时间,如果一次就能成功的话。安装过程包含配置过程,如果不熟悉的话最好对照着MSDN的安装教程。这里建议一次只安装一个组件,先安装数据库引擎。因为如果你安装失败的话,你还要花费超过半个钟的时间来完全卸载所有组件。好了,这里先不说窍门,先谈谈失败案例。在对照着各种教程进行配置后,我安装的数据库引擎等5个组件总是失败。错误信息MS跟句柄返回超时相关的。于是,顺着错误代码提供的支持,可以很吃惊的发现所谓的错误信息页面竟然是空的!!!不提供帮助也就算了,给个空页面来掩盖住自己应该做但不做的工作,这是所谓的技术支持?

T3:好了,这里提点真正要注意的地方了。安装SQL Server需要本地管理员权限,所以最好以管理员身份登录系统后再安装,或者以管理员身份运行安装程序。尽管这么做了,你也不一定能够安装成功。在各种搜教程和领悟后总结为仍然是权限问题,在数据库配置的过程中将SQL Server Database Engine和 SQL Server Agent的账户名设置为NT AUTHORITY\SYSTEM才能成功。当然,安装后可以将账户名修改会默认账户。这一点也是我认为一直以来安装失败的主要原因。如果需要更详细的关于安装过程的帮助,推荐这篇教程,里面还有许多教程的链接:http://social.technet.microsoft.com/wiki/contents/articles/24364.sql-server-troubleshooting-could-not-find-database-engine-startup-handle-error-during-installation.aspx

T4:最后,看了若干SQL Server用户的安装教程和吐槽,自己也吐槽几句,一款产品除了需要满足用户的需求以外,提供相关的技术支持和帮助文档对于用户体验也是极其重要的。像SQL Server这样各种不兼容,安装错误说明只有空页面来装门面,连像样的官方补丁或说明都没有,网络上一堆基本无效的用户解决方案满天飞,却没有相关技术支持人员的有效解决方案的回答,正如一名用户所质疑的说:这样的产品是怎么通过alpha测试的?

四、连接Oracle数据库

题外话:Oracle是目前市场上技术最成熟,市场份额最大的数据库,所以学习Oracle数据库对于开发者来说是非常必要的。Oracle的众多产品对于开发者一般都是免费的,如果用于商业用途才需要购买对应的license。

数据库:Oracle11gR2

驱动:OJDBC5/OJDBC6

配置:只需要将%ORACLE_HOME%/jdbc/lib下的所有JAR包放置在<项目主目录>/WEB-INF/lib目录下(或%CATALINA_HOME%/lib目录下)

命令:net start oracleserviceorcl & lsnrctl start & emctl start dbconsole

样例数据库实例:orcl

样例JSP代码:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="java.sql.*"%>
<%
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    String url = "jdbc:oracle:thin:@localhost:1521:orcl";
    String user = "scott";
    String password = "tiger";
    Connection conn = DriverManager.getConnection(url, user, password);
%>

参考设置:(环境变量)

ORACLE_HOME=D:\app\Scott\product\11.2.0\dbhome_1

ORACLE_HOSTNAME=localhost

ORACLE_SID=orcl

ORACLE_UNQNAME=orcl

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值