java - 我的代码似乎效率低下并引发 jdbc 异常

标签 java database parsing jsoup

我正在从 HTML 文件中解析数据并将其写入数据库。 直到10分钟前,运行java工作流程时突然弹出越来越多的异常。我已经尝试过:set @@global.max_connections = 1250;这是错误的示例:

Jul 21, 2014 4:22:58 PM org.jsoup.examples.Database OpenConnectionDB
SEVERE: null
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
    at sun.reflect.GeneratedConstructorAccessor9.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
    at com.mysql.jdbc.Util.getInstance(Util.java:383)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1023)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1112)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2508)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2541)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2323)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
    at sun.reflect.GeneratedConstructorAccessor5.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at org.jsoup.examples.Database.OpenConnectionDB(Database.java:34)
    at org.jsoup.examples.Database.insert(Database.java:67)
    at org.jsoup.examples.parseEasy.getData(parseEasy.java:61)
    at org.jsoup.examples.parseEasy.main(parseEasy.java:30)

我正在执行的(墙)代码在这里。也许你们中有人对我在这里犯的错误有敏锐的洞察力。我想不通,也不指望有人去搜索。如果有人立即知道错误源自何处,我会很高兴听到。谢谢!

package org.jsoup.examples;

import java.io.*;   

import org.jsoup.*;
import org.jsoup.nodes.*;
import org.jsoup.select.Elements;

import java.io.IOException;

/**
 * Example program to list links from a URL.
 */
public class parseEasy {



        static parseEasy parseIt = new parseEasy();

        String companyName = "Platzhalter";
        String jobTitle = "Platzhalter";
        String location = "Platzhalter";
        String timeAdded = "Platzhalter";

    public static void main(String[] args) throws IOException 
    {
        Database connect = new Database();
        connect.OpenConnectionDB();

        parseIt.getData();

        connect.closeConnectionDB();


    }

    // 
    public void getData() throws IOException 
    {
        Database c = new Database();

        Document document = Jsoup.parse(new File("C:/Talend/workspace/WEBCRAWLER/output/keywords_Medizin.txt"), "utf-8");
        Elements elements = document.select(".joblisting");
        for (Element element : elements) 
        {
            // Counter for Number of Elements returned


            // Parse Data into Elements
            Elements jobTitleElement = element.select(".job_title span");
            Elements companyNameElement = element.select(".company_name span[itemprop=name]");
            Elements locationElement = element.select(".locality span[itemprop=addressLocality]");
            Elements dateElement = element.select(".job_date_added [datetime]");

            // Strip Data from unnecessary tags
            String companyName = companyNameElement.text();
            String jobTitle = jobTitleElement.text();
            String location = locationElement.text();
            String timeAdded = dateElement.attr("datetime");

            c.insert(companyName, jobTitle, timeAdded, location);



            // Test output
            //System.out.println("Firma:\t"+ companyName + "\t" + jobTitle + "\t in:\t" + location + " \t Erstellt am \t" + timeAdded + "\t. Eintrag Nummer:\t" + count);

        }

    }

  }

最佳答案

您没有关闭与数据库的连接。原因之一是您创建了两个数据库实例。 main() 中的一个已关闭,但 getData() 中的第二个未关闭。

请注意,您应该在 finally block 中关闭数据库,以确保即使出现异常也能关闭连接。

重用数据库连接更改

parseIt.getData();

parseIt.getData(connect);

public void getData() throws IOException 

public void getData(Database c) throws IOException 

关于java - 我的代码似乎效率低下并引发 jdbc 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24867614/

相关文章:

java - Spark Scala 中的任务不可序列化错误

java - 如何使用 Jackson 将对象转换为具有前导零的整数字段的 JSON?

Java Servlet - 让 hello world 出现在按下按钮时

android - 简单 RPG 的数据库表结构

MongoDB/RethinkDB 是否使用 ODM?

python - 在python中解析GSM调制解调器接收到的消息参数

c - 如何检查简单文本文件中的换行符使用了哪个(ASCII)代码?

java - 我正在尝试使用具有多行的扫描仪,并尝试使用另一个字符串 java 更改输入

database - 用于保存 django 模型的单独线程

python - 使用 Pandas 库将历史 Metatrader CSV 数据导入 Python(日期/时间解析)