繁体   English   中英

如何获取数据库表数据(oracle 11g)作为Json对象并在Android中显示该Json对象?

[英]How to get database table data(oracle 11g) as an Json object & to display that Json object in Android?

我正在尝试在android应用程序和oracle DB之间创建连接。 我发现必须创建一个Web服务,因此我开始编写一个servlet,它将创建与数据库的连接并将数据作为JSON对象返回,并可以在android上进行解析。
首先,我编写了一个servlet以HTML格式返回数据,这非常简单,以下是我的servlet代码

package a.b.c;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDatabaseConnect extends HttpServlet  
{
    protected void doPost(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
    {
        PrintWriter pw=res.getWriter();
        res.setContentType("text/html");        
        String tb=req.getParameter("table");    

        try
        {
             Class.forName("oracle.jdbc.driver.OracleDriver");
             Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","admin");
             Statement st=con.createStatement();
             System.out.println("connection established successfully...!!");     

             ResultSet rs=st.executeQuery("Select * from "+tb);

             pw.println("<table border=1>");
                 while(rs.next())
                 {
                     pw.println("<tr><td>"+rs.getInt(1)+"</td><td>"+rs.getString(2)+"</td>"+
                                      "<td>"+rs.getString(3)+"</td></tr>");
                 }
             pw.println("</table>");
             pw.close();
        }
        catch (Exception e){
            e.printStackTrace();
        }

    }
}

如何修改Servlet代码以返回JSON对象格式的数据?

您必须使用Jackson来将您的信息转换为json格式,此操作称为序列化,而Jackson是完成此任务的理想工具,您可以在此处查看一些示例

在这里,我找到了自己的答案,我使用了JSON-simple-1.1.jar,它可以在java2s.com上免费获得

following is my servlet code now

package servlet.package1;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;




@WebServlet("/ServletTalk")
public class ServletTalk extends HttpServlet {
    private static final long serialVersionUID = 1L;


    public ServletTalk() {
        super();
        // TODO Auto-generated constructor stub


    }

 // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //response.setContentType("text/html;charset=UTF-8");
        JSONObject json = new JSONObject();


        //ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
        Enumeration paramNames = request.getParameterNames();

        String[] params = new String[2];
        int i = 0;
        while (paramNames.hasMoreElements()) {
            String paramName = (String) paramNames.nextElement();


            //System.out.println(paramName);
            String[] paramValues = request.getParameterValues(paramName);
            params[i] = paramValues[0];

            //System.out.println(params[i]);
            i++;

        }

        String sql = "SELECT LOGIN_ID, PASSWORD FROM SE_USER where LOGIN_ID=? and PASSWORD=?";
        Connection con = getConnection();

        try {
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, params[0]);
            ps.setString(2, params[1]);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                json.put("info", "success");
                /*String sql1 = "SELECT uname, password FROM users";
                PreparedStatement ps2=con.prepareStatement(sql1);
                ResultSet rs2=ps2.executeQuery();
                JSONArray arrayJSON=new JSONArray();
                while(rs2.next())
                {
                    JSONObject arrayObject = new JSONObject();
                    arrayObject.put("userName", rs2.getString("uname"));
                    arrayObject.put("passWord", rs2.getString("password"));
                    arrayJSON.add(arrayObject);
                }


                json.put("IDS",arrayJSON);*/
            } else {
                json.put("info", "fail");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //System.out.println(json);
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        //json.put("info", disp);
        response.getWriter().write(json.toString());
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

    public static Connection getConnection() {
    Connection con = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");//Mysql Connection
        //Class.forName("oracle.jdbc.driver.OracleDriver");//Oracle Connection
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(ServletTalk.class.getName()).log(Level.SEVERE, null, ex);
    }
    try {
        con = DriverManager.getConnection("jdbc:mysql://localhost:8889/a9613246_mydata1", "root", "root");//mysql database
        //con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "hemabh_demo", "hemabh_demo");//oracle database

    } catch (SQLException ex) {
        Logger.getLogger(ServletTalk.class.getName()).log(Level.SEVERE, null, ex);
    }
    return con;
}



}

返回的JSON格式不正确,但无需任何外部库(如Gson等)就可以轻松解析。

找到答案很有趣...谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM