【问题标题】:insert multiple selected value into table (oracle)将多个选定值插入表中(oracle)
【发布时间】:2012-02-24 14:21:19
【问题描述】:

这是我的 index.jsp 页面

<form action="addCountry.jsp" method="get">
    <select id="countries" class="multiselect" multiple="multiple" name="countries">
      <option value="AFG">Afghanistan</option>
      <option value="ALB">Albania</option>
      <option value="DZA">Algeria</option>
      <option value="AND">Andorra</option>
      <option value="ARG">Argentina</option>
      <option value="ARM">Armenia</option>
      <option value="ABW">Aruba</option>
      <option value="AUS">Australia</option>
      <option value="AUT" selected="selected">Austria</option>
      <option value="AZE">Azerbaijan</option>
      <option value="BGD">Bangladesh</option>
      <option value="BLR">Belarus</option>
      <option value="BEL">Belgium</option>
      <option value="BIH">Bosnia and Herzegovina</option>
      <option value="BRA">Brazil</option>
      <option value="BRN">Brunei</option>
      <option value="BGR">Bulgaria</option>
      <option value="CAN">Canada</option>
      <option value="CHN">China</option>
      <option value="COL">Colombia</option>
      <option value="HRV">Croatia</option>
      <option value="CYP">Cyprus</option>
      <option value="CZE">Czech Republic</option>
</select>
<br/>
      <input type="submit" value="Submit Form"/>
    </form>

这将是我的 addCountry.jsp 页面代码

<% 
try{
String[] country=request.getParameterValues("countries");
int count=0;
while(country[count]!=null)
out.println(country[count++]);
}catch(Exception ex)
{
//out.print(ex);
}
%>

但是,我很困惑将多个值同时插入到表中。我应该使用循环进行多次插入吗?任何帮助表示赞赏!提前致谢!!

【问题讨论】:

  • 为什么要将业务逻辑(更不用说数据库管理)放在 JSP 中?
  • 这只是示例代码,我会更正它。
  • @deporter 我的问题是,从选择列表中选择多个值后,如何将这些值插入表中,我应该在循环内使用插入查询还是有任何其他方法来插入多行。 index.jsp 的代码是示例一,我将从数据库中检索值。
  • 我和@Viruzzo 一起讨论这个问题。我有一个可爱的表,其中包含所有这些信息(加上正确的名称)等。使用数据库有什么问题?

标签: java sql oracle jsp


【解决方案1】:

查看javadoc 中的java.sql.Statement,特别是addBatch(String sql)executeBatch() 方法来将语句排队并稍后一起执行。

【讨论】:

    【解决方案2】:
    addCountries(request.getParameterValues("countries"));    
    

    以下方法启动事务,一次执行一个查询,如果全部成功则提交,如果有任何错误则回滚。

    private void addCountries(String[] countries)
    {
        Connection cn = <YOUR_CONNECTION_HERE>;
    
        try
        {
            // Require Explicit Commit
            cn.setAutoCommit(false);
    
            // Construct Query
            String  sql = "insert into countries " 
                    + "  (country_code) " 
                    + "values " 
                    + "  (?) ";
    
            // For each country
            for(String country:countries)
            {
                PreparedStatement ps = cn.prepareStatement(sql);
                ps.setString(1, country);
                ps.executeUpdate();
                ps.close();
            }
    
            // Explicitly Commit - This point reached with no Exceptions.
            cn.commit();
        }
        catch (Exception e)
        {
            // Explicitly Rollback - There were errors along the way
            cn.rollback();
            e.printStackTrace();
        }
        finally
        {
            if(cn != null)
            {
                cn.close();
            }
        }
    }
    

    捕获异常是不好的习惯,所以我建议更改该部分以捕获抛出的任何单个异常类型,可能是 SQLException 等等。

    【讨论】:

    • 编辑了答案以提供更详细的解决方案。
    • @sql_query 如果这是您正在寻找的解决方案类型?
    • @sql_query 请澄清问题或选择适合您的答案。
    • @sql_query 看起来这个问题将被留下,就好像它没有得到回答一样。如果您没有提供合适的答案,请选择适合您的答案或添加适当的答案。
    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2013-12-09
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    相关资源
    最近更新 更多