当我使用例如PuTTY并且我的连接丢失时(或者当我ipconfig /release在Windows上执行手册时),它会直接响应并通知我的连接丢失.
我想创建一个Java程序来监视我的Internet连接(到一些可靠的服务器),以记录我的Internet失败时的日期/时间.
我尝试使用该Socket.isConnected()方法,但这将永远返回"真".我怎么能用Java做到这一点?
我正在使用以下代码
st = connection.createStatement(
ResultSet.CONCUR_READ_ONLY,
ResultSet.FETCH_FORWARD,
ResultSet.TYPE_FORWARD_ONLY
);
st.setFetchSize(1000);
System.out.println("start query ");
rs = st.executeQuery(queryString);
System.out.println("done query");
Run Code Online (Sandbox Code Playgroud)
查询返回大量(800k)行,并且在打印"开始查询"和"完成查询"之间需要很长时间(~2m).当我在查询中手动设置"限制10000"时,"开始"和"完成"之间没有时间.处理结果需要花费时间,所以我想如果它只是从数据库中获取1k行,处理这些行,并且当它用尽行时它可以在后台获得新行,则总体上更快.
结果集.CONCUR_READ_ONLY等我最后猜测的地方; 我错过了什么吗?
(这是一个postgresql 8.3服务器)
我正在尝试执行一个返回大结果的postgresql查询:
connection.setAutoCommit(false);
st = connection.createStatement(
ResultSet.CONCUR_READ_ONLY,
ResultSet.TYPE_FORWARD_ONLY
);
st.setFetchSize(100);
logMemory();
System.out.println("start query ");
rs = st.executeQuery(queryString);
System.out.println("done query ");
logMemory();
Run Code Online (Sandbox Code Playgroud)
但这会占用大量内存:
Free memory; 4094347680 (= 3905 mb).
start query
done query
Free memory; 2051038576 (= 1956 mb).
Run Code Online (Sandbox Code Playgroud)
(使用Runtime.getRuntime()打印.freeMemory())
到目前为止,它的工作原理,但数据库将会更大.我不需要记忆中的整个结果; 我只需要处理每一行,将结果写入磁盘并转到下一行.
我知道'setFetchSize'只是一个提示,但是如果postgresql/jdbc会忽略它,我会觉得很奇怪,因为它已经存在了很长时间.
有办法解决这个问题吗?到目前为止,我唯一的想法是创建一个批处理脚本,将查询结果流式传输到磁盘,然后从Java解析文件...
例如,使用winamp(至少在Windows上),您可以在后台使用winamp全屏播放游戏,并使用媒体按钮*来控制声音.Winamp不需要获得焦点,允许游戏继续全屏.
我更喜欢用Java编写它,但这可能不会起作用(在Java afaik中捕获没有焦点的键击已经很困难了),所以任何C#解决方案都没问题.
所以基本的问题是:如何在没有焦点的情况下捕获击键?
*)我相信'后退/前进/停止/邮件/搜索/收藏夹/网络/主页'按钮被称为媒体按钮,但欢迎更好的名称:).
我从数据库查询中获取大量数据,并且我正在制作它们的对象.我终于有了这些对象的列表(大约1M对象),我想将其序列化到磁盘供以后使用.问题是它几乎不适合在内存中,并且将来不适合,所以我需要一些序列化系统说第一个100k,下一个100k等; 并以100k为增量读回数据.
我可以制作一些明显的代码,检查列表是否变得太大,然后将其设置为'list1',然后'list2'等,但也许有更好的方法来处理它?