您的位置:首页 > 编程语言 > Java开发

javaWeb 简单注册登录(含数据库连接) -- (二) MySQL数据库配置和连接

2017-07-04 16:40 609 查看
因为这个项目需要使用数据库, 下面就先讲数据库连接

使用的是MySQL数据库

MySQL数据库连接

环境什么的就不讲了, 网上都有

这个“项目”使用了一个user用户表, 信息如下



先插入一条用户数据:



jdbc连接MySQL数据库:

jdbc是用来执行sql语句的java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序

使用jdbc访问MySQL数据库:

首先加载驱动程序类

然后根据url, DBMS用户和密码建立连接对象

根据该对象就可以访问数据库

加载驱动程序

首先需要包含MySQL为jdbc提供的驱动程序类的jar包, 这个包可以自己下, 事实上我最近才发现MySQL的目录里面也有这个包





新建一个项目测试数据库连接(保证MySQL服务开启):



导入jar包:

右击JRE System Library-> Build Path->Configure Build Path

点击Add Extern JARs浏览jar包的目录

TestDemo.java代码:

package jdbcTest;
import java.sql.*;
public class TestDemo {
private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/database";//协议:自协议:数据源标识
private static String user = "root";//DBMS用户
private static String pass = "password";//密码
public static void main(String[] args) throws SQLException{
try{
Class.forName(driver);//加载驱动程序类, DriverManager将注册加载的类实例
Connection conn = DriverManager.getConnection(url, user, pass);//获取连接
Statement state = conn.createStatement();
//  state.executeUpdate("delete from user where Sno like 'E%'");
ResultSet rs = state.executeQuery("select * from user");//查询
System.out.println("Sno\tUser\tPass");
while(rs.next()){
for(int i = 1; i <= 3; ++i){

System.<
4000
span class="hljs-keyword">out.print((i > 1 ? "\t" : "") + rs.getString(i));
}
System.out.println("");
}
}
catch(Exception e){
e.printStackTrace();
}
}
}


console输出:



在“项目”中实现数据库连接

问题:

注册、登录都需要对数据库进行查询或更新, 意味着都需要连接目标数据库, 如果每次都重新加载驱动获取连接处理请求的效率会很低, 如何解决?

我们知道, 对于整个web应用, 有一个servletContext对象, 能够被所有servlet访问, 所以我们把目标数据库连接对象“放”在这个对象中, 就可以在请求时直接获取连接对象了

如何“放”?

在web.xml中只能配置上下文参数, 参数能被应用中请求的servelt获取上下文对象访问, 但是参数形式为:name-value, 名和值都为字符串对象, 连接对象显然不是字符串对象

但是和数据库连接相关的驱动程序类、url、user、pass是啊, 我们是可以把他们设置成上下文参数的

那么如何何时获取Connection对象?

需要明确的是, 这个对象需要在应用加载之时就创建, 原因是它不对应任何特定的servlet, 且每个servlet有访问它的可能

所以要在应用加载时创建Connection对象, 加载应用会先读取web.xml然后为应用创建ServletContext对象, ServeletContext会获取所有上下文参数

在这里, 如果我们设置一个上下文监听者, 在上下文初始化时通知由它负责获取上下文参数, 获取连接数据库对象, 并把它设置成上下文属性, 那么在应用加载完成后, 其他servlet就能通过获取上下文对象的该属性值获取数据库的连接了.

监听者配置:

在web.xml中加入

<listener>
<listener-class>
<!-- 类名 -->adrui.MyContextListener
</listener-class>
</listener>


这样应用就知道它是一个监听者, 至于监听的对象要看它实现的接口, 显然可监听的对象分不止一种

监听者类:

package adrui;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.sql.*;
import javax.servlet.*;
//实现监听者接口
public class MyContextListener implements ServletContextListener {

@Override
//应用关闭, 销毁上下文对象之时调用
public void contextDestroyed(ServletContextEvent event){
// TODO Auto-generated method stub

}

@Override
//应用开启, 加载上下文之时调用
public void contextInitialized(ServletContextEvent event) {
// TODO Auto-generated method stub
ServletContext sc = event.getServletContext();
//获取上下文对象
String driver = sc.getInitParameter("driver");
String url = sc.getInitParameter("url");
String user = sc.getInitParameter("user");
String pass = sc.getInitParameter("pass");
//获取上下文参数(在web.xml里配置)
try{
Class.forName(driver);//加载驱动程序类
Connection conn = DriverManager.getConnection(url, user, pass);
sc.setAttribute("conn", conn);
System.out.println("Connect Succeed!");
//获取连接并设置成上下文属性, 属性名为conn
}
catch(Exception e){
e.printStackTrace();
}
}

}


可以加一些查询语句测试是否连接成功

这样就实现了数据库连接, 且每个servlet都能获取该连接对象, 并对数据库进行增删查改之类的操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐