连接到sqlsever时无法在java中运行restfull webservice

时间:2017-02-20 13:09:44

标签: java sql-server json web-services jdbc

我正在尝试调用以json格式从我的sqlsever数据库返回数据的Web服务

这是我从sqlsever获取数据并将其转换为json的代码。 这里函数getAllDataJson()返回结果的String值。 当我将其显示为

时,这工作正常
SqlDatabase db = new SqlDatabase();
System.out.println(db.getAllDataJson);

但是当我从webservice调用它时它无效(这个webservice配置也很好,我使用这个webservice在它工作正常之前返回json String)

如果我将这两者结合起来,它会在函数getAllData()中显示错误(在下面的返回码中) 在这一行:

rs = stmt.executeQuery("select * from persons");

显示nullPointerException It is showing this error

如果将其作为java应用程序运行,则不会出现相同的错误,只有当我在webservice上运行时才会出现

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

public class SqlDatabase {
    private static final String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
        "databaseName=FIRST;integratedSecurity=true;";
    Connection con = null;
    Statement stmt = null;

private void connectToDb(){
    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        con = DriverManager.getConnection(connectionUrl);           
        stmt = con.createStatement();
    } catch (SQLException e) {
        System.out.println("error occured at Database Connection");
    } catch (ClassNotFoundException e) {
        System.out.println("Class not found");
    }
}


void closeDb(){
    try{
        if(con != null){con.close();}
        if(stmt!=null){stmt.close();}
    }catch(SQLException e){
        System.out.println("error occured while closing Database Connection");
    }
}


public ResultSet getAllData(){
    ResultSet rs = null;
    connectToDb();
    try {
        rs = stmt.executeQuery("select * from persons");
    } catch (SQLException e) {
        System.out.println("error occured while getting data");
    }
    return rs;  
}

public String getAllDataJson() throws JSONException{

    ResultSet rs = getAllData();
    if(rs == null){return null;}

    JSONArray jArray = new JSONArray();
    JSONObject json = null;

    //data to json
    try {
        while(rs.next()){
            for(int i = 1;i<=rs.getMetaData().getColumnCount();i++){
                json = new JSONObject();                    

                json.put(rs.getMetaData().getColumnName(i), rs.getString(i));
            }
            jArray.put(json);
        }
    } catch (SQLException e) {
        System.out.println("near Json");
    }

    return jArray.toString();
}


}

1 个答案:

答案 0 :(得分:0)

查看您的数据库主机网址dbc:sqlserver://localhost:1433

它说localhost。意味着它将始终检查安装在执行它的同一台机器上的数据库服务器。

检查数据库服务器和Web服务器是否安装在同一台计算机上。如果不是localhost,则最好使用IP地址。将localhost替换为正在运行的DB服务器的IP。

假设运行数据库服务器的系统的IP是182.10.10.45,那么

dbc:sqlserver://182.10.10.45:1433