Java作为与MySQL交互的cron脚本与使用PHP
发布时间:2020-12-15 02:24:47 所属栏目:Java 来源:网络整理
导读:我目前有一些使用Cron读取和更新 MySQL数据库的Java程序. 我正在考虑将代码移植到PHP.在我这样做之前,我做了一个简单的基准测试,选择选择某个表中的所有行,然后将值存储在字符串中. 我为PHP和Java程序循环了10,000次. PHP在5秒内运行它. Java花了大约1分钟.
我目前有一些使用Cron读取和更新
MySQL数据库的Java程序.
我正在考虑将代码移植到PHP.在我这样做之前,我做了一个简单的基准测试,选择选择某个表中的所有行,然后将值存储在字符串中. 我为PHP和Java程序循环了10,000次. PHP在5秒内运行它. Java花了大约1分钟. 我对性能的差异感到惊讶.这是对的吗? Java真的很慢吗?或者我做错了什么? 我目前正在使用JDK 6和PHP CLI 5.3在CentOS 5.5中运行cron脚本. 这是Java中的代码: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; public class Test { private Connection connection = null; private Statement statement = null; public static void main(String args[]) { (new Test()).run(); } private void initDB() { try { String url="jdbc:mysql://localhost:3306/db"; Class.forName( "org.gjt.mm.mysql.Driver" ); connection = DriverManager.getConnection(url,"username","password"); statement = connection.createStatement(); } catch (Exception e) { e.printStackTrace(); } } private String getUserProfiles() { String query = "SELECT * FROM UserProfile;"; String output = ""; try { for(int i = 0; i < 10000; ++i) { ResultSet rs=statement.executeQuery(query); while(rs.next()) output += rs.getString("name"); } } catch (Exception e) { e.printStackTrace(); } return output; } /更多代码继续/ 然后在PHP中: try { $db = new PDO("mysql:host=localhost;dbname=db;charset=utf8",'username','password'); $str = ""; for($i=0; $i < 10000; ++$i) { $qry = $db->prepare('SELECT * FROM UserProfile;'); $qry->execute(); $result = $qry->fetchAll(PDO::FETCH_OBJ); foreach($result as $profile) { $str .= $profile->name; } } } catch(PDOException $e) { echo $e->getMessage(); exit; } 解决方法
在这种情况下,您可以使用StringBuffer来提高java的字符串性能
private String getUserProfiles() { String query = "SELECT * FROM UserProfile;"; StringBuffer output = new StringBuffer(); try { for(int i =0; i < 10000; ++i) { ResultSet rs=statement.executeQuery(query); while(rs.next()) output.append(rs.getString("name")); } } catch (Exception e) { e.printStackTrace(); } return output.toString(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |