编译器不允许静态方法调用非静态方法.我理解这样做是因为非静态方法通常最终使用实例变量.
但是有一个不使用实例变量的非静态方法是否有意义.如果我们的行为不影响或不受实例状态的影响,则不应将此类方法标记为静态.
我是 JDBC 的新手并且一直在使用它。论坛中的其他帖子表明 Oracle 的 JDBC 驱动程序不支持 Oracle PLSQL 布尔类型。我觉得这很奇怪:
从oracle jdbc 文档来看,它似乎是这样的:

但是在另一部分中它说它不允许将 BOOLEAN 参数传递给 PL/SQL 存储过程。
文档不是自相矛盾吗?
它不允许我从 PL/SQL 过程/函数传递或接受布尔值。它给了我以下异常:
Exception occured in the database
Exception message: Invalid column type: 16
Database error code: 17004
java.sql.SQLException: Invalid column type: 16
at oracle.jdbc.driver.OracleStatement.getInternalType(OracleStatement.java:3963)
at oracle.jdbc.driver.OracleCallableStatement.registerOutParameterInternal(OracleCallableStatement.java:135)
at oracle.jdbc.driver.OracleCallableStatement.registerOutParameter(OracleCallableStatement.java:304)
at oracle.jdbc.driver.OracleCallableStatement.registerOutParameter(OracleCallableStatement.java:393)
at oracle.jdbc.driver.OracleCallableStatementWrapper.registerOutParameter(OracleCallableStatementWrapper.java:1579)
at com.HrManager.insertNewEmployee(HrManager.java:1300)
at com.HrManager.main(HrManager.java:1411)
Run Code Online (Sandbox Code Playgroud)
我试图理解为什么 JDBC Oracle 驱动程序不支持布尔类型。是不是因为 PL/SQL"Boolean"接受空值而 Java 的原始类型"boolean"不接受?
但与之相反的是,Java 的包装类"Boolean"确实接受空值。这可用于映射到 PLSQL 的 Boolean 类型。有人可以对此多加说明。
我们在Java中使用继承来抽象出超类中的类似行为,并让所有子类继承它.这样做的一个优点是,我们现在只有一个要维护的方法副本(即在超类中).
Class Animal
{
public void makeNoise()
{
}
public void sleep()
{
}
}
Class Cat extends Animal
{
// Override the makeNoise method
public void makeNoise()
{
}
}
Class someClass
{
public static void main(String args[])
{
Cat fluffy = new Cat();
fluffy.sleep();
}
}
Run Code Online (Sandbox Code Playgroud)
我试图了解Java编译器如何知道类型引用的sleep()方法Cat.在Cat子类中不能有方法的副本(它违背了在超类中使用它并让所有子类继承它的目的).这些信息是否存储在其他地方?
我试图在程序中调用使用PL/SQL包定义的过程Java.
我知道可以connection.prepareCall在Jdbc中调用存储过程.但是关于如何在程序包中调用过程的信息很少.
我正处于开发阶段,我仍在考虑使用什么数据库框架.只是想知道在PLSQL中使用JDBC的优缺点是什么?对于这个用例,有更好的JDBC替代品吗?
我正在尝试使用JDBC在Oracle 11g数据库上执行DDL语句.我正在使用boolean execute(String SQL)该Statement课程.
以下是执行查询并尝试确定查询结果的代码段:
// Create a SQL string
String dropSql = "DROP TABLE Reviews";
stmt = conn.createStatement();
// Execute the query
boolean result = stmt.execute(dropSql);
// Get the result of the drop operation
if(result)
{
// Its a result set
System.out.println("Atleast one result set has been returned. Loop through them");
}
else
{
// Its an update count or no result
Integer updateCnt = stmt.getUpdateCount();
if(updateCnt == -1)
{
// No results
System.out.println("No results …Run Code Online (Sandbox Code Playgroud) 我的第一个 Web 服务版本使用普通JDBC来连接到底层数据库。我已经使用JUnit. 我在Jboss EAP 6.4. 到现在为止还挺好。
我修改了我的应用程序代码以使用 Jboss 的 JDBC 连接池。似乎Jboss 7+不允许从外部(从服务器外部)引用数据源。虽然该服务仍能正常工作,但我的单元测试现已损坏。我想知道如何解决这个问题。
我正在考虑重新编写相同的测试来测试服务而不是应用程序代码。一种方法是使用 wsimport 生成存根,然后编写客户端。然后我可以使用 JUnit 来测试客户端。问题是必须手动创建存根,并且每次 WSDL 更改时
我正在寻找一种有效的方法来实现这一目标。理想的框架是接受一个WSDL(或服务的 url)的 url,然后允许我调用服务操作。
我知道以上不再是单元测试而是集成测试。这种方法是测试JAX-WS服务的最佳方式吗?
我正在我的 java 应用程序中实现日志记录,以便我可以调试应用程序投入生产后可能发生的潜在问题。
考虑到在这种情况下,人们不会奢侈地使用 IDE、开发工具(以调试模式运行事物或逐步执行代码),将类名、方法名和行号与每条消息一起记录将非常有用。
我在网上搜索日志记录的最佳实践,我看到了这篇文章,它说:
您永远不应该包含文件名、类名和行号,尽管这很诱人。我什至看到代码发出的空日志语句:
Run Code Online (Sandbox Code Playgroud)log.info("");因为程序员假定行号将是日志模式的一部分,并且他知道“如果文件的第 67 行(在 authentication() 方法中)出现空日志消息,则表示用户已通过身份验证”。此外,日志类名、方法名和/或行号对性能有严重影响。
我试图了解日志记录类名、方法名和行号如何降低性能。
以上是否适用于所有日志框架或仅适用于其中一些?(作者Logback在同一主题中进行了引用)。我有兴趣了解在Log4j.
以下是checkUserGuess属于Board类的示例代码, 方法.
public String checkUserGuess(String aGuess)
{
// Some processing
return result_of_a_guess;
}
Run Code Online (Sandbox Code Playgroud)
我有一个SimpleGuessingGame类使用这个方法,并对该方法的处理感到满意.它不使用返回的值.
另一个类ComplexGuessingGame使用此方法,并使用方法返回的值进行进一步处理.
所以我们有两种情况,一种是使用返回值,另一种是忽略它.这是一个常见现象还是指向糟糕的设计?
第一篇文章.对人好点?
学习Java.
我有一个String对象 "1 Book on wombats at 12.99"
我想将这个字符串拆分成String[]OR或者ArrayList<String>在第一个空格和"at"这个单词周围分割字符串,所以我String[]有3个字符串"1" "Book on wombats" "12.99"
我目前的解决方案是:
// private method call from my constructor method
ArrayList<String> fields = extractFields(item);
// private method
private ArrayList<String> extractFields (String item) {
ArrayList<String> parts = new ArrayList<String>();
String[] sliceQuanity = item.split(" ", 2);
parts.add(sliceQuanity[0]);
String[] slicePrice = sliceQuanity[1].split(" at ");
parts.add(slicePrice[0]);
parts.add(slicePrice[1]);
return parts;
}
Run Code Online (Sandbox Code Playgroud)
所以这很好用,但肯定有更优雅的方式吗?或许正则表达式,我仍然试图得到一个好的处理.
谢谢!
好吧,所以我想将值存储在数组中.这是我的代码:
import java.util.Scanner;
public class test {
public static void main(String args[]){
Scanner bob = new Scanner(System.in);
double[] mylist;
System.out.println("What is your first value?");
mylist = bob.nextDouble();
System.out.println("What is your second value?");
mylist = bob.nextDouble();
}
}
Run Code Online (Sandbox Code Playgroud)
问题#1:我被告知mylist = bob.nextDouble()应该是nextLine().为什么如果它显然是双倍的?
目标:我想以某种方式将这些值存储到一个数组中,以便我以后可以将它们拉出来.有人可以帮忙吗?
UPDATE
对于问题#1,它告诉我它无法转换Double()为Double[].这是什么意思?
java ×10
jdbc ×3
oracle ×3
methods ×2
arrays ×1
boolean ×1
ddl ×1
exception ×1
inheritance ×1
instance ×1
jax-ws ×1
log4j ×1
logging ×1
non-static ×1
package ×1
performance ×1
plsql ×1
regex ×1
resultset ×1
return-value ×1
split ×1
static ×1
string ×1
unit-testing ×1
web-services ×1