2017-02-20 1 views
0

Я пытаюсь вызвать веб-сервис, который возвращает данные из моей базы данных sqlsever в формате JSONне удалось запустить restfull вебсервис в Java при подключении к sqlsever

Это мой код, чтобы получить данные из sqlsever и преобразовать его в формат JSON. Здесь функция getAllDataJson() возвращает строковое значение результата. Это работает хорошо, когда я называю его для отображения в качестве

SqlDatabase db = new SqlDatabase(); 
System.out.println(db.getAllDataJson); 

, но он не работает, когда я называю его с веб-сервиса (Эта конфигурация вебсервис также хорошо, я использовал этот WebService вернуть JSon строку до того, как его работал отлично)

если я объединить их и он показывает ошибку в функции getAllData() (которая находится в поле ниже код возврата) на линии:

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

он показывает ню llPointerException 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(); 
} 


} 
+0

Вы глотания исключения, и попытка в любом случае использовать соединение. В минимальном журнале регистрируется «SQLException» (или используйте 'e.printStackTrace()'), чтобы мы знали, что пошло не так. –

ответ

0

Смотрите в вашей БД хоста URL dbc:sqlserver://localhost:1433

Это говорит localhost. Это означает, что он всегда проверяет наличие сервера БД, установленного на том же компьютере, на котором он выполняется.

Проверьте, что сервер БД и веб-сервер установлены на одном компьютере. Если вместо localhost вам лучше использовать IP-адрес. Замените localhost IP-сервером сервера.

Предположим, что IP-системы, где сервер БД работает в 182.10.10.45 то

dbc:sqlserver://182.10.10.45:1433