我遇到的文章表明,SELECT COUNT(*) FROM TABLE_NAME当表有很多行和很多列时会很慢.
我有一个表可能包含数十亿行[它有大约15列].有没有更好的方法来获得表的行数的精确计数?
请在回答之前考虑以下事项:
我正在寻找独立于数据库供应商的解决方案.如果它涵盖MySQL,Oracle,MS SQL Server,那就没关系.但如果确实没有数据库供应商独立解决方案,那么我将为不同的数据库供应商寻求不同的解决方案.
我不能使用任何其他外部工具来做到这一点.我主要是在寻找基于SQL的解决方案.
我无法进一步规范我的数据库设计.它已经在3NF,而且已经编写了很多代码.
我最近开始阅读Joshua Bloch撰写的Effective Java.我发现Builder模式的概念[书中的第2项]非常有趣.我试图在我的项目中实现它,但有编译错误.以下是我试图做的事情:
具有多个属性及其构建器类的类:
public class NutritionalFacts {
private int sodium;
private int fat;
private int carbo;
public class Builder {
private int sodium;
private int fat;
private int carbo;
public Builder(int s) {
this.sodium = s;
}
public Builder fat(int f) {
this.fat = f;
return this;
}
public Builder carbo(int c) {
this.carbo = c;
return this;
}
public NutritionalFacts build() {
return new NutritionalFacts(this);
}
}
private NutritionalFacts(Builder b) {
this.sodium = b.sodium;
this.fat = b.fat;
this.carbo …Run Code Online (Sandbox Code Playgroud) 什么是关闭?它应该包含在Java 7中.(已经讨论了封装包含在Java 7中,但最终没有包括在内.-ed)任何人都可以向我提供一些可靠的参考资料,我可以从中学习有关闭包的内容吗?
System.exit()如果遇到异常,我正在使用第三方库.我正在使用jar中的API.无论如何,我可以阻止System.exit()调用,因为它导致我的应用程序关闭?System.exit()由于许多其他许可问题,我无法在删除之后反编译并重新编译jar .我曾经在stackoverflow中遇到过[我不记得的其他问题]的答案,我们可以使用SecurityManagerJava来做这样的事情.
那为什么java.util.List没有实现Serializable,而像子类LinkedList,Arraylist怎么办?它似乎不是违反继承原则吗?例如,如果我们想通过网络发送Linkedlist,我们必须写:
new ObjectOutputStream(some inputStream).writeObject(some LinkedList);
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都那么好,但在阅读另一方面的对象时,我们必须明确地说LinkedList l = (LinkedList)objectInputStream.readObject();而不是List l = (List)objectInputStream.readObject();.如果我们曾经更改编辑功能,从LinkedList地说ArrayList,我们也将不得不改变阅读部分.拥有List工具Serializable可以解决问题.
我不想拥有hibernate.cfg.xml文件.相反,我想通过我的代码进行所有配置,如下所示.
private static final SessionFactory factory;
private static final Properties properties;
static
{
properties = new Properties();
properties.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
properties.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/books");
properties.setProperty("hibernate.connection.username", "jhtp7");
properties.setProperty("hibernate.connection.password", "password");
properties.setProperty("hibernate.show_sql", "com.mysql.jdbc.Driver");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
factory = new Configuration().setProperties(properties).configure().
buildSessionFactory();
}
Run Code Online (Sandbox Code Playgroud)
我尝试过上述方法.但我面临的问题是,hibernate抛出一个异常说" ./hibernate.cfg.xml file missing".
保留hibernate.cfg.xml文件真的是强制性的吗?
提前致谢
我在我的数据库中定义了一个自定义类型
CREATE TYPE address AS (ip inet, port int);
Run Code Online (Sandbox Code Playgroud)
以及在数组中使用此类型的表:
CREATE TABLE my_table (
addresses address[] NULL
)
Run Code Online (Sandbox Code Playgroud)
我有一个包含以下内容的示例CSV文件
{(10.10.10.1,80),(10.10.10.2,443)}
{(10.10.10.3,8080),(10.10.10.4,4040)}
Run Code Online (Sandbox Code Playgroud)
我使用以下代码片段来执行我的COPY:
Class.forName("org.postgresql.Driver");
String input = loadCsvFromFile();
Reader reader = new StringReader(input);
Connection connection = DriverManager.getConnection(
"jdbc:postgresql://db_host:5432/db_name", "user",
"password");
CopyManager copyManager = connection.unwrap(PGConnection.class).getCopyAPI();
String copyCommand = "COPY my_table (addresses) " +
"FROM STDIN WITH (" +
"DELIMITER '\t', " +
"FORMAT csv, " +
"NULL '\\N', " +
"ESCAPE '\"', " +
"QUOTE '\"')";
copyManager.copyIn(copyCommand, reader);
Run Code Online (Sandbox Code Playgroud)
执行此程序会产生以下异常:
Exception in thread …Run Code Online (Sandbox Code Playgroud) 为什么java.util.Map接口不扩展java.util.Collection接口?不是java.util.MapKey-Value对的集合吗?
我遇到了一个问题,如果我ThreadPoolExecutor在创建池后尝试将 a的核心池大小调整为不同的数字,然后间歇性地,RejectedExecutionException即使我从未提交超过queueSize + maxPoolSize数量的任务,某些任务也会被拒绝。
我试图解决的问题是扩展ThreadPoolExecutor它,根据线程池队列中的挂起执行来调整其核心线程的大小。我需要这个,因为默认情况下,只有当队列已满时,aThreadPoolExecutor才会创建一个新的Thread。
这是一个小型的自包含 Pure Java 8 程序,用于演示该问题。
import static java.lang.Math.max;
import static java.lang.Math.min;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ThreadPoolResizeTest {
public static void main(String[] args) throws Exception {
// increase the number of iterations if unable to reproduce
// for me 100 iterations have been enough
int numberOfExecutions = 100;
for (int i = 1; i …Run Code Online (Sandbox Code Playgroud) java ×8
collections ×2
database ×2
closures ×1
hibernate ×1
inheritance ×1
interface ×1
jdbc ×1
list ×1
map ×1
postgresql ×1
sql ×1