我们在开发JavaWeb项目时,常会需要连接数据库。我们以MySQL数据库为例,IDE工具为eclipse,讲述数据库连接与基本操作。

第一步,我们在Web项目的WebContent中建一个简单的前端页面login.html,内容如下:

<!DOCTYPE html> 
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页</title>
</head>
<body>
    <p>
        请登录
    </p>
    <form action="LoginServlet" method="post">
        <p><input type="text" placeholder="请输入用户名" name="username"> </p>
        <p><input type="password" placeholder="请输入密码" name="userpwd"> </p>
        <p><input type="submit" value="登录"> </p>
    </form>
</body>
</html>

接着,我们修改WebContent--->WEB-INF中的web.xml,对里面的配置做如下修改:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <welcome-file-list>
        <welcome-file>login.html</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.itszt.demo.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>
</web-app> 

第二步,我们在Web项目的WebContent--->WEB-INF中看有无名称为lib的文件夹,若没有则建立一个名称为lib的文件夹,若有则使用该文件夹,然后将mysql驱动文件拷贝到lib文件夹里,将其添加到引用库。同时,在Java Resources--->src中建立名称为db-config.properties的属性配置文件,该文件内容为:

db.DRIVER=com.mysql.jdbc.Driver
db.URL=jdbc:mysql://localhost:3306/itszt2
db.USERNAME=root
db.PASSWROD=2017

第三步,我们在Java Resources--->src中分别建立两个文件夹com.itszt.demo和com.itszt.utils,在com.itszt.demo文件夹中创建一个名称为LoginServlet.java的Servlet文件,用以接收与处理前端页面传来的数据;在com.itszt.utils里创建一个名称为Util_1_JDBC.java的工具类文件,用以处理数据库连接。

Util_1_JDBC.java文件内容如下:

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
import java.util.ResourceBundle;
/**
 * 连接数据库,以及释放资源
 */
public abstract class Util_1_JDBC {
    private static String DB_DRIVER=null;
    private static String DB_URL=null;
    private static String DB_USER=null;
    private static String DB_PASSWORD=null;
    //注册mysql驱动
    static {
    //也可以采用ResourceBundle来解析与读取属性文件里的配置信息;我们在此采用Properties类加载属性文件
//        ResourceBundle bundle = ResourceBundle.getBundle("db-config");
//        String DB_DRIVER=bundle.getString("db.DRIVER");
//      ...
        Properties properties=new Properties();
        InputStream resourceAsStream = Util_1_JDBC.class.getClassLoader().getResourceAsStream("db-config.properties");
        try {
            properties.load(resourceAsStream);
            String DB_DRIVER = properties.getProperty("db.DRIVER");
            String DB_URL = properties.getProperty("db.URL");
            String DB_USER = properties.getProperty("db.USERNAME");
            String DB_PASSWORD = properties.getProperty("db.PASSWROD");
        } catch (IOException e) {
            throw new RuntimeException("读取属性文件失败!");
        }
        try {
            Class.forName(DB_DRIVER);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException("注册驱动失败!");
        }
    }
    /**
     * 打开与数据库的连接
     * @return 一个连接对象
     */
    public static Connection openConnection(){
        try {
            return DriverManager.getConnection(DB_URL,DB_USER,DB_PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    //释放资源
    public static void release(Connection connection, Statement statement, ResultSet resultSet){
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

我们再来看LoginServlet.java的内容:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@WebServlet(name = "LoginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String username = request.getParameter("username");
        System.out.println("username="+username);
        String userpwd = request.getParameter("userpwd");
        System.out.println("userpwd="+userpwd);
        PreparedStatement statement=null;
        ResultSet resultSet=null;
        //1.不采用数据源连接池,需要频繁建立与数据库的连接与释放资源
Connection connection = UtilJDBC.openConnection();
        try {
        statement=connection.prepareStatement("SELECT * FROM users where username=? AND  userpwd=?");
        statement.setString(1,username);
        statement.setString(2,userpwd);
        resultSet = statement.executeQuery();
        if(resultSet.next()){//判断查询结果集中有无数据,有则表示存在;也可以用resultSet.hasNext()判断
            System.out.println("登录成功!");
        }else{
            System.out.println("登录失败!");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        Util_1_JDBC.release(connection,statement,resultSet);
    }

}

     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    doPost(request, response);
    }
}

另外,数据库名称为itszt2,要访问的表users的结构为:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `userpwd` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

该表中存了一条数据,即(“xiaoming”,123456)。

JavaWeb之原生数据库连接的更多相关文章

  1. JDBC原生数据库连接

    我们在开发JavaWeb项目时,常会需要连接数据库.我们以MySQL数据库为例,IDE工具为eclipse,讲述数据库连接与基本操作. 第一步,我们在Web项目的WebContent中建一个简单的前端 ...

  2. MVC设计模式((javaWEB)在数据库连接池下,实现对数据库中的数据增删改查操作)

    设计功能的实现: ----没有业务层,直接由Servlet调用DAO,所以也没有事务操作,所以从DAO中直接获取connection对象 ----采用MVC设计模式 ----采用到的技术 .MVC设计 ...

  3. JavaWeb之数据源连接池(1)---DBCP

    何为数据源呢?也就是数据的来源.我在前面的一篇文章<JavaWeb之原生数据库连接>中,采用了mysql数据库,数据来源于mysql,那么mysql就是一种数据源.在实际工作中,除了mys ...

  4. JDBC数据源连接池(1)---DBCP

    何为数据源呢?也就是数据的来源.我在前面的一篇文章<JDBC原生数据库连接>中,采用了mysql数据库,数据来源于mysql,那么mysql就是一种数据源.在实际工作中,除了mysql,往 ...

  5. 将js进行到底:node学习9

    node.js数据库篇--Mongoose ODM 介绍mongoose 几乎所有的语言都有原生数据库连接驱动,这个我们上一回已经了解了,比如java的jdbc,mysql-connector,但是实 ...

  6. 去哪网实习总结:如何配置数据库连接(JavaWeb)

    本来是以做数据挖掘的目的进去哪网的,结构却成了系统开发.. . 只是还是比較认真的做了三个月,老师非常认同我的工作态度和成果. .. 实习立即就要结束了.总结一下几点之前没有注意过的变成习惯和问题,分 ...

  7. idea创建javaweb原生项目

    使用idea创建javaweb项目 idea还是写框架项目比较爽,原生的javaweb项目不是特别方便,这篇文章就是记录一下创建的过程 图较多注意流量 选择创建web项目 配置tomcat服务器 配置 ...

  8. java使用原生MySQL实现数据的增删改查以及数据库连接池技术

    一.工具类及配置文件准备工作 1.1 引入jar包 使用原生MySQL,只需要用到MySQL连接的jar包,maven引用方式如下: <dependency> <groupId> ...

  9. JavaWeb学习总结(十三)--数据库连接池

    一.数据库连接池的概念 用池来管理Connection,这可以重复使用Connection.有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象.当使用完Co ...

随机推荐

  1. 吞吐量(TPS)、QPS、并发数、响应时间(RT)概念

    开发的原因,需要对吞吐量(TPS).QPS.并发数.响应时间(RT)几个概念做下了解,查自百度百科,记录如下:1. 响应时间(RT)  响应时间是指系统对请求作出响应的时间.直观上看,这个指标与人对软 ...

  2. 如何用while循环 输出一个九九乘法表

    方法一 i = 1 while i < 10: k = 1 while k <= i: print('%d*%d=%2d '% (i,k,i*k),end='') #end='' 表示不换 ...

  3. 前端面试题:css相关面试题

    CSS 选择器中,元素选择器和类选择器的区别是什么? 元素选择器是最常见的 CSS 选择器,即,文档的元素就是最基本的选择器.选择器通常是某个 HTML 元素,比如 <p>.<h1& ...

  4. struts2 action接收请求参数和类型转换

    1,action接收请求参数 在struts2中action是什么?(struts2是一个mvc框架)         V:jsp        M:action         C:action  ...

  5. nginx反向代理node.js获取客户端IP

    使用Nginx做node.js程序的反向代理,会有这么一个问题:在程序中获取的客户端IP永远是127.0.0.1 如果想要拿到真实的客户端IP改怎么办呢? 一.首先配置Nginx的反向代理 proxy ...

  6. (12.05)Java小知识!

     今天与大家分享关于抽象类的知识点. 抽象类: 抽象类应用场景:在某种情况下,某个父类只是知道子类应该包含怎样的方法,但无法准确的知道这些子类如何实现这些方法. 从多一个具有相同特征的类中抽象出一个抽 ...

  7. Numpy入门 - 数组聚合运算

    本节主要讲解numpy的几个常用的聚合运算,包括求和sum.求平均mean和求方差var. 一.求和sum import numpy as np arr = np.array([[1, 2, 3], ...

  8. 关于如何在微信里面让video不全屏播放

    发现一个更简单的解决方法,加上一条属性即可.x5-video-player-type="h5″.通过设置这个属性,让video开启同层H5播放器.另外在X5内核里,video是单独的一个vi ...

  9. memcached 缓存数据库应用实践

    1.1 数据库对比 缓存: 将数据存储到内存中,只有当磁盘胜任不了的时候,才会启用缓存   缺点:断电数据丢失(双电),用缓存存储数据的目的只是为了应付大并发的业务. 数据库: mysql(关系型数据 ...

  10. Mysql实现企业级日志管理、备份与恢复实战

    背景 随着业务的发展,公司业务和规模不断扩大,网站积累了大量的用户信息和数据,对于一家互联网公司来说,用户和业务数据是根基.一旦公司的数据错乱或者丢失,对于互联网公司而言就等于说是灭顶之灾,为防止系统 ...