在 WebService (JAX-WS) 中创建方法以将数据发送到 mysql 数据库
Create method in WebService (JAX-WS) to send data to mysql DB
大家好..
我是 web 服务的新手,所以尝试在 glass fish server 4.1.1 上创建简单的 web 服务 (jax-ws),此服务将数据发送到 mysql 数据库,如 this but I'm getting this error为什么我不知道!?!?
我的代码:
package com.me.coder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
/**
*
* @author MacbookPro
*/
@WebService(serviceName = "GetWriteToDB")
public class GetWriteToDB {
/**
* Web service operation
*/
@WebMethod(operationName = "sendToDb")
public void sendToDb(@WebParam(name = "id") int id, @WebParam(name = "name") String name, @WebParam(name = "location") double location, @WebParam(name = "date") String date) {
String host = "jdbc:mysql://localhost/onurDB";
String user = "onur";
String pass = "onurdb958";
try(Connection conn = DriverManager.getConnection(host,user,pass);
Statement smt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
){
String SQL = "INSERT INTO `GoogleLoc`(`ID`, `NAME`, `LOCATION`, `DATE`) VALUES ('" + id + "','" + name + "','"+ location + "','" + date + "')";
smt.executeUpdate(SQL);
}catch(SQLException ex){
System.out.println("SQLException : " + ex);
}
}
}
对于控制,在 java SE class 中尝试使用相同的代码效果很好。
像这样:
package send;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* @author MacbookPro
*/
public class Send {
/**
* @param args the command line arguments
*/
private static String name,date;
private static int location,id;
public static void main(String[] args) throws IOException {
String host = "jdbc:mysql://localhost/onurDB";
String user = "onur";
String pass = "onurdb958";
try(Connection conn = DriverManager.getConnection(host,user,pass);
Statement smt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
){
insertData(smt);
}catch(SQLException ex){
System.out.println("SQLException : " + ex);
}
}
private static void insertData(Statement smt) throws SQLException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter ID : ");
String id = bf.readLine();
System.out.print("Enter Name : ");
String name = bf.readLine();
System.out.print("Enter Location : ");
String location = bf.readLine();
System.out.print("Enter Date : ");
String date = bf.readLine();
String sql;
sql = "INSERT INTO `GoogleLoc`(`ID`, `NAME`, `LOCATION`, `DATE`) VALUES ('" + id + "','" + name + "','"
+ location + "','" + date + "')";
smt.executeUpdate(sql);
System.out.println("Success! data inserted.");
}
}
我可以想象我在@WebMethod 中的错误
有人可以帮帮我吗???
感谢大家..
您的 NullPointerException
是从 WebserviceTesterServlet
class 提出的,它是一个 GlassFish WS 工具 class,可以帮助您调用网络服务。它是您的网络服务的图形客户端。
也许,问题来自这个 class,也许来自你的实现。
有了这个stracktrace,就很难猜了。
问题是 WebserviceTesterServlet
没有提供有用的异常。
所以,我们无法理解原因。
我建议你三个解决方案来解决你的问题:
- 下载包含
WebserviceTesterServlet
的源jar(取你使用的版本),在class的第342行打断点,运行你的服务器处于调试模式。
- 正在尝试使用 SOAP UI 调用您的操作。
- 创建您自己的调用 webService 的代码并测试您的 webservice 操作。您可以通过生成代理 classes 轻松地做到这一点。例如,您可以使用 JAX-WS 并执行 wsimport。
已解决!
我们需要像这样更改代码:
package com.me.coder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.ws.rs.GET;
/**
*
* @author Coder ACJHP
*/
@WebService(serviceName = "GetWriteToDB")
public class GetWriteToDB {
/**
* Web service operation
*
* @param id
* @param name
* @param location
* @param date
* @return
*/
@GET
@WebMethod(operationName = "insertUser")
public boolean insertUser(@WebParam(name = "id") int id, @WebParam(name = "name") String name,
@WebParam(name = "location") double location, @WebParam(name = "date") String date) {
boolean insertStatus = false;
final String host = "jdbc:mysql://localhost/onurDB";
final String user = "onur";
final String pass = "onurdb958";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
Logger.getLogger(GetWriteToDB.class.getName()).log(Level.SEVERE, null, ex);
}
try (
Connection conn = DriverManager.getConnection(host, user, pass);
Statement smt = conn.createStatement();) {
String SQL = "INSERT INTO `GoogleLoc`(`ID`, `NAME`, `LOCATION`, `DATE`) VALUES ('" + id + "','" + name + "','" + location + "','" + date + "')";
int x = smt.executeUpdate(SQL);
if (x > 0) {
insertStatus = true;
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return insertStatus;
}
}
大家好..
我是 web 服务的新手,所以尝试在 glass fish server 4.1.1 上创建简单的 web 服务 (jax-ws),此服务将数据发送到 mysql 数据库,如 this but I'm getting this error为什么我不知道!?!?
我的代码:
package com.me.coder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
/**
*
* @author MacbookPro
*/
@WebService(serviceName = "GetWriteToDB")
public class GetWriteToDB {
/**
* Web service operation
*/
@WebMethod(operationName = "sendToDb")
public void sendToDb(@WebParam(name = "id") int id, @WebParam(name = "name") String name, @WebParam(name = "location") double location, @WebParam(name = "date") String date) {
String host = "jdbc:mysql://localhost/onurDB";
String user = "onur";
String pass = "onurdb958";
try(Connection conn = DriverManager.getConnection(host,user,pass);
Statement smt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
){
String SQL = "INSERT INTO `GoogleLoc`(`ID`, `NAME`, `LOCATION`, `DATE`) VALUES ('" + id + "','" + name + "','"+ location + "','" + date + "')";
smt.executeUpdate(SQL);
}catch(SQLException ex){
System.out.println("SQLException : " + ex);
}
}
}
对于控制,在 java SE class 中尝试使用相同的代码效果很好。 像这样:
package send;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* @author MacbookPro
*/
public class Send {
/**
* @param args the command line arguments
*/
private static String name,date;
private static int location,id;
public static void main(String[] args) throws IOException {
String host = "jdbc:mysql://localhost/onurDB";
String user = "onur";
String pass = "onurdb958";
try(Connection conn = DriverManager.getConnection(host,user,pass);
Statement smt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
){
insertData(smt);
}catch(SQLException ex){
System.out.println("SQLException : " + ex);
}
}
private static void insertData(Statement smt) throws SQLException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter ID : ");
String id = bf.readLine();
System.out.print("Enter Name : ");
String name = bf.readLine();
System.out.print("Enter Location : ");
String location = bf.readLine();
System.out.print("Enter Date : ");
String date = bf.readLine();
String sql;
sql = "INSERT INTO `GoogleLoc`(`ID`, `NAME`, `LOCATION`, `DATE`) VALUES ('" + id + "','" + name + "','"
+ location + "','" + date + "')";
smt.executeUpdate(sql);
System.out.println("Success! data inserted.");
}
}
我可以想象我在@WebMethod 中的错误
有人可以帮帮我吗???
感谢大家..
您的 NullPointerException
是从 WebserviceTesterServlet
class 提出的,它是一个 GlassFish WS 工具 class,可以帮助您调用网络服务。它是您的网络服务的图形客户端。
也许,问题来自这个 class,也许来自你的实现。
有了这个stracktrace,就很难猜了。
问题是 WebserviceTesterServlet
没有提供有用的异常。
所以,我们无法理解原因。
我建议你三个解决方案来解决你的问题:
- 下载包含
WebserviceTesterServlet
的源jar(取你使用的版本),在class的第342行打断点,运行你的服务器处于调试模式。 - 正在尝试使用 SOAP UI 调用您的操作。
- 创建您自己的调用 webService 的代码并测试您的 webservice 操作。您可以通过生成代理 classes 轻松地做到这一点。例如,您可以使用 JAX-WS 并执行 wsimport。
已解决!
我们需要像这样更改代码:
package com.me.coder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.ws.rs.GET;
/**
*
* @author Coder ACJHP
*/
@WebService(serviceName = "GetWriteToDB")
public class GetWriteToDB {
/**
* Web service operation
*
* @param id
* @param name
* @param location
* @param date
* @return
*/
@GET
@WebMethod(operationName = "insertUser")
public boolean insertUser(@WebParam(name = "id") int id, @WebParam(name = "name") String name,
@WebParam(name = "location") double location, @WebParam(name = "date") String date) {
boolean insertStatus = false;
final String host = "jdbc:mysql://localhost/onurDB";
final String user = "onur";
final String pass = "onurdb958";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
Logger.getLogger(GetWriteToDB.class.getName()).log(Level.SEVERE, null, ex);
}
try (
Connection conn = DriverManager.getConnection(host, user, pass);
Statement smt = conn.createStatement();) {
String SQL = "INSERT INTO `GoogleLoc`(`ID`, `NAME`, `LOCATION`, `DATE`) VALUES ('" + id + "','" + name + "','" + location + "','" + date + "')";
int x = smt.executeUpdate(SQL);
if (x > 0) {
insertStatus = true;
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return insertStatus;
}
}