我正在努力让我的数据库与我的Java程序对话.
有人可以使用JDBC给我一个快速而又脏的示例程序吗?
我收到了一个相当惊人的错误:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at SqlTest.main(SqlTest.java:22)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The …
Run Code Online (Sandbox Code Playgroud) Class.forName()
和之间有什么区别Class.forName().newInstance()
?
我不明白这个显着的区别(我已经读过一些关于它们的东西!).请你帮助我好吗?
我正在尝试将已启用数据库的JSP添加到现有的Tomcat 5.5应用程序(GeoServer 2.0.0,如果有帮助的话).
该应用程序本身与Postgres谈话很好,所以我知道数据库已启动,用户可以访问它,所有这些好东西.我想要做的是在我添加的JSP中的数据库查询.我已经在Tomcat数据源示例中使用了配置示例,非常开箱即用.必要的taglibs位于正确的位置 - 如果我只有taglib refs就不会发生错误,因此它会找到那些JAR.postgres jdbc驱动程序postgresql-8.4.701.jdbc3.jar位于$ CATALINA_HOME/common/lib中.
这是JSP的顶部:
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<sql:query var="rs" dataSource="jdbc/mmas">
select current_validstart as ValidTime from runoff_forecast_valid_time
</sql:query>
Run Code Online (Sandbox Code Playgroud)
来自$ CATALINA_HOME/conf/server.xml的相关部分,其内部<Host>
依次是<Engine>
:
<Context path="/gs2" allowLinking="true">
<Resource name="jdbc/mmas" type="javax.sql.Datasource"
auth="Container" driverClassName="org.postgresql.Driver"
maxActive="100" maxIdle="30" maxWait="10000"
username="mmas" password="very_secure_yess_precious!"
url="jdbc:postgresql//localhost:5432/mmas" />
</Context>
Run Code Online (Sandbox Code Playgroud)
这些行是webapps/gs2/WEB-INF/web.xml中标记的最后一行:
<resource-ref>
<description>
The database resource for the MMAS PostGIS database
</description>
<res-ref-name>
jdbc/mmas
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)
最后,例外:
exception
org.apache.jasper.JasperException: Unable …
Run Code Online (Sandbox Code Playgroud) 使用Java,我在尝试连接到mysql数据库时遇到此错误:
java.sql.SQLException: No suitable driver found for
jdbc:mysql://localhost:3306/mysql at
java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at MyTest1.main(MyTest1.java:28)
Run Code Online (Sandbox Code Playgroud)
我正在使用mysql-connector-java-5.1.18-bin.jar
驱动程序.它在我的构建路径中.我重启了MySQL.我还从root命令行登录,没有密码,连接正常.我目前没有在netstat中看到端口3306.以前我得到了一个不同的错误(我没有更改代码).错误是"jdbc mysql访问被拒绝用户'root'@'localhost密码NO"
try {
Class.forName("com.mysql.jdbc.Driver");
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
String url = "jdbc:mysql://localhost:3306/mysql";
Connection con = DriverManager.getConnection(url, "root", "");
}
catch (Exception e){
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 我在Tomcat上运行Web应用程序.我有一个处理所有数据库查询的类.此类包含Connection
返回查询结果的对象和方法.
这是连接对象:
private static Connection conn = null;
Run Code Online (Sandbox Code Playgroud)
它只有一个实例(单例).
另外,我有执行查询的方法,例如在db中搜索用户:
public static ResultSet searchUser(String user, String pass) throws SQLException
Run Code Online (Sandbox Code Playgroud)
此方法使用静态Connection
对象.我的问题是,我在静态Connection
对象线程中的使用是否安全?或者当很多用户调用该searchUser
方法时会引起问题吗?
这个问题可能在这里问了很多次.做了一些谷歌搜索上述错误并做了一些更新后,我无法理解为什么我仍然会收到该错误.我已经在类路径中放了我的驱动程序 - mysql-connector-java-5.1.5-bin:
Java_Home\jre\lib\
Java_Home\jre\lib\ext\
Java_Home\lib
Run Code Online (Sandbox Code Playgroud)
我用来连接mysql数据库的代码是:
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mail","root","");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select message_body from deadletter");
String dbtime;
while (rs.next()) {
dbtime = rs.getString(1);
System.out.println(dbtime);
}
con.close();
}
catch (SQLException e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
以上异常的完整堆栈跟踪是:
java.lang.ClassNotFoundException: com.mysql.jdbc:Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at mail.main(mail.java:114)
Run Code Online (Sandbox Code Playgroud)
现在,我在这里做错了什么?
我有一个外部MySQL服务器,设置和工作正常.我在Eclipse中创建了一个数据库连接,可以在Data Source Explorer选项卡中查看数据库.
现在,我有一个需要访问该数据库的servlet.我该怎么做?有没有办法引用在数据源资源管理器中创建的数据库连接,还是我必须两次定义所有内容?
另外,打开连接的最佳方法是什么?我已经mysql-connector-java-5.1.11-bin.jar
包含了该文件,并且我发现了两种有效的方法:
MysqlDataSource d = new MysqlDataSource();
d.setUser("user");
d.setPassword("pass");
d.setServerName("hostname.com");
d.setDatabaseName("db");
Connection c = d.getConnection();
Run Code Online (Sandbox Code Playgroud)
和
Connection c = DriverManager.getConnection("jdbc:mysql://hostname.com/db","user","pass");
Run Code Online (Sandbox Code Playgroud)
两者都不是最佳的,因为首先,它们都使用硬编码的字符串.这是一个Java EE Web应用程序项目,是否有一个放置连接数据的好地方?或者有没有办法放弃所有这些并只使用数据源资源管理器中的连接?
我在java.lang.ClassNotFoundException
尝试运行代码时遇到异常,
我的守则
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/simple",
"root","root");
Statement stmt=con.createStatement();
String query="SELECT * FROM CUST";
ResultSet rs=stmt.executeQuery(query);
while(rs.next())
{
System.out.print(rs.getString("CUST_NAME") +" ");
System.out.print(rs.getString(2) +" ");
System.out.print(rs.getString(3) +" ");
}
rs.close();
stmt.close();
con.close();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
catch (SQLException e)
{
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我收到了错误
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at Simple.MyProg.main(MyProg.java:15)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
当我在maven test
本地运行时通过.但是当我在CI服务器上运行它时出现此错误.
Error Message
Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
Stacktrace
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
Caused by: org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Caused by: java.net.UnknownHostException: mysql …
Run Code Online (Sandbox Code Playgroud) 我编写了一个Java程序,程序连接到我服务器上的数据库,以查找记录,写入记录,更新和删除.由于某些原因,查找记录有效,但大多数情况下,当我尝试保存或写入记录时,它会显示一条错误消息:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 9,787 milliseconds ago. The last packet sent successfully to the server was 8,183 milliseconds ago.
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2552)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3002)
... 46 more
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么会这样吗?在软件运行超过半分钟后,通常这会在尝试添加记录时给出错误消息.似乎松动了连接或什么的.当我运行程序并快速写一个新记录时,它的工作原理
java ×8
jdbc ×6
mysql ×3
exception ×2
servlets ×2
tomcat ×2
class ×1
connection ×1
datasource ×1
docker ×1
geoserver ×1
jenkins ×1
postgresql ×1
spring ×1