【问题标题】:Java application fails to connect to mysql as non-root user in debianJava应用程序无法在debian中以非root用户身份连接到mysql
【发布时间】:2011-09-08 16:55:18
【问题描述】:

请参考Stumped SQL Exception for JDBC

以非 root debian 用户身份运行时,我遇到了类似的错误(如下所列)。但是如果 java 应用程序在 debian 中以 root 用户身份运行,则不会出现此错误。

应用程序被配置为以 root 用户身份连接到 mysql。

我在 my.cnf 中添加了以下条目后重新启动了系统,正如所提到的问题中所建议的那样。但是会出现同样的错误。

character_set_server=utf8 collat​​ion_server=utf8_general_ci

请帮忙。

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '????????????????' 附近使用正确的语法在第 1 行 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1026) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) 在 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) 在 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) 在 com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536) 在 com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet(ConnectionImpl.java:1751) 在 com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3425) 在 com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2045) 在 com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:718) 在 com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:298) 在 com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) 在 java.sql.DriverManager.getConnection(libgcj.so.10) 在 java.sql.DriverManager.getConnection(libgcj.so.10) 在 org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:65) 在 org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294) 在 org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:840) 在 org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96) 在 edu.amrita.jdbc.connectionpool.bundle.DBConnectionPoolImpl.getConnection(DBConnectionPoolImpl.java:95) 在 edu.amrita.devicetalk.protocol.aesccmp.DatabaseInterface.getRegisteredDevices(DatabaseInterface.java:116)

【问题讨论】:

  • 您作为 root/非 root 用户使用哪个 Java 发行版?尝试使用 sun-java6-jdk 包(非免费)。
  • 感谢您指出这一点。我在 root 中使用 sun-java6-jre。但它不适用于非 root 用户。它仍然使用 debian 默认提供的 java 我试过这个: 作为 root 用户,在 etc/profile.d 目录中创建了一个 java.sh 文件,内容为 export JAVA_HOME=/usr/java/jdk1.6.0_05/jre export PATH=$JAVA_HOME/bin:${PATH} 但这不起作用。你能帮我把 sun-java6 提供给非 root 用户吗?

标签: java mysql debian


【解决方案1】:

使用update-alternatives 命令(以root 身份)确保非root 用户使用Oracle Java(来自非免费的sun-java6-jdksun-java6-jre 包):

# update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                  Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gij-4.4                       1044      auto mode
  1            /usr/bin/gij-4.4                       1044      manual mode
  2            /usr/lib/jvm/java-6-sun/jre/bin/java   63        manual mode

Press enter to keep the current choice[*], or type selection number: 

选择适当的数字(此处为 2)。之后应该有:

$ java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 2014-08-10
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多