IDEA商业版 Javaweb 连接MySQL-JDBC错误分析(添加classes和lib导致的错误)

IDEA和eclipse之类的IDE确实很不一样,所以应该要区别对待,如果私自添加classes和lib极有可能发生意外,比如我的报错如下:

Error:Internal error: (java.io.FileNotFoundException) E:\IntellJAVA\ONE\TEST\out\artifacts\TEST_war_exploded\WEB-INF\lib\mysql-connector-java-5.1.45-bin.jar (拒绝访问。)

Information:Internal caches are corrupted or have outdated format, forcing project rebuild: java.io.FileNotFoundException: E:\IntellJAVA\ONE\TEST\out\artifacts\TEST_war_exploded\WEB-INF\lib\mysql-connector-java-5.1.45-bin.jar (拒绝访问。)
java.io.FileNotFoundException: E:\IntellJAVA\ONE\TEST\out\artifacts\TEST_war_exploded\WEB-INF\lib\mysql-connector-java-5.1.45-bin.jar (拒绝访问。)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
    at com.intellij.openapi.util.io.FileUtil.openOutputStream(FileUtil.java:531)
    at com.intellij.openapi.util.io.FileUtil.performCopy(FileUtil.java:491)
    at 。。。。。。。。。。。。。。。。。。。。

所以应该冷静的分析原因然后找出解决方法,首先还原事故现场,依次排查经过。

版本:IDEA商业版 2017.3.4

MySQL-JDBC:mysql-connector-java-5.1.45-bin.jar

前提:已创建好Javaweb项目,且没有任何改动,如图示:(还没有配置好tomcat)

这里写图片描述

到了这里,大多数博客都说需要添加和设置classes或者lib目录之类的,然后巴拉巴拉
然而并没有什么用,因为IDEA本身并不需要再去配置那两货。

增加一些文件如图示:

这里写图片描述

此时配置好tomcat,点击运行,发现多了一个out文件夹,发现IDEA已经帮我们解决了classes文件夹,接下来再看lib文件夹

这里写图片描述

添加tomcat依赖包和mysql-connector-java-5.1.45-bin.jar,并且加入Artifacts中(这个后面会说)

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
再次运行,观察out文件夹的变化,哈哈发现多了一个lib文件夹,里面躺着的正是我们刚刚添加的mysql-connector-java-5.1.45-bin.jar和tomcat依赖包

这里写图片描述

然后测试MySQL-JDBC ,通过!
这里写图片描述

如果一头雾水,可能需要了解javaweb各个目录,可以参考以下博客
Intellij从无到有创建项目:梳理web项目各目录及配置作用

如果你对Artifacts不太了解,可以参考以下博客
IDEA artifacts 详细部署

测试用例(登陆验证模块):

已打包至CSDN下载中心,顺便赚点积分:
http://download.csdn.net/download/mikeoperfect/10251201

  • MySQL数据库
/*
Navicat MySQL Data Transfer

Source Server         : aa
Source Server Version : 50720
Source Host           : localhost:3306
Source Database       : user

Target Server Type    : MYSQL
Target Server Version : 50720
File Encoding         : 65001

Date: 2018-02-13 13:06:12
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for hh
-- ----------------------------
DROP TABLE IF EXISTS `hh`;
CREATE TABLE `hh` (
  `username` varchar(20) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk;

-- ----------------------------
-- Records of hh
-- ----------------------------
INSERT INTO `hh` VALUES ('aa', '111');
  • DBBean.java
package com;
import java.sql.*;

public class DBBean
{
    //数据库用户名
    String userName="root";
    //数据库密码
    String userPassword="123";
    //数据库的URL,包括连接数据库所使用的编码格式
    String url="jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=gb2312&useSSL=false";
    //定义一个连接对象
    Connection dbcon;
    //错误信息串
    Statement stmt;
    ResultSet rs;
    /**
     *@初始化操作,包括给变量赋初值和连接数据库
     */
    public DBBean()
    {
        //初始化参数值
        stmt = null;
        rs = null;
        //连接数据库
        try
        {
            //声明所用的类包
            Class.forName("org.gjt.mm.mysql.Driver");
            //获得数据库的连接对象
            dbcon= DriverManager.getConnection(url,userName,userPassword);
            System.out.print("df");
        }
        catch(SQLException ex)
        {
            //打印出异常信息
            System.out.println(ex.toString());
        }
        catch(ClassNotFoundException ex)
        {
            //打印出异常信息
            System.out.println(ex.toString());
        }
    }
    /**
     *@对数据库执行sql执行语句,主要是插入和更新操作,返回一个布尔值变量
     */
    public boolean exeSql(String strSql)
    {
        try
        {
            stmt=dbcon.createStatement();
            stmt.executeUpdate(strSql);
            return true;
        }
        catch(Exception ex)
        {
            //打印出异常信息
            System.out.println(ex.toString());
            return false;
        }
    }
    /**
     *@对数据库执行sql查询语句,返回一个ResultSet类型的对象
     */
    public ResultSet exeSqlQuery(String strSql)
    {
        try
        {
            stmt=dbcon.createStatement();
            rs =stmt.executeQuery(strSql);
        }
        catch(Exception ex)
        {
            //打印出异常信息
            System.out.println(ex.toString());
            rs = null;
        }
        return rs;
    }
    public static void main(String []args){
        new DBBean();
    }
}

  • login.jsp
<%@ page import="java.sql.*" language="java" contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>登录界面</title>
</head>
<body>
<center>
    <h1 style="color:red">登录</h1>
    <form id="indexform" name="indexForm" action="logincheck.jsp" method="post">
        <table border="0">
            <tr>
                <td>账号:</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" name="password">
                </td>
            </tr>
        </table>
        <br>
        <input type="submit" value="登录" style="color:#BC8F8F">
    </form>
    <form action="zhuce.jsp">
        <input type="submit" value="注册" style="color:#BC8F8F">
    </form>
</center>
</body>
</html>
  • logincheck.jsp
<%@ page import="java.sql.*" language="java" contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"%>
<jsp:useBean id="sd" class="com.DBBean" scope="application" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
</head>
<body>

<%
    request.setCharacterEncoding("UTF-8");
    String username=(String)request.getParameter("username");
    String password=(String)request.getParameter("password");//取出login.jsp的值

    //下面是数据库操作
    String sql="select * from hh where username="+"'"+username+"'";//定义一个查询语句
    ResultSet rs=sd.exeSqlQuery(sql);//运行上面的语句
    if(rs.next())
    {
        if(password.equals(rs.getString("password"))){
            response.sendRedirect("loginsuccess.jsp");
        }
        else{
            out.print("<script language='javaScript'> window.alert('密码错误');</script>");
            response.setHeader("refresh", "0;url=login.jsp");
        }
    }
    else
    {
        out.print("<script language='javaScript'> window.alert('账号错误');</script>");
        response.setHeader("refresh", "0;url=login.jsp");
    }

%>
</body>
</html>
  • loginsuccess.jsp
<%@ page import="java.sql.*" language="java" contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
</head>
<body>
<h1>登陆成功</h1>
</body>
</html>

小结

头大,对于新鲜事物来说最忌讳的就是不知所以也不知所以然,关键还是资料太过于冗杂,尽管有资料存在某个角落,但是如何在最短的时间获取到最有效最有用的那一份,确实是一个难题。这次梳理了IDEA中javaweb中各种目录及其用法也算是有所收获了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值