小编dan*_* sp的帖子

正确使用PreparedStatement

假设我们有一个在数据库中写入日志消息的类.从代码的不同部分调用此类,并一次又一次地执行相同的INSERT语句.似乎是要求使用PreparedStatement.

但是我想知道它的正确用法是什么.我是否仍然可以获得使用它的好处,比如DBMS在每次执行时使用相同的执行路径,即使我每次调用方法时都创建一个新的PreparedStatement,或者我应该将PreparedStatement作为类成员并且从不关闭它是为了重新使用它并从中获益?

现在,如果在这种情况下使用PreparedStatement获得利益的唯一方法是将其作为类成员保持打开,那么同一个连接是否可以同时打开不同的PreparedStatement(具有不同的查询)?当两个PreparedStatements同时执行时会发生什么?JDBC驱动程序是否对PreparedStatements的执行进行排队?

提前谢谢,Dani.

java database jdbc

7
推荐指数
1
解决办法
204
查看次数

自动实例化新部署的war文件中的类

想象一下,我想确保在Tomcat中部署它所包含的战争时实例化该类.

例如,一个类有一个静态初始化程序,它启动一个定期打印CPU使用率的线程.一旦Tomcat加载战争,我需要这个类开始监视.

有没有办法做到这一点,而不必调用具有此类引用的Servlet,以便ClassLoader加载它并执行静态初始化程序?

java

7
推荐指数
1
解决办法
77
查看次数

git svn clone失败,出现"错误:git-svn死于信号11"

我正在尝试使用Ubuntu 16.4机器将我庞大的SVN存储库移动到Git中.为此,我遵循本教程:

https://www.atlassian.com/git/tutorials/svn-to-git-prepping-your-team-migration

我安装了最新的Git,SVN和git-svn工具.

我的问题是,每次我敲响'git svn clone'命令我都会收到此错误'错误:git-svn死于信号11'而没有任何进一步的信息.

在这个论坛中搜索了一下我找到了另一篇文章:

git svn clone死于cygwin下的11号信号

这带我到这个网站寻求解决方案:

http://pwizardry.com/devlog/index.cgi/2010/03/29#svn2git

要求使用'git svn fetch'恢复进程.我这样做了,它似乎工作了,因为这个过程持续了一天.不幸的是,它再次停止了相同的错误,'git svn fetch'似乎没有任何帮助.

我想知道是否有人遇到过这个问题,或者我怎么能找到任何痕迹,因为我得到的只是这个错误而没有任何进一步的解释.

编辑:

所以我继续搜索这个问题,我发现如果使用'valgrind'你可以获得更多的信息,所以我做了,现在'git svn fetch'在另一个点停止了这条消息:

==17006== Warning: invalid file descriptor -1 in syscall close()
==17006== 
==17006== HEAP SUMMARY:
==17006==     in use at exit: 43,779,830 bytes in 71,103 blocks
==17006==   total heap usage: 7,178,701 allocs, 7,107,598 frees, 2,123,468,574 bytes allocated
==17006== 
==17006== LEAK SUMMARY:
==17006==    definitely lost: 156,556 bytes in 40 blocks
==17006==    indirectly lost: 156,338 bytes in 51 blocks
==17006==      possibly lost: …
Run Code Online (Sandbox Code Playgroud)

git git-svn

6
推荐指数
2
解决办法
7015
查看次数

OOP循环参考

我在这里面临的困境是什么是什么,什么不是循环参考......以及如何在肯定的情况下摆脱它.

假设我有一个Main实例化两个不同类的类,其中每个类都需要在另一个类中执行一个方法:

MyMain {
    AlarmManager alarmManager;
    DatabaseManager databaseManager;

    MyMain() {
        alarmManager = new AlarmManager(dataBaseManager);
        databaseManager = new DatabaseManager (alarmManager);
    }

    AlarmManager getAlarmManager() {
        return alarmManager;
    }

    DatabaseManager getDatabasetManager() {
        return databaseManager;
    }
}
Run Code Online (Sandbox Code Playgroud)

和班级:

AlarmManager {
    DatabaseManager dataBaseManager;

    onAlarm(alarm) {
        dataBaseManager.saveInHistorical(alarm);
        sendAlarm(alarm);
    }

    sendAlarm(alarm) {
        socketWriter(alarm);
    }
}

DatabaseManager{
    AlarmManager alarmManager;

    onDatabaseConnectionError() {
        saveInHistorical(databaseAlarm);
        alarmManager.sendAlarm(databaseAlarm);
    }

    saveInHistorical(historical) {
        connection.store(historical);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想你通过查看代码得到了这个想法.如果有警报,我们会在AlarmManager中收到警报,但需要将其保存在历史数据库中.但是,如果我们与历史数据库有连接错误,我们还需要发送警报.

这真的是一个循环引用,其中main有报警但是报警也有主要和数据库/ main相同?你会如何解决它?

java oop

5
推荐指数
1
解决办法
584
查看次数

在第一个实例化仍在执行其静态块时实例化一个类

假设我在类中有静态块,需要5秒才能完成.在此5秒过去之前,将执行同一类的新实例化.在这种情况下会发生什么?第二个实例化是否会延迟,直到第一个实例化完成?在这种情况下,静态块是否充当实例化的"同步器"?两个实例都是并行执行的吗?

PD请不要开始讨论慢速静态块是否坏.

java

3
推荐指数
1
解决办法
83
查看次数

标签 统计

java ×4

database ×1

git ×1

git-svn ×1

jdbc ×1

oop ×1