java - IDEA tomcat连接数据库出现问题?
伊谢尔伦
伊谢尔伦 2017-04-18 10:53:49
0
1
902

Javaweb新手,配置jndi后连接数据后总出现异常
报错出现在 myConn = ds.getConnection();

修改my.ini后还是会出现这种问题

配置jndi的context.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/" reloadable="true">
    <Resource name="jdbc/studentinfo" auth="Container" type="javax.sql.DataSource"
              maxActive="100"   maxIdle="30" maxWait="10000"
              username="root" password="000000"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/studentinfo?">
    </Resource>
</Context>

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">

    <resource-ref>
        <res-ref-name>jdbc/studentinfo</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
    
    <servlet>
        <servlet-name>StudentServlet</servlet-name>
        <servlet-class>init.StudentServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>StudentServlet</servlet-name>
        <url-pattern>/StudentServlet</url-pattern>
    </servlet-mapping>
</web-app>

java文件

public class StudentServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=GB2312");
        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("<head><title>StudentInfo</title></head>");
        if((request.getParameter("sno") == null || request.getParameter("sno").equals("input number"))){
            out.println("<form method='post' action='/Servlet/StudentServlet' >");
            out.println("");
            out.println("学号查询:<input type='text' name='sno' value='input number' />");
            out.println("<input type='submit' value='查询' /><br>");
            out.println("</form>");
        }else if (!(request.getParameter("sno").equals("input number"))){
            Vector vc = new Vector();

            out.println("<form method='post' action='/Servlet/StudentServlet' >");
            out.println("");
            out.println("学生学号:<input type'text' name='sno' />");
            out.println("</form>");
            out.println("<br>");
            out.println("<table border='1'>");
            out.println("<tr><th>学号</th><th>姓名</th><th>语文</th><th>数学</th></tr>");

            try {
                if((vc = accessDB(Integer.parseInt((String)request.getParameter("sno")))) != null){
                    out.println("<tr>");
                    out.println("<td>" + vc.elementAt(0) + "</td>");
                    out.println("<td>" + vc.elementAt(1) + "</td>");
                    out.println("<td>" + vc.elementAt(2) + "</td>");
                    out.println("<td>" + vc.elementAt(3) + "</td>");
                    out.println("</tr>");
                }
            }catch (Exception e){
                out.println("<tr>");
                out.println("<td>没有记录:</td>");
                out.println("</tr>");
                out.println("数据库里没有你要查询得记录");
                e.printStackTrace();
            }
            out.println("</table>");
        }
        out.println("</body>");
        out.println("</html>");
        out.flush();
        out.close();
    }

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

    @Override
    public void init() throws ServletException {

    }

    public Vector accessDB(int id){
        Vector vc = new Vector();
        DataSource ds = null;
        Context ctx;
        Connection myConn = null;

        try {
            ctx = new InitialContext();
            ds = (DataSource) ctx.lookup("java:comp/env/jdbc/studentinfo");
        }catch (Exception e){
            e.printStackTrace();
        }

        if (ds == null){
            System.out.println("Error");
        }else {
            System.out.println("Connection is OK!");
        }

        PreparedStatement statement = null;
        ResultSet mySet = null;
        try {
           myConn = ds.getConnection();
            statement = myConn.prepareStatement("SELECT * FROM info WHERE sno=?");
            statement.setInt(1,id);
            mySet = statement.executeQuery();

            while (mySet.next()){
                vc.add(Integer.toString(mySet.getInt("sno")));
                vc.add(mySet.getString("sname"));
                vc.add(Integer.toString(mySet.getInt("chinese")));
                vc.add(Integer.toString(mySet.getInt("math")));
            }

            statement.close();
            mySet.close();
            myConn.close();
            return vc;
        }catch (Exception e){
            e.printStackTrace();
        }
        return vc;
    }

    public static void main(String[] args) {
        StudentServlet aa = new StudentServlet();
        System.out.println(aa.accessDB(100).elementAt(1));
    }
}

修改context.xml的urlurl="jdbc:mysql://localhost:3306/studentinfo?useSSL=true"

还是会出现异常如下:
java.sql.SQLException: Cannot create PoolableConnectionFactory (Unknown system variable 'lower_case_table_names')

at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2303)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2043)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1543)
at init.StudentServlet.accessDB(StudentServlet.java:102)
at init.StudentServlet.doGet(StudentServlet.java:47)
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

répondre à tous(1)
小葫芦

Raison : MySQL doit indiquer s'il doit effectuer une connexion SSL dans les versions supérieures

Solution :

jdbc:mysql://localhost:3306/studentinfo?characterEncoding=utf8&useSSL=true

Problème : variable système inconnue 'lower_case_table_names'

Essayez de réduire la version du fichier jar mysql-connector-java

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal