我正在尝试使用标准JDBC方式连接到DB
connection = DriverManager.getConnection(url, username, password);
Run Code Online (Sandbox Code Playgroud)
连接上是否存在最大超时值,连接存在多长时间,是否可以增加该值.我希望在连接永远打开的情况下,这是一个好主意.
我在本地计算机上安装了phpMyAdmin.如何将其连接到外部服务器?
我收到以下错误:
数据库连接失败:mysqlnd无法使用旧的不安全身份验证连接到MySQL 4.1+.请使用管理工具使用该命令重置密码
SET PASSWORD = PASSWORD('your_existing_password').这将存储一个新的,更安全的哈希值
mysql.user.如果在PHP 5.2或更早版本执行的其他脚本中使用此用户,则可能需要从my.cnf文件中删除旧密码标志
我在我的本地机器上使用PHP 5.3.8和MySQL 5.5.16,我的主机(media temple)运行PHP 5.3 MySQL 5.0.51a.实时服务器上的版本比我机器上的版本旧.
如何修复此错误并从本地计算机连接到MySQL?
我知道这个帖子有类似的帖子,但是我已经尝试了所有这些帖子,但没有一个在工作.
这与这篇文章有关.
我认为我的H2意思是它没有正确关闭.
我怀疑这是因为我看到myDB.lock.db我关闭tomcat并且进程没有停止.
我使用Tomcat的连接池,数据库的URL是:
url="jdbc:h2:file:/opt/myOrg/tomcat/webapps/MyApplication/db/myDatabase;SCHEMA=myschema"
从文件关闭H2:
通常,数据库在最后一次连接关闭时关闭....默认情况下,数据库在最后一个连接关闭时关闭.但是,如果它从未关闭,则在虚拟机使用关闭挂钩正常退出时,数据库将关闭
我无法理解我是否做错了什么.
我应该通过命令强制关闭数据库吗?这是关机钩子的意思吗?
我在这做错了什么?
注意:
我在Google中找不到如何H2正确关闭的示例(除了它在上次连接关闭时自动关闭的声明).我应该给SHUTDOWN自己打电话吗 这是正确的方法吗?
我已经看到投票来结束这个问题了,但我正在研究的一个例子没有理由或联系
更新:
在Joonas Pulakka回答一些额外信息之后:
从javacore我使用kill -3我看到的线程:
"H2 Log Writer MYAPPLICATION"J9VMThread:0x08DC6F00,j9thread_t:0x08C9B790,java/lang/Thread:0xE7206CC8,状态:CW,prio = 5 3XMTHREADINFO1(本机线程ID:0xA32,原生优先级:0x5,本机策略:UNKNOWN)3XMTHREADINFO2
(原生)堆栈地址范围从:0xE5E26000,到:0xE5E67000,大小:0x41000)3XMTHREADINFO3 Java callstack:
java/lang/Object.wait上的
4XESTACKTRACE (本机方法)java/lang/Object.wait上的4XESTACKTRACE(Object.java:196(编译代码) ))4xESTACKTRACE at org/h2/store/WriterThread.run(WriterThread.java:102)
4XESTACKTRACE at java/lang/Thread.run(Thread.java:736)3XMTHREADINFO"pool-8-thread-1"J9VMThread:0x087C0200,j9thread_t:0x0840566C,java/lang/Thread:0xE79BFC80,state:P,
prio = 5 3XMTHREADINFO1(本机线程ID:0xE1A,本机优先级:0x5,本机策略:UNKNOWN )3XMTHREADINFO2
(本机堆栈地址范围:0xE5F69000,至:0xE5FAA000,大小:0x41000)3XMTHREADINFO3 Java callstack:
4XESTACKTRACE at sun/misc/Unsafe.park(本机方法)
4XESTACKTRACE at java/util/concurrent/locks/LockSupport.park( LockSupport.java:184(Compiled Code))4XESTACKTRACE at java/util/concurrent/locks/AbstractQueuedSynchronizer $ ConditionObject.await(AbstractQueuedSynchronizer.java:1998(Compiled Code))4XESTACKTRACE at java/util/concurrent/LinkedBlockingQueue.take(LinkedBlockingQueue. java:413(编译代码))4XESTACKTRACE at …
我希望在django支持的Web应用程序中保持对第三方遗留数据库的持久连接.
我想保持Web应用程序和旧数据库之间的连接打开,因为为这个特殊的数据库创建新连接非常慢.
它不像通常的连接池,因为我需要存储每个Web用户的连接.用户"Foo"需要在Web服务器和旧版DB之间建立自己的连接.
到目前为止,我使用Apache和wsgi,但如果其他解决方案更合适,我可以改变.
到目前为止我使用django.在这里我也可以改变.但是痛苦会更大,因为已经有很多代码需要再次集成.
到目前为止,我使用Python.我想Node.js在这里会更合适,但改变的痛苦太高了.
当然需要某种超时.如果N分钟没有来自用户"Foo"的http请求,那么持久连接将需要关闭.
怎么能解决这个问题?
更新
我叫它,DB但它不是通过settings.DATABASES配置的数据库.这是一个奇怪的,传统的,不是广泛的类似DB的系统,我需要集成.
如果我现在有50个人在线使用网络应用程序,那么我需要有50个持久连接.每个用户一个.
用于连接到DB的代码
我可以在每个请求中执行此行:
strangedb_connection = strangedb.connect(request.user.username)
Run Code Online (Sandbox Code Playgroud)
但是这个操作很慢.使用连接很快.
当然strangedb_connection不能序列化,也不能存储在会话中:-)
我想使用Apache Commons DBCP在Java应用程序中启用连接池(此处没有容器提供的DataSource).在Web的许多站点(包括Apache站点)中,库的使用基于以下代码段:
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUsername("scott");
ds.setPassword("tiger");
ds.setUrl(connectURI);
Run Code Online (Sandbox Code Playgroud)
然后通过getConnection()方法获得数据库连接.但是在其他站点 - 以及Apache站点 - 数据源实例是通过以下方式实现的:
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(connectURI,null);
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory);
ObjectPool objectPool = new GenericObjectPool(poolableConnectionFactory);
PoolingDataSource dataSource = new PoolingDataSource(objectPool);
Run Code Online (Sandbox Code Playgroud)
他们之间有什么区别?我正在使用连接池BasicDataSource,或者我需要一个使用连接池的实例PoolingDataSource?是BasicDataSource线程安全的(我可以将它用作Class属性)还是我需要同步它的访问?
升级到Rails 4,似乎MySQL严格模式现在默认为Rails连接.我这样说是因为我的Rails应用程序在保存超过255个字符的字符串值时会收到"Mysql2 :: Error:数据太长了".然而,我将相同的查询粘贴到MySQL控制台(其中报告全局严格模式已关闭)并且它正常工作,只是截断警告.作为进一步的证据,它在这里说 "Rails 4默认使用严格模式".
我的问题是如何从Rails应用程序中关闭严格模式?我宁愿避免升级所有东西来支持它.
mysql database-connection ruby-on-rails strict ruby-on-rails-4
我写了下面的代码为java,并使用3路(OCI,薄,数据源),代码成功运行的Oracle 10g XE之间的连接,但不知道跟数据源连接薄和OCI之间的差异.
1-
public static void main (String args[]) throws SQLException
{
OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:hr/hr@localhost:1521/XE");
Connection con = ods.getConnection();
System.out.println("Connected");
con.close();
}
Run Code Online (Sandbox Code Playgroud)
2-
public static void main(String args[])
{
try
{
// load oracle driver
Class.forName("oracle.jdbc.driver.OracleDriver");
// connect using Thin driver
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","hr","hr");
System.out.println("Connected Successfully To Oracle");
con.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
3-
public static void main(String args[])
{
try
{
// load oracle driver
Class.forName("oracle.jdbc.driver.OracleDriver");
// connect using Native-API (OCI) …Run Code Online (Sandbox Code Playgroud) 想知道是否建议传递数据库连接对象(到其他模块)或让方法(在另一个模块中)负责设置它.我倾向于让方法设置它,以便在使用之前不必检查连接的状态,只是让调用者将任何所需的数据传递给设置连接所需的调用方法.
我在linux机器上有一个正在运行的PostgreSql本地实例.当我使用psqlshell中的命令时,我成功登录而没有任何问题.我需要通过JDBC连接到PostgreSql,但我不知道究竟应该将什么作为url参数传递给DriverManager.getConnection().
它应该从jdbc:postgresql:但接下来会发生什么?
系统组告诉我,创建了一个像用户名一样的数据库.例如,如果我的用户是jutky一个名为db的jutky创建者,但是当我尝试打开一个连接时,jdbc:postgresql:jutky我收到一个错误
org.postgresql.util.PSQLException: FATAL: password authentication failed for user "jutky"
:(
附加信息
当我通过psql提示登录时,我没有提示输入密码,所以当我尝试通过JDBC登录时,我传递一个空字符串作为密码 - 它是正确的,还是我应该通过null什么?
当我输入psql --helpshell时,我看到其余的这一行:
Connection options:
-h, --host=HOSTNAME database server host or socket directory (default: "/var/run/postgresql")
Run Code Online (Sandbox Code Playgroud)
所以我理解我通过a连接到PostgreSql socket directory,这对JDBC中的URL字符串有用吗?
编辑
首先要感谢答案.
第二:它不是我第一次使用JDBC,特别是我第一次从JDBC连接到PostgreSql,所以我知道一般规则,我已经阅读了文档.但是在描述的情况下,我不确定如果实例正在运行socket directory并且我应该提供什么密码,我应该如何构造连接字符串.因为当我通过登录时,psql我根本没有提示输入密码.
提前致谢.