package WBSer_RwCnt;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Rw_Count {
public static Connection getConnection() throws Exception {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost/hospital_data";
String username = "root";
String password = "mysql";
Class.forName(driver); // load MySQL driver
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
public static int countRows(Connection conn, String tableName) throws SQLException {
// select the number of rows in the table
Statement stmt = null;
ResultSet rs = null;
int rowCount = -1;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT COUNT(*) FROM " + tableName);
// get the number of rows from the result set
rs.next();
rowCount = rs.getInt(1);
} finally {
rs.close();
stmt.close();
}
return rowCount;
}
public static void main(String[] args) {
Connection conn = null;
try {
conn = getConnection();
String tableName = "hospital_status";
System.out.println("tableName=" + tableName);
System.out.println("conn=" + conn);
System.out.println("rowCount=" + countRows(conn, tableName));
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
} finally {
// release database resources
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
错误--->
The method "getConnection" on the service class "WBSer_RwCnt.Rw_Count" uses a data type, "java.sql.Connection", that is not supported
当我编译它而不创建它作为webservice它可以正常工作 但是,当我将其作为Web服务时,它将输出作为
输出--->
WBSer_RwCnt.Rw_CountSoapBindingStub@121a412b
请帮助!
所以这就是我所说的,即使那样,它也会产生以下错误
例外:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/hospital_data
消息:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/hospital_data
package WBSer_RwCnt;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Rw_Count {
public static int countRows() throws SQLException {
// select the number of rows in the table
Statement stmt = null;
ResultSet rs = null;
System.out.println("ram");
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost/hospital_data";
String username = "root";
String password = "mysql";
try {
Class.forName(driver);
}
catch (ClassNotFoundException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
// load MySQL driver
Connection conn = DriverManager.getConnection(url, username, password);
int rowCount = -1;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT COUNT(*) FROM hospital_status");
// get the number of rows from the result set
rs.next();
rowCount = rs.getInt(1);
}
catch (Exception e)
{
e.printStackTrace();
System.exit(1);
}
finally {
rs.close();
stmt.close();
conn.close();
}
return rowCount;
}
}
我添加了所有jar文件,包括java mysql连接器
答案 0 :(得分:1)
这不是一个完整的答案,因为我不完全确定您用来编译Web服务的工具,但无论如何,这里是:
基本上,连接只对特定计算机有效。如果它是TCP / IP连接,则它由两对组成:源主机和端口,以及目标主机和端口。如果它是Linux套接字,那么它就是该特定机器目录树中的一个条目。
数据库连接通常建立在其中一个构造上,所以它也是一台机器特有的。
因此,将Connection
对象传递给从某个远程计算机调用方法的用户是没有意义的。由于它没有意义,JAX-RPC标准不包括Connection
的序列化,以及它失败的原因。
您的问题是您已经设计了方法,使其接受连接作为参数,并使用该连接访问数据库。这在本地工作正常,但不是远程服务的好设计。
相反,您的方法应该在内部获取连接。远程用户应该只使用表格的countRows
方法访问,countRows
应该调用getConnection
,使用连接,然后关闭它。
您不应该在Web服务中使用main方法。并且getConnection
方法应该从public
更改为private
,以便countRows
可以访问它。当它是私有的时候,我相信Web服务编译器不会抱怨它,因为它不必为它创建序列化。