本文将介绍如何通过JDBC/ODBC方式连接SQL Servers 与 MyEclipe, 使得通过web修改DB内容
本文主要完成一个简单的注册系统,主要步骤 :
1. 通过SQL Server 创建DB 数据库, 用于存放用户名和密码
2. 创建网页,注册账户,将账户信息更新到步骤一创建的数据库中
下面我们一步步来完成我们的功能
1. 创建 TestDB数据库
在对象资源管理器中,右键 数据库 -> 新建数据库 -> 数据库名称 填入“TestDB” -> 确定
2. 创建 表
再对象管理器中,点击我们新建的 TestDB -> 右键 表 -> 新建 表, 填入两个列, 分别是 username 和 password
3. 保存 表
点击 保存 按钮, 将表名字保存为 login
4. 右键 我们新建立的 表 dbo.login , 编辑前200行 ,我们可以看到我们刚刚创建的空表了
5. 配置数据源
选择控制面板->管理工具->数据源-> 用户DSN -> 添加 -> 填入名称和选择数据库 -> 下一步 -> 选择SQL servers验证 -> 填入账号密码 -> 下一步 -> 勾选 更改默认的数据库 : TestDB -> 下一步 直到 完成
由于之前没有介绍SQL 的用法,所以上面写的比较详细~,接下来,我们开始写网站的内容,关于网站的搭建,可以参考之前的两篇文章 《Myeclipse配置Tomcat》 《MyEclipse下编写JSP "Hello World"》
6 . 新建 Web Project, 在package目录下新建 servlet 和 sql 两个包
7. 在sql下创建 SqlFunction.java,实现数据库访问
package sql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SqlFunction { Connection conn; ResultSet rs; ResultSet rsInput; Statement stmt; public SqlFunction(){ try {// 注册数据库驱动 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException e) { System.out.println("sql error " + e); } } public void executeUpdate(String sql) { stmt = null; rs = null; try {// 建立数据库连接 conn = DriverManager.getConnection("jdbc:odbc:TestDB", "sa", "saberhao123"); stmt = conn.createStatement(); stmt.executeUpdate(sql); } catch (SQLException e) { System.out.println("sql error" + e); } } public ResultSet executeQuery(String sql) { stmt = null; rs = null; try {// conn = DriverManager.getConnection("jdbc:odbc:TestDB", "sa", "saberhao123"); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); } catch(SQLException e) { System.out.println("sql error"+e); } return rs; } }
package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sql.SqlFunction; public class Login extends HttpServlet{ public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{ String username = request.getParameter("username"); String password = request.getParameter("password"); SqlFunction sqf = new SqlFunction(); String sql = "insert into login (username,password)values('"+username+"','"+password+"')"; sqf.executeQuery(sql); response.sendRedirect("success.jsp"); } }
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'login.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="login" method="post"> 用户名:<input type="text" name="username"> <br> 密 码:<input type="text" name="password"/> <br> <input type="image" value="注册" class="buttonface" name="Submit" src="images/zuce.gif"> </form> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'success.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> Sucess!!! <br> </body> </html>
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>login</servlet-name> <servlet-class>servlet.Login</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> </web-app>
12. 输入 http://localhost:8082/TestDB/login.jsp 进行注册,检查我们DB上的内容是否有改变
过程中遇到这样的问题
<span style="font-family:Microsoft YaHei;">sql error java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver sql errorjava.sql.SQLException: No suitable driver found for jdbc:odbc:TestDB</span>
一开始我以为是调用库的时候( Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"))大小写有问题,可是检查了很久发现不出来
原来我用的JDK1.8已经不包含了该库,你想知道自己的JDK是否支持,可以检查下 JRE下面 rt.jar 是否包含~
解决的办法就是加载这个库,或者干脆换个JDK =。=
其实JDBC/ODBC这种方法不是推荐方法,因为效率偏低,具体可以详见 Oracle 的说明
下篇文章我们将一起探讨用 微软JDBC的方法进行连接,敬请期待~
参考文章
http://blog.sina.com.cn/s/blog_654d69690100mvzt.html