你这应该是一个用户注册程序吧。
首先确定一下你的程序逻辑:
当用户提交注册信息时首先使用CheckUser(userBean set)来判断要注册的用户是否已存在,如果不存在则接着调用Insert(userBean set )将用户注册信息保存到数据库中。如果你程序是按这个逻辑不处理的话自然的,这个程序会报如上错误。
原因:
当执行CheckUser(userBean set)后,程序会将数据库连接关闭,而当程序接着执行下面的Insert(userBean set )时,会因为之前奖数据库连接关闭而无法完成数据库 *** 作。
解决办法有二:
1、将CheckUser(userBean set)方法里的connclose(); 去掉;
2、你这里将获得连接资源的代码放在构造函数里,它只调用一次。因此你可以将数据连接代码使用一个新的方法来封装,每一个用到数据库连接的方法单独调用该方法。
如:
public Connection getConnection(){
try {
ClassforName("commicrosoftjdbcsqlserverSQLServerDriver");
} catch (ClassNotFoundException e) {
// TODO 自动生成 catch 块
eprintStackTrace();
}
try {
thisconn = DriverManager
getConnection(
"jdbc:microsoft:sqlserver://localhost:1433;databasename=Web_Test","sa","sa");
} catch (SQLException e) {
// TODO 自动生成 catch 块//
eprintStackTrace();
}
return thisconn
}
这样你在方法里可通过下面的方法获取连接。
conn = getConnection();
因此你的CheckUser(userBean set)可改成如下:
public boolean CheckUser(userBean set){
try {
conn = getConnection(); //这里是给你修改的
pstm = connprepareStatement("select userPWD from userInfo where userName= ");
pstmsetString(1,setgetUserName());
rs = pstmexecuteQuery();
if (rsnext()) {
if (rsgetString(1)equals(setgetUserPassword())){
return true;
}
}
connclose();
pstmclose();
rsclose();
} catch (SQLException e) {
// TODO 自动生成 catch 块
eprintStackTrace();
}
return false;
}
其它方法也是一样。
请问下是什么结构?用jdbc连接的话:
public class DBUtil {
private static String user;
private static String password;
private static String url;
static{
Properties prop=new Properties();
try {
ClassLoader classLoader=DBUtilclassgetClassLoader();
InputStream is=classLoadergetResourceAsStream("dbproperties");
propload(is);
user=propgetProperty("user");
password=propgetProperty("password");
url=propgetProperty("url");
ClassforName("commysqljdbcDriver");
} catch (Exception e) {
eprintStackTrace();
throw new RuntimeException("找不到加载类");
}
}
public static Connection getConnection()throws Exception{
Connection conn=null;
conn=DriverManagergetConnection(url,user,password);
return conn;
}
public static void close(Connection conn){
if(conn!=null){
try {
connclose();
} catch (SQLException e) {
eprintStackTrace();
}
}
}
public static void main(String[] args)throws Exception {
Systemoutprintln(DBUtilgetConnection());
}
}
如果是用SSH架构的话,用hibernate里面去配置就OK了!
eclipse,我用的是eclipse,也可以用其他的开发工具。
tomcat,tomcat是用来做服务器的,如果eclipse还没有配置tomcat服务器,就要先配置好tomcat服务器。
MySQL,本文用的是MySQL数据库,读者也可以尝试用其他的数据库,但是连接驱动就要换成相应数据库的连接驱动。
连接驱动 mysql-connector-java-3114-binjar,可以从网上下载。
方法/步骤
打开eclipse,菜单栏下,File-new,打开Dynamic Web Project,创建一个jsp project,为方便起见,本文直接在jsp页面里写java代码进行数据库的连接。。大部分网友应该都可以看懂这段代码的涵义,这里就不赘述了。
其中需要注意的是 String url="jdbc:mysql://localhost:3306/mydb" 其中的3306是MySQL安装时的端口号,默认的是3306,如果你安装MySQL时更改了端口号就要在这里填写你更改的端口号。下面是我的jsp文档
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="javasqlConnection" %>
<%@page import="javasql" %>
<%@page import="javasqlDriverManager;" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 401 Transitional//EN" ">
<html>
<head>
<meta >
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center">
<tr>
<td>书名</td>
<td>作者</td>
</tr>
<%
String driverClass="commysqljdbcDriver";
String url="jdbc:mysql://localhost:3306/mydb";
String user="root";
String password="1234";
String a="zhangsan";
Connection conn;
try{
ClassforName(driverClass);
conn=DriverManagergetConnection(url,user,password);
Statement stmt=conncreateStatement();
String sql="select from books";
ResultSet rs=stmtexecuteQuery(sql);
while(rsnext()){
%>
<tr>
<td><%=rsgetString("bookname") %></td>
<td><%=rsgetString("writer") %></td>
</tr>
<%
}
}
catch(Exception ex){
exprintStackTrace();
}
%>
</table>
</body>
</html>
然后在这个project的WebContent\WEB-INF\lib的文件夹里添加之前提到的连接驱动 mysql-connector-java-3114-binjar,将其复制到lib的文件夹中。保存项目,然后运行,就会在网页中出现表格。
3
是不是很简单呢,希望这篇经验能够给大家带来方便。
END
注意事项
要确保在MySQL中存在mydb数据库,mydb中已创建books表格,不然会提示错误的。
jsp中加载jdbc驱动:
Java加载JDBC的实现方法:
通过调用ClassforName()方法可以显式地加载一个驱动程序。该方法的入口参数为要加载的驱动程序。例如:ClassforName("sunjdbcodbcJdbcOdbcDriver")语句加载了SUN 公司开发的JDBC-ODBC 桥接器。对数据库进行连接的时候,驱动管理器(DriverManager)会使用这个被加载的驱动程序。通过DriverManager 的getDriver()方法可以获得已经加载的驱动程序信息。程序代码要求:
1.编写useDBDriver 类的基本框架,在该类中仅包括main()方法,在main()方法中加载驱动程序。
2.程序代码如下:
public class useDBDriver
{
public static void main(String arg[])
{
try
{
//初始化并加载JDBC-ODBC 驱动程序
ClassforName("sunjdbcodbcJdbcOdbcDriver");
Enumeration enum=DriverManagergetDrivers();
//显示驱动程序信息
while(enumhasMoreElements())
{
Systemoutprintln(enumnextElement());
}
//处理加载数据库中可能出现的异常
}
catch(javalangException exec)
{
Systemoutprintln("加载数据库驱动程序出现异常");
}
}
}
3.因为程序中使用了JDBC 类和Enumeration 类,所以要引入的包有:
import javasql;
import javautil;
难得讲:
直接连接和关闭代码:
private static final String DRIVER = "commicrosoftsqlserverjdbcSQLServerDriver";// 驱动类
private static final String URL = "jdbc:sqlserver://localhost:1433;DataBaseName=paipaiDB";// 连接URL地址
private static final String USER = "sa";// 数据库用户名
private static final String PWD = "123";// 数据库用户密码
/
与数据库建立连接
@return
@throws ClassNotFoundException
@throws SQLException
/
public static Connection getCon() throws ClassNotFoundException,
SQLException {
Connection con = null;
ClassforName(DRIVER);
con = DriverManagergetConnection(URL, USER, PWD);
return con;
}
/
关闭所有与数据库的连接对象
@param res
结果集对象
@param pstat预编义对象
@param con连接对象
/
public static void closeAll(ResultSet res, PreparedStatement pstat,
Connection con) {
if (res != null) {
try {
resclose();
} catch (SQLException e) {
// TODO 自动生成 catch 块
eprintStackTrace();
}
}
if (pstat != null) {
try {
pstatclose();
} catch (SQLException e) {
// TODO 自动生成 catch 块
eprintStackTrace();
}
}
try {
if (con != null && !conisClosed()) {
conclose();
}
} catch (SQLException e) {
// TODO 自动生成 catch 块
eprintStackTrace();
}
}
以上就是关于jsp数据库连接问题全部的内容,包括:jsp数据库连接问题、jsp系统怎么连接数据库、jsp怎么连接mysql数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)