我们在开发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)。

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

  1. jdbc原生操作数据库

    jdbc原生操作数据库流程: 第一步:Class.forName()加载数据库连接驱动: 第二步:DriverManager.getConnection()获取数据连接对象; 第三步:根据 SQL 获 ...

  2. JAVA jdbc获取数据库连接

    JDBC获取数据库连接的帮助类 import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManage ...

  3. 数据库连接JDBC和数据库连接池C3P0自定义的java封装类

    数据库连接JDBC和数据库连接池C3P0自定义的java封装类 使用以下的包装类都需要自己有JDBC的驱动jar包: 如 mysql-connector-java-5.1.26-bin.jar(5.1 ...

  4. JDBC 关闭数据库连接与自动提交【转】

    // Jdbc关闭数据库连接时,会隐含一个提交事务的操作 private final static String DB_DRIVER = "oracle.jdbc.driver.Oracle ...

  5. Java -- JDBC 学习--数据库连接池

    JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模式开 ...

  6. Java Web(九) JDBC及数据库连接池及DBCP,c3p0,dbutils的使用

    DBCP.C3P0.DBUtils的jar包和配置文件(百度云盘):点我下载 JDBC JDBC(Java 数据库连接,Java Database Connectify)是标准的Java访问数据库的A ...

  7. 基于JDBC的数据库连接池技术研究与应用

    引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开 ...

  8. 在IDEA中使用JDBC获取数据库连接时的报错及解决办法

    在IDEA中使用JDBC获取数据库连接时,有时会报错Sat Dec 19 19:32:18 CST 2020 WARN: Establishing SSL connection without ser ...

  9. jdbc java数据库连接 3)Statement接口之执行DDL和DML语句的简化

    上一章的代码中,可以发现,jdbc执行DDL和DML有几个步骤都是一样的: 1)执行语句开始时,创建驱动注册对象.获取连接的数据库对象.创建Statement对象 // 创建驱动注册对象 Class. ...

随机推荐

  1. 2017中国大学生程序设计竞赛-哈尔滨站 A - Palindrome

    Palindrome Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tota ...

  2. P2805 [NOI2009]植物大战僵尸(最小割+拓扑排序)

    题意: n*m的矩阵,每个位置都有一个植物.每个植物都有一个价值(可以为负),以及一些它可以攻击的位置.从每行的最右面开始放置僵尸,僵尸从右往左行动,当僵尸在植物攻击范围内时会立刻死亡.僵尸每到一个位 ...

  3. [ZJOJ2007]时态同步 贪心

    不是很懂为什么luogu标签是树形DP,感觉我想的就是一个贪心啊... 随机造几组数据,我们发现贪心的确可以得到最优解,那么为什么呢? 假设将所有时态贪心的调整是对的,那么如果一个节点的各个儿子时态不 ...

  4. JavaScript定义类与对象的一些方法

    最近偶然碰到有朋友问我"hoisting"的问题.即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的.可以看看这个例子: 1 var a = 'global'; 2 (fu ...

  5. MySQL、Oracle、DB2等数据库常规排序、自定义排序和按中文拼音字母排序

    MySQL常规排序.自定义排序和按中文拼音字母排序,在实际的SQL编写时,我们有时候需要对条件集合进行排序. 下面给出3中比较常用的排序方式,mark一下 1.常规排序ASC DESC ASC 正序 ...

  6. STL之五:set/multiset用法详解

    集合 转载于:http://blog.csdn.net/longshengguoji/article/details/8546286 使用set或multiset之前,必须加入头文件<set&g ...

  7. Hibernate入门(4)- Hibernate数据操作

    Hibernate加载数据 Session.get(Class clazz, Serializable id) clazz:需要加载对象的类,例如:User.class id:查询条件(实现了序列化接 ...

  8. MySQL查看所有用户及拥有权限

    查看MYSQL数据库中所有用户 mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM m ...

  9. 2015/9/4 Python基础(8):映射和集合类型

    Python里唯一的映射类型是字典.映射类型对象里,hash值(key)和指向的对象(值)是一对多的关系.字典对象是可变的,这一点上很像列表,它也可以存储任意个数任意类型的Python对象,其中包括容 ...

  10. Jumpserver代码规范

    Jumpserver 项目规范(Draft) 语言框架 Python 3.6.1 (当前最新) Django 1.11 (当前最新) Flask 0.12 Luna (当前最新) Paramiko 2 ...