小编the*_*hee的帖子

JDBC + SQLite:DriveManager 未加载所需的驱动程序

我在使用 jdbc、SQLite 和 java 时遇到一些奇怪的错误DriveManager。根据相应的java docsDriveManager只要提供了jdbc,就可以自己加载需要的驱动。然而,对我来说,使用 SQLite 时这不起作用:

Connection conn = DriverManager.getConnection("jdbc:sqlite://" + pathToFile + File.separator + "database.db");
Run Code Online (Sandbox Code Playgroud)

执行此代码时,我得到一个 SQLException:No suitable driver found for jdbc:sqlite:pathToFile\database.db通常我会假设 jdbc 不是它应该的,但是,由于某种原因,以下工作有效:

Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite://" + pathToFile + File.separator + "database.db");
Run Code Online (Sandbox Code Playgroud)

这让我完全不明白为什么第一个版本不起作用。附带说明一下,MySQL 遵循相同的实现,无需使用Class.forName()也可以正常工作。一些帮助将不胜感激。

java sqlite jdbc

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

JOOQ pojos与一对多和多对多的关系

我正在努力理解如何处理与JOOQ的一对多和多对多关系的pojos.

我存储由玩家创建的位置(一对多关系).一个位置可以容纳多个可能访问它的其他玩家(多对多).数据库布局归结为以下内容:

CREATE TABLE IF NOT EXISTS `Player` (
  `player-id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `player` BINARY(16) NOT NULL,
  PRIMARY KEY (`player-id`),
  UNIQUE INDEX `U_player` (`player` ASC))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `Location` (
  `location-id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(32) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL,
  `player-id` INT UNSIGNED NOT NULL COMMENT '
  UNIQUE INDEX `U_name` (`name` ASC),
  PRIMARY KEY (`location-id`),
  INDEX `Location_Player_fk` (`player-id` ASC),
  CONSTRAINT `fk_location_players1`
    FOREIGN KEY (`player-id`)
    REFERENCES `Player` (`player-id`)
    ON …
Run Code Online (Sandbox Code Playgroud)

java sql many-to-many one-to-many jooq

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

实例控制的类和多线程

Effective Java第2章中,项目1 Bloch建议考虑使用静态工厂方法而不是构造函数来初始化对象.他提到的好处是这个模式允许类从重复的调用返回相同的对象:

静态工厂方法从重复调用返回同一对象的能力允许类在任何时候保持对存在的实例的严格控制.执行此操作的类称为实例控制.编写实例控制类有几个原因.实例控制允许类保证它是单例(第3项)或不可实例化(第4项).此外,它允许不可变类(第15项)保证不存在两个相等的实例:a.equals(b)当且仅当a == b时.

这种模式在多线程环境中如何工作?例如,我有一个应该由实例控制的不可变类,因为一次只能存在一个具有给定ID的实体:

public class Entity {

    private final UUID entityId;

    private static final Map<UUID, Entity> entities = new HashMap<UUID, Entity>();

    private Entity(UUID entityId) {
        this.entityId = entityId;
    }

    public static Entity newInstance(UUID entityId) {
        Entity entity = entities.get(entityId);
        if (entity == null) {
            entity = new Entity(entityId);
            entities.put(entityId, entity);
        }
        return entity;
    }

}
Run Code Online (Sandbox Code Playgroud)

如果我newInstance()从分离的线程调用会发生什么?如何让这个类线程安全?

java multithreading multiton

4
推荐指数
1
解决办法
1295
查看次数

Java中许可证头的注释样式

建议在每个文件的顶部添加许可证标题,其中包括版权和许可信息(例如,GPL3建议添加此信息).是否有标准的注释样式用于Java中的许可证标题,或者我可以使用我喜欢的任何内容吗?

我知道License Maven插件建议使用Javadoc样式的注释,这就是我现在正在使用的,但最近发现有些项目使用简单的多行表示(只有一个*).使用Javadoc工具时,类似Javadoc的注释会产生问题吗?

java licensing

4
推荐指数
1
解决办法
1103
查看次数

Java中的SQLite连接池 - 锁定数据库

我已经在多线程环境中阅读了几个关于SQLite的相关主题,但是我找不到一个明确的声明,所以请原谅我再次提出这个主题.

我需要从多个线程访问应用程序的数据库以执行更新语句.数据库本身可以是SQLite或MySQL,具体取决于用户的选择.对于MySQL处理程序,我使用tomcat-jdbc库实现了一个连接池.现在我正在搜索SQLite处理程序的最佳方法,因为正常的连接池不应该工作,因为SQLite一次只支持一个写入连接来锁定整个数据库.

我是否应该继续使用相同的连接(通过同步连接?)来创建所有线程?或者我应该使用已经存在的仅存在连接的tomcat库创建连接池?一个连接的连接池可能超大吗?

java sqlite multithreading connection-pooling

2
推荐指数
1
解决办法
6699
查看次数