javaWeb 简单注册登录(含数据库连接) -- (二) MySQL数据库配置和连接
来源:互联网 发布:linux监听端口 编辑:程序博客网 时间:2024/06/07 10:18
因为这个项目需要使用数据库, 下面就先讲数据库连接
使用的是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.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都能获取该连接对象, 并对数据库进行增删查改之类的操作
- javaWeb 简单注册登录(含数据库连接) -- (二) MySQL数据库配置和连接
- javaWeb 简单注册登录(含数据库连接) -- (一)页面
- javaWeb 简单注册登录(含数据库连接) -- (三) 实现用户注册请求的响应
- javaWeb 简单注册登录(含数据库连接) -- (四) 用户登录请求与响应
- javaweb-基于数据库的简单登录注册界面
- JAVA连接MySQL数据库----(常用数据库连接二)
- JAVA连接MySQL数据库----(常用数据库连接二)
- JavaWeb + mySQL + Android 实现Android简单的注册登录
- javaweb 简单 de 登录注册
- 简单的Javaweb登录注册
- JDBC连接数据库,完成注册和登录
- (javaweb(Dao 模式 和 javabean)和 数据库连接池)JDBC数据库基本知识点(二)
- JavaWeb连接数据库MySQL
- 网页注册登录数据库(二)
- ODBC + WIN32 API 访问MYSQL 数据库实现简单QQ用户注册和登录
- ODBC + WIN32 API 访问MYSQL 数据库实现简单QQ用户注册和登录 的代码分析
- JavaWeb-简单的注册登录例子
- javaweb简单的登录注册功能实现
- Spark性能优化——解决Spark数据倾斜(Data Skew)的N种姿势
- Unreal Open Day 2017整理
- IOS 本地化NSLocalizedString
- 矩阵的运算及其运算规则
- 把二叉树打印成多行
- javaWeb 简单注册登录(含数据库连接) -- (二) MySQL数据库配置和连接
- 使用TabLayout、ViewPager和Fragment实现顶部菜单可滑动切换
- Ubuntu Cleaner 为系统大瘦身
- centos6.8使用yum安装redis
- Android动态申请权限工具类
- 操作系统实验之八读者优先问题
- C++中getline函数的使用
- 工具类总结
- 基于IBM Bluemix部署Java Web项目实战演练