- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在抓取 Web 数据,解析它,并将其写入数据库。这是“插入”部分:
public void insert(String comp, String title, String date, String location, String keyword){
String query = "INSERT INTO "+ dbtablename +" "
+ "(company_name,job_title,date_created,location, platform, keyword) VALUES "
+ "(\""+comp+"\",\""+title+"\",\""+date+"\",\""+location+"\",\""+ platform +"\",\""+keyword + "\");";
OpenConnectionDB();
try {
this.statement = this.connection.createStatement();
this.statement.execute(query);
statement.close();
} catch (SQLException ex) {
Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
}
finally {closeConnectionDB();}
closeConnectionDB();
}
连接是这样创建的:
public void getData(Database c) throws IOException
{
// try {
CSVReader reader = new CSVReader(new FileReader(csvFilename), ';');
String[] row = null;
while((row = reader.readNext()) != null) {
for (int i=0; i< row.length; i=i+2 )
{
System.out.println(row[i].trim());
System.out.println( "C:/Talend/workspace/WEBCRAWLER/output/keywords_"+row[i].trim()+".txt");
Document document = Jsoup.parse(new File("C:/Talend/workspace/WEBCRAWLER/output/keywords_"+row[i].trim()+".txt"), "utf-8");
Elements elements = document.select(".joblisting");
for (Element element : elements)
{
// 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");
String cleanJobTitle = jobTitle.replaceAll("\"", "");
c.insert(companyName, cleanJobTitle, timeAdded, location, row[i].trim());
c.closeConnectionDB();
}
}
// return row[rowCount];
}
//...
reader.close();
}
它工作得很好,但在某些时候它会引发此错误:
Jul 29, 2014 1:26:03 PM org.jsoup.examples.Database OpenConnectionDB
SEVERE: null
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.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:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1127)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:356)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2502)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2539)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2321)
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:409)
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:35)
at org.jsoup.examples.Database.insert(Database.java:70)
at org.jsoup.examples.parseEasy.getData(parseEasy.java:65)
at startWorkflow.main(startWorkflow.java:27)
Caused by: java.net.SocketException: Permission denied: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:258)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:306)
... 17 more
感觉就像我对数据库做了不必要的 open() 或 close() 操作。您在我庞大的代码墙中看到了其中的任何一个吗? (对不起)。你能帮我解决这个错误吗?
到目前为止非常感谢社区!
最佳答案
这是一个快速重构,它重用连接并使用准备好的语句。我不确定您正在使用什么数据库驱动程序,因此打开/关闭和准备好的语句内容应该可以让您大致了解,但在语法上可能不正确。
private static final String KEYWORD_INSERT = "INSERT INTO " + dbtablename
+ "(company_name, job_title, date_created, location, platform, keyword)"
+ "VALUES(?, ?, ?, ?, ?, ?)";
public void getData(Database c) throws IOException {
try {
Connection connection = c.getDbConnection();
PreparedStatement stmt = connection.prepareStatement(KEYWORD_INSERT);
CSVReader reader = new CSVReader(new FileReader(csvFilename), ';');
String[] row;
while((row = reader.readNext()) != null) {
for (int i=0; i< row.length; i=i+2 ) {
Document document = Jsoup.parse(new File("C:/Talend/workspace/WEBCRAWLER/output/keywords_"+row[i].trim()+".txt"), "utf-8");
Elements elements = document.select(".joblisting");
for (Element element : elements) {
// 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().replaceAll("\"", "");
String location = locationElement.text();
String timeAdded = dateElement.attr("datetime");
stmt.setString(1, companyName);
stmt.setString(2, jobTitle);
stmt.setString(3, timeAdded);
stmt.setString(4, location);
stmt.setString(5, platform);
stmt.setString(6, row[i].trim());
stmt.executeUpdate();
}
}
}
} finally {
stmt.close();
connection.close();
}
}
关于java - 我的第一个自动 SQL 插入 : I feel im losing a lot of performance here,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25014814/
目前我正在创建一个 C# 应用程序,它必须从现有数据库中读取大量数据(超过 2,000,000 条记录),并将其与数据库中不存在的大量其他数据(也大约 2,000,000 条记录)进行比较。这些比较主
我正在为需要将一些可变长度数组存储到 mysql 数据库中的系统设计数据库。 数组的长度(最多)为数百甚至数千。 新阵列将定期创建,可能每天数十个。 我应该将这些数组存储到一个很快就会变得巨大的表中还
问题:我有两个大型字符串元胞数组A 和B。我想知道识别 A 中哪些元素包含 B 中哪些元素的最快方法。特别是不循环能不能做到? 最小示例:(我的实际 A 和 B 分别包含 7,000,000 和 22
我有这些表: create table person ( person_id int unsigned auto_increment, person_key varchar(40) n
我正在处理一个简单的页面,但遇到固定位置的问题。想知道是否有人有时间帮助我。 在这里复制粘贴所有代码会太多,但我会粘贴一个链接 http://et4891.com/lecture/protosite.
我正在开发一个项目,需要能够将“很多”、“一些”、“很多”、“一些”等修饰符分类为最小百分比 例如“很多” -> 80% 现在我正在考虑简单地创建一个大字典来关联这些修饰符和数值,例如 一些 -> 1
我想将所有数据从工作表复制到另一个新 Excel 文件的另一工作表。我试过这个: Set wkb = Workbooks.Add wkb.SaveAs myNewFile ThisWorkbook.W
项目运行良好,运行良好,编译良好。直到一些看似随机的时间,它才停止变好。 目前,我遇到了200个流浪错误: ./new:4: error: stray '\376' in program ./new:
我正在开发一个 Android(现在只是 Android,以后可能是 iOS)应用程序,它在很大程度上依赖于拍照,将这些照片存储在某个服务器上,并能够在用户需要时检索任何照片这将是非常频繁的。 在深入
我是 codeigniter 的新手,我刚刚学会使用 codeigniter 已经两周了。我在一个 Controller 中使用超过 26 个功能,每个功能加载不同的 View 。我的问题是,当我加载
下面是我的 3 个 cpp 文件和 2 个头文件。我收到了天文数字的错误,而且大多数都非常不清楚。我是 C++ 的新手并且有 C#/Java 背景。 我很清楚以下可能是语法错误。提前感谢您的帮助。 主
我必须在 Java 程序中存储大量单词 (+200k),并且我想快速访问它们。我只需要知道给定的单词是否属于我的“词典”。我不需要像 这样的一对.如果可能的话,我正在标准库中搜索解决方案。 PS:也
我正在开发一个集成了其他 SDK(例如 Facebook SDK 3.5)的 iOS SDK。为了防止冲突并允许我的客户也导入这些 SDK,我想重命名我的代码中的所有类/枚举(例如,将 FBSessi
我的游戏中有很多角色,因此我有很多纹理。当加载纹理图集(包含大约 5 个不同的图像纹理)时,它会增加内存使用并将其保持在该数量。因此,更多的纹理只会使该数字不断上升,直到有时应用程序崩溃。我不需要同时
哇,大戏!框架有很多静态方法。在我上学的地方,我们被告知永远不要使用任何静态,但 Play!像没有明天一样使用它。这样可以吗?如果有,为什么? 我们(我和 7 个人)计划使用 Play!涉及 Web
我需要更改表中列的值,所以我需要这样做: update members set frequence = 1 where frequence <> 1 我有 700 万行受到影响,我需要分批更新 100
嗨,当我尝试将我的应用程序部署到 Heroku 时,我遇到了一些错误。 当我 pip freeze>requirements.txt 时,我收到此错误: “警告:无法生成分发要求 -lotly 2.7
我用 pthread 编写了一个多线程程序,使用生产者-消费者模型。 当我使用英特尔 VTune 分析器来分析我的程序时,我发现生产者和消费者在 pthread_mutex_unlock 上花费了大量
我有一个要求,我必须缓冲大量数据(以 GB 为单位)以供将来使用。由于没有足够的 RAM 可用于缓冲如此大量的数据,我决定将数据存储在文件中。 现在这里的陷阱是,当我将数据写入文件时,其他线程可能需要
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
我是一名优秀的程序员,十分优秀!