标签: jdbc

“来自客户端的 Sql*net 消息”中的会话,但处于活动状态

我用谷歌搜索了一下,我的印象是

来自客户端的 Sql*net 消息

表明 Oracle DBMS 正在等待客户端向 DBMS 发送新命令,因此在此事件中花费的任何时间都应该是客户端时间,而不是消耗 DB 服务器 CPU。换句话说,通常情况下,如果一个会话在这个事件中,它应该是“INACTIVE”而不是“ACTIVE”。

令我们困惑的是,从本周开始(在我们开始使用连接池之后 [我们使用 dbcp]),我们偶尔会在

来自客户端的 Sql*net 消息

事件并长时间同时显示“ACTIVE”。在这段时间内,DB 上的 CPU 使用率很高。

谁能解释一下这意味着什么?如果 DB 会话正在等待客户端发送消息,那么它可以是“ACTIVE”并消耗 CPU 周期的原因是什么?

oracle jdbc session

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

如何从 Oracle SQL 脚本中分离出单独的 sql 语句以从 Java 代码中执行

我有 Oracle DB 11g 企业版,我想从我的 java 代码执行 sql 脚本。我正在从 .sql 文件中读取这个 sql 脚本,该脚本包含诸如create table, create type, alter table, drop type, 之类的语句drop procedureinsert into以及带有beginend以及所有此类构造的pl/sql 块。

我的问题是,如何将单独的 sql 语句从 java 代码中分离出来执行?在 MS SQL 中,我可以简单地按GO关键字分隔这些 sql 语句,而在 Oracle db 中没有这样的分隔符。那么通常什么在 Oracle db 脚本中用作分隔符?


例如,我在我的 sql 脚本和其他 sql 语句中有以下创建触发器块。这里我有分号,我不能将其视为 SQL 语句终止符(PL/SQL 块本身可以包含多个分号分隔的语句)。这意味着我不能使用;类似于GO(在 MS SQL 中)。

CREATE OR REPLACE TRIGGER SQLVersionHistory_SeqNum_TRG
   BEFORE INSERT 
   ON SQLVersionHistory
   FOR …
Run Code Online (Sandbox Code Playgroud)

oracle plsql jdbc java

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

调用存储过程的 MySQL 开销

在 Java 中,我们通过 JDBC 访问 MySQL (v5.5.40)——一个准备语句,设置参数然后调用存储过程。似乎每个 execute() 在实际 SP 调用之前都有 4 个元调用(每个 MySQL 查询日志)的开销:

SELECT name, type, comment FROM mysql.proc WHERE name like...
SHOW FUNCTION STATUS LIKE 'sp_one'
SHOW PROCEDURE STATUS LIKE 'sp_one'
SHOW CREATE PROCEDURE `db-name`.`sp_one`
CALL sp_one()
Run Code Online (Sandbox Code Playgroud)

这是服务器端的预期行为吗?只是看起来效率不高。

以下是我们如何使用 API 的示例:

  conn = DriverManager.getConnection(..);

  stmt = conn.prepareCall("{call sp_one(?,?)}");

  stmt.setString(1, "a");
  stmt.setString(2, "b");

  stmt.execute();
Run Code Online (Sandbox Code Playgroud)

请注意以下情况是正确的:

  • 未使用 CallableStatement.getMetadata()
  • 参数按索引访问,而不是按名称访问

谢谢!

mysql stored-procedures jdbc mysql-5.5

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

JDBC 本地 MSSQL Server 连接字符串

我已经安装了开源数据库管理工具“dbeaver”,想用它来代替 Sql Server Management Studio。但有一个问题。我从互联网上搜索,但不知何故我无法使用 dbeaver 连接到数据库。

我的实例名称是:“OMER-HP\OKSQLEXPRESS2014” 我要连接:“Follower” db 用户名:sa 密码:Aa123456

连接字符串:jdbc:sqlserver://localhost:1433;databaseName=Follower;instanceName=OMER-HP\OKSQLEXPRESS2014;

你能帮忙解决这个问题吗

这是截图: 在此处输入图片说明

sql-server jdbc connections

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

在 jdbc 迁移中使用 SELECT 调用函数

我正在寻找使用 clojure/jdbc 设置一些 Postgres/PostGIS 迁移。

运行副作用函数 withSELECT被证明是一个问题,大多数迁移库最终都会抛出A result was returned when none was expected错误,因为在某些时候它们使用clojure.java.jdbc/execute!or clojure.java.jdbc/db-do-commands,这似乎可以理解,但是当您需要调用对迁移至关重要的函数时令人沮丧。

PostGIS中的文档鼓励使用SELECT语句来创建空间列:

SELECT AddGeometryColumn('parks', 'park_geom', 128, 'MULTIPOLYGON', 2 );
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个问题或找到了在 clojure/jdbc 和 Postgres 迁移中使用函数的适当解决方法?


相关花絮:

  • 这个手动注册空间列的描述看起来很有希望,但对于已经具有支持功能的东西来说似乎非常严厉
  • 也有PL/PgSQLPERFORM说法,我偶然发现,但它好像我在该点处抓救命稻草,尽管它看起来很有希望
  • clojure.java.jdbc/execute!文档给出关于仅使用“一般(非选择)SQL 操作 [s]”的特定提示

postgresql jdbc postgis clojure

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

在连接之间保留 H2 内存数据库

我使用 Java 中的以下代码创建并使用内存中的 H2 数据库(不写入存储)进行演示和快速测试:

 Connection conn = DriverManager.getConnection( "jdbc:h2:mem:example_db" ) ;
Run Code Online (Sandbox Code Playgroud)

这第一次有效,但随后数据库似乎消失了,无法进行进一步的工作。如何随着时间的推移使用相同的内存数据库?

jdbc java h2 in-memory-database connections

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

Sybase 如何存储日期时间信息?

我们有一个 Sybase 数据库,当前在某些表中存储日期时间值。如果我们将装有 Sybase 数据库的服务器移动到位于另一个时区的另一个国家/地区,数据库中的日期时间值是否会以不同的方式表示?

换句话说,请考虑以下场景:

Sybase 数据库在时区 +2:00 运行。

从我位于时区 +1:00 的 Java 应用程序中,它将 1970 年 1 月 1 日 1:00 写入数据库,这是应用程序时区中的纪元 0。

preparedStatement.setTimestamp(3, new Timestamp(0));
Run Code Online (Sandbox Code Playgroud)

但是,当我使用 SQL Workbench/J 客户端(时区 +1:00)查询数据库时,我看到

1970-01-01 01:00:00
Run Code Online (Sandbox Code Playgroud)

在我的桌子上。事实上,无论我将计算机时钟更改为哪个时区,SQL Workbench/J 客户端始终1970-01-01 01:00:00从数据库中读取数据。

位于时区 +3:00 的另一个 Java 客户端读取的值与

1970-01-01 01:00:00
Run Code Online (Sandbox Code Playgroud)

翻译为纪元-7200000-2:00客户的时区!

那么回到我原来的问题,Sybase 是否将日期时间值存储为字符串或纪元?我没有可以进行实验的免费 Sybase 服务器,那么当我们将服务器移动到另一个时区不同的国家/地区时,我们会发生什么情况呢?

我们使用的类型是“datetime”,例如:

CREATE TABLE "dbo"."whatever" (eventDate datetime NOT NULL);
Run Code Online (Sandbox Code Playgroud)

sybase jdbc java timezone datetime

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

在客户端配置sqlnet.ora和tnsnames.ora

我有一个应用程序服务器使用 Oracle 即时客户端与 Oracle 数据库进行通信。我们正在解决一个特定的错误,有人询问我是否可以将以下标志添加到我的 sqlnet.ora 文件中:

DIAG_ADR_ENABLED=OFF
DIAG_SIGHANDLER_ENABLED=FALSE
DIAG_DDE_ENABLED=FALSE
Run Code Online (Sandbox Code Playgroud)

在此请求之前,我们在客户端不需要 sqlnet.ora 文件,使用即时客户端,我们可以引用 ojdbc6.jar 的类路径和 jar 目录的 ld_library_path,并使用如下 URL:

jdbc:oracle:oci:@server:port:sid
Run Code Online (Sandbox Code Playgroud)

查看 Oracle 文档,如果我为 ORACLE_HOME 和 TNS_ADMIN 添加环境变量,我似乎可以在客户端引用 sqlnet.ora 文件和/或 tnsnames.ora 文件。

我使用上面的参数创建了 sqlnet.ora 文件,并添加了一些跟踪参数,以便我可以验证该文件是否正在被读取:

TRACE_LEVEL_CLIENT=10
TRACE_DIRECTORY_CLIENT=/tmp
Run Code Online (Sandbox Code Playgroud)

我还创建了一个 tnsnames.ora 文件:

APPDB =
    (DESCRIPTION =
        (ADDRESS LIST =
                (ADDRESS = (PROTOCOL = TCP)(HOST = *host*)(Port = *port*)))
        (CONNECT_DATA =
                (SERVER = DEDICATED)
                (SERVICE_NAME = *service*)))
Run Code Online (Sandbox Code Playgroud)

最后,我添加了环境变量,并重新启动了应用程序。我尝试使用原始的更简单的 URL,很明显,设置没有被拾取,正如我期望的那样,跟踪标志在读取文件时会创建一个文件。接下来,我尝试使用 TNS 名称创建 URL,根据文档,该名称听起来像是会在 TNS_ADMIN 中查找要连接的其他文件。

jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS LIST=(ADDRESS = (PROTOCOL = TCP)(HOST = *host*)(Port = *port*)))(CONNECT_DATA …
Run Code Online (Sandbox Code Playgroud)

oracle jdbc

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

通过架构内的扩展添加的访问运算符

我正在编写一个使用 postgres 的应用程序。每个微服务在数据库中使用自己的架构。

所以连接到我使用这个 jdbc 字符串的数据库模式:

jdbc:postgresql://${db.host}/${db.name}?currentSchema=${schema}
Run Code Online (Sandbox Code Playgroud)

这种工作原理,因此每个 sql 语句都可以使用架构内的表,而不会出现意外访问其他服务架构的危险。

但在一种模式中,我想使用地球距离扩展。我只设法在没有设置架构的情况下安装它,当我在没有 currentSchema 参数的情况下连接到数据库时,我可以访问 <@> 运算符来计算距离。但是使用参数 postgres 抱怨它无法找到运算符。

当我连接 currentSchema 参数时,有没有办法访问公共命名空间中的运算符?

我有点迷失在这里:-(

postgresql jdbc postgresql-9.4

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

替换 PostgreSQL 中的大对象

当人们希望用一个新的大对象替换一个大对象时应该怎么做。一个示例是使用新版本更新上传的文件。

一种方法大概是创建一个新的大对象,更新到新 oid 的链接,然后取消旧对象的链接。但是替换现有数据是否合理,例如,通过覆盖原始数据(可能首先截断内容)?

FWIW 我会在 JDBC 和 PostgreSQL 9.4 中这样做。

postgresql jdbc blob

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