java - 使用 Java 将多个数据插入 Oracle 数据库

标签 java json oracle rally

以下是我检索拉力赛数据的代码。

public static void main(String[] args) throws URISyntaxException, IOException {

String host = "examplehost";
String username = "exampleuser";
String password = "password";
String projectRef   = "project";
String workspaceRef = "workspace"; 
String applicationName = "";
int queryLimit = 4000;
Connection conn        = null;
String propertiesFile  = "";
String projectValue = "";
String columnValue = "";
String returnValue = "";

    RallyRestApi restApi = new RallyRestApi(
            new URI(host),
            username,
            password);
    restApi.setApplicationName(applicationName); 
    System.out.println(restApi.getWsapiVersion()); 



    try{
         QueryRequest projectRequest = new QueryRequest("Project");
         projectRequest.setFetch(new Fetch("Name", "TeamMembers"));
         projectRequest.setWorkspace(workspaceRef);
             projectRequest.setProject(projectRef);
             projectRequest.setScopedDown(true);
         projectRequest.setQueryFilter(new QueryFilter("Name", "contains", "DT-"));  
         projectRequest.setLimit(queryLimit);
         QueryResponse projectQueryResponse = restApi.query(projectRequest);
         int count = projectQueryResponse.getResults().size();
         System.out.println(count);

         if(count > 0){
             for (int i=0;i<count;i++){
                 JsonObject projectObject = projectQueryResponse.getResults().get(i).getAsJsonObject();
                 JsonObject obj = projectObject.getAsJsonObject();                   
                 projectValue = JsonUtil.getJsonValue(obj, "_refObjectName");

                 System.out.println("Project: " + projectValue);
                 int numberOfTeamMembers = projectObject.getAsJsonObject("TeamMembers").get("Count").getAsInt();
                 if(numberOfTeamMembers > 0) {
                        QueryRequest teamRequest = new QueryRequest(projectObject.getAsJsonObject("TeamMembers"));
                        JsonArray teammates = restApi.query(teamRequest).getResults();
                        //JsonObject teammates = restApi.query(teamRequest).getResults();
                            if (teammates instanceof JsonArray) {
                                    JsonArray jsonarr = teammates.getAsJsonArray();
                                    //returnValue += squote;
                                    for (int j=0; j<jsonarr.size(); j++) {
                                        if (j>0) 
                                            returnValue += "\n";
                                        JsonObject tobj = jsonarr.get(j).getAsJsonObject();
                                        if (obj.has("Name"))
                                            columnValue = getJsonValue(tobj, "Name");
                                        if (obj.has("_refObjectName"))
                                            columnValue = JsonUtil.getJsonValue(tobj, "_refObjectName");
                                        returnValue += columnValue;
                                      System.out.println(columnValue);   
                                    }
                                    //returnValue += squote;
                                } 
                //columnValue = JsonUtil.getJsonString(teammates);      
                        //for (int j=0;j<numberOfTeamMembers;j++){
                            //JsonObject teamObject = teamQueryResponse.getResults().get(j).getAsJsonObject();


                            //System.out.println(teammates.get(j).getAsJsonObject().get("_refObjectName").getAsString());
                        //}
                    }
             }
         }

    }catch(Exception e){
        e.printStackTrace();

    } finally{
        restApi.close();
    }
}

我正在尝试将项目 ID 和关联的团队成员插入数据库。对于一个项目 ID 可能有 1-10 名成员,每个项目的数量可能有所不同。在数据库中,只有两个列保存项目 ID 和用户名。有人可以帮我解决这个请求吗?

希望有帮助。

如果您需要更多详细信息,请回复

谢谢

斯雷尔

最佳答案

根据您上面的评论,实际失败的行是:

st.executeUpdate("INSERT INTO CUST_RALLY_TEAM_MEMBER " + "VALUES projectValue,columnValue)");

在这里,您实际上是将这个字符串传递给 Oracle:

INSERT INTO CUST_RALLY_TEAM_MEMBER VALUES projectValue,columnValue)

您需要传递这些变量的(您还缺少一个左括号:

st.executeUpdate("INSERT INTO CUST_RALLY_TEAM_MEMBER VALUES ('" + projectValue + "','" + columnValue + "')");

这假设 cust_rally_team_member 仅包含这两列,如果没有(并且作为最佳实践,即使包含),您应该指定要插入的列。假设列名也是“projectvalue”和“columnvalue”,那么语句将是:

st.executeUpdate("INSERT INTO CUST_RALLY_TEAM_MEMBER (projectvalue,columnvalue) VALUES ('" + projectValue + "','" + columnValue + "')");

还要注意,准备好的语句对于此类流程来说是一个很好的方法。如果值包含单引号,它可以消除 SQL 错误的风险,降低 SQL 注入(inject)攻击的风险,并通过仅编译一次语句来提高性能。

关于java - 使用 Java 将多个数据插入 Oracle 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22861856/

相关文章:

java - Spring-boot 安全性不会尊重具有自定义 AuthenticationProvider 的角色

python - 使用discord.py显示来自json的数据

string - 甲骨文 SQL : Build a CASE statement with SUBSTR

sql - 如何在 Oracle 中产生排名

java - 如何发送没有正文的 html POST 请求?

java - Osm :Relation to GeoJson转换的逻辑和代码示例

java - 单击并拖动 Selenium(chrome webdriver)不是拖动,而是单击并按住

javascript - JSON 补丁 rfc6902 : Sequential operation and index

javascript - User.id 未定义

oracle - 如何在 Oracle 中自动启动监听器