我正在尝试调用以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();
}
}
答案 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