String intern()行为

从String类的intern方法的javaDocs : 调用实习方法时,如果池已经包含等于此字符串对象的字符串(由equals(Object)方法确定),则返回池中的字符串。 否则,将此String对象添加到池中,并返回对此String对象的引用。 考虑以下用例: String first = “Hello”; String second = “Hello”; System.out.println(first == second); String third = new String(“Hello”); String fourth = new String(“Hello”); System.out.println(third == fourth); System.out.println(third == fourth.intern()); System.out.println(third.intern() == fourth); System.out.println(third == fourth); System.out.println(third.intern() == fourth.intern()); System.out.println(third.intern() == first); String fifth = new String(new char[]{‘H’,’e’,’l’, ‘l’, ‘o’}); String sixth = […]

如何配置Eclipse以使用Oracle javac 1.7.0_09进行编译?

我正在尝试编译以下代码: public class DuplicateMainExample { public static void main(String[] args) { System.out.print(“A1”); } public static void main(String… args) { System.out.print(“A2”); } } 在Eclipse中,它运行正常,但在两个方法上都有警告 – “ DuplicateMainExample ”中的“ Duplicate method main(String []) ” 使用javac (java版“1.7.0_09”)我有一个编译错误: >javac DuplicateMainExample.java DuplicateMainExample.java:8: error: cannot declare both main(String…) and main (String[]) in DuplicateMainExample public static void main(String… args) { ^ 1 […]

首次连接数据库时,NullPointer在日志中

我第一次使用createEntityManager()连接到数据库时,在tomcat的控制台上出现NullPointerException 。 我在用: apache tomcat 8.0.24 eclipselink 2.6.1-RC1(JPA间接使用) sqlite jdbc 3.8.10.1 日志消息如下: [EL Warning]: connection: 2015-08-21 16:01:51.569–java.lang.NullPointerException [EL Info]: 2015-08-21 16:01:51.585–ServerSession(29156874)–EclipseLink, version: Eclipse Persistence Services – 2.6.1.v20150605-31e8258 [EL Info]: connection: 2015-08-21 16:01:52.365–Not able to detect platform for vendor name [SQLite33.8.10.1]. Defaulting to [org.eclipse.persistence.platform.database.DatabasePlatform]. The database dialect used may not match with the database you are […]

jdbc:oracle数据库更改通知和重复事件

我需要一些监听器来进行Oracle数据库表的任何更改(更新,插入,删除)。 问题:我在桌面上通过单次更新获得了很多检测。 我认为它的oracle缓存等。 是否可能只有真正的变化才能被发现? 我的代码: import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import oracle.jdbc.OracleConnection; import oracle.jdbc.OracleDriver; import oracle.jdbc.OracleStatement; import oracle.jdbc.dcn.DatabaseChangeEvent; import oracle.jdbc.dcn.DatabaseChangeListener; import oracle.jdbc.dcn.DatabaseChangeRegistration; public class OracleDCN { static final String USERNAME = “scott”; static final String PASSWORD = “tiger”; static String URL = “jdbc:oracle:thin:@localhost:1521:stingdev”; public static void main(String[] args) { OracleDCN oracleDCN = […]

JTable中的单元validation

我有一个JTable需要对用户可以输入文本的单元格进行单元validation。 当用户输入无效文本时,单元格的边框变为红色。 我设法让这个工作关联一个二维数组来标记每个单元格是否有错误。 问题是用户必须能够重新排序表(按列)。 我必须将错误标志存储在表模型中,而不是分开存储。 任何人都有想法如何做到这一点?

SQLException:违反协议。 Oracle JDBC驱动程序问题

我得到以下的赘言: java.sql.SQLException: Protocol violation at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:190) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:286) at oracle.jdbc.driver.T4C80all.receive(T4C80all.java:766) at oracle.jdbc.driver.T4CPreparedStatement.do0all8(T4CPreparedStatement.java:216) at oracle.jdbc.driver.T4CPreparedStatement.fetch(T4CPreparedStatement.java:1225) at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:373) at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:284) Oracle系统在Solaris 5.10上运行10.2.0.3.0。 jdbc驱动程序在JDK 1.6.0_21上运行(如果它是导入的,则java也在Solaris 5.10机器上运行)。 我尝试了几种不同的oracle瘦驱动程序,包括最新的和看起来与oracle版本完全匹配的驱动程序。 我正在运行的查询非常简单:“按key1,key2,key3从some_table顺序中选择*”然后迭代结果集并写入文件。 该表有大约1200万行,所以我希望这个过程运行时间很长,但它似乎在5到15分钟内就会死掉。 每次我运行它,它会在另一行上爆炸,所以我认为问题不在于数据。 我找到了oracle警报日志,但我无法分辨出那里的任何内容与我的进程有关。 不过,我不是oracle专家,也许我需要看一下oracle设置。 奇怪的是,我在不同的连接上运行了大约五种类型的查询(一对比较复杂),只有两个最简单的查询得到了这个问题。 任何有关如何缩小问题的帮助或想法将不胜感激。

关闭BufferedReader和InputStreamReader

这段代码正在创建BufferedReader和InputStreamReader导致的内存泄漏问题,我认为可能会发生一些exception。 我该怎么改变它? try{ URL url = new URL(sMyUrl); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); while ((str = in.readLine()) != null) { jsonString += str; } in.close(); }catch(Exception e){ }

具有固定/可变arity(varargs)匹配的最具体方法

在Java语言规范的第15.12.2.5节中 ,它讨论了如何在具有固定arity的方法和可变arity方法(即varargs )的两种情况下选择最具体的方法。 我在JLS中找不到的是关于两个方法之间的决定,其中一个是固定的arity,另一个是变量arity 。 例如: public interface SomeApi { public String getSomething(String arg); // method 1 public String getSomething(String … args); // method 2 } 按照人们的预期编译就好( 由Yoni概述的原因如下 )。 这个调用代码也编译: SomeApi api = … Object o = api.getSomething(“Hello”); 如果你运行它,则调用method #1 (即非varargs方法)。 为什么这个调用代码不含糊? 为什么固定arity方法比变量arnt方法更具体? 有人能指出我对规范的相关部分吗?

在Windows控制台中从Java代码问题中打印出unicode

我在Windows控制台中打印出unicode符号时遇到问题。 这是打印出unicode符号值的java代码; System.out.print(“\u22A2 “); 当我在Eclipse中使用UTF-8编码设置运行程序时,问题不存在,但是当涉及到Windows控制台时,符号会被问号替换。 以下是为了尝试克服这个问题,没有成功; 将Windows控制台的字体更改为Lucida Console。 每次运行Windows控制台时,我都会更改编码设置,即使用chcp 65001 我尝试了几次的额外步骤是使用参数运行java文件,即java -Dfile.encoding=UTF-8 Filter (其中“Filter”是类的名称)

如何使用JSch执行多个操作

我是SSH和JSch的新手。 当我从客户端连接到服务器时,我想做两个任务: 上传文件(使用ChannelSFTP ) 执行命令,例如创建目录,以及搜索MySQL数据库 目前我使用两个单独的shell登录来执行每个任务(实际上我还没有开始编程MySQL查询)。 对于上传相关代码是 session.connect(); Channel channel=session.openChannel(“sftp”); channel.connect(); ChannelSftp c=(ChannelSftp)channel; c.put(source, destination); 而对于我的命令 String command = “ls -l”;//just an example Channel channel=session.openChannel(“exec”); ((ChannelExec)channel).setCommand(command); 我应该在第一个频道之后断开会话,然后打开第二个频道吗? 或者完全关闭会话并开启新会话? 正如我所说,我是新手。