1、要执行建立表的sql。例如:表:Test,字段:id,name
2、插入数据。例如:insert into test(id, name)values(?,?)
3、修改数据。
4、插入3条数据。
5、修改3条数据。
6、删除2条数据。
最好是有共同的方法,例如:
public static int[] update(Connection con, Vector executeSQLVec, Object params[])
public static int[] query(String, Object[])(Connection con, Vector executeSQLVec, Object params[])
这两个方法。

解决方案 »

  1.   

    楼主是什么意思?
    直接生成一个PreparedStatement然后,自己往里面加不就可以了吗?
      

  2.   

    帮我写2两个共同方法来实现我提出1-6条的要求。executeSQLVec 是一个sql的集合,里面有创建表、插入数据、修改数据、删除数据,检索数据的sql语句。params[]来放参数,就是替换?号的数据值。谢谢
      

  3.   

    如果考虑到效率问题,不如这样用:参考一下Connection conn = null;
    String conversionDate = Utility.convertDateTimeToJDBCDateTimeFormat(Utility.getFormatedDateTime(WARNEDTIME));
    try {
    String[] sql = new String[2];
    String WARNINGFLAG = "";
    String WARNEDFLAG = "";
    if(warningFlag.equalsIgnoreCase("1")){
     WARNINGFLAG = "1";
     WARNEDFLAG = "1";

    }else{
     WARNINGFLAG = "2";
     WARNEDFLAG = "2";
    }

    sql[0] = "UPDATE WORKSHEET SET WARNINGFLAG = '"+WARNINGFLAG+"',WARNEDTIME = " + conversionDate
     +" WHERE WSID = '" + wsid + "'";
    sql[1] = "UPDATE WARNINGINFO SET WARNEDFLAG = '"+WARNEDFLAG+"',WARNEDTIME = "+ conversionDate
     +",REMARKS = '" + res + "'" + " WHERE URLID = '" + urlid + "'";

    conn = getConnection();
    if(warningFlag.equals("1")) InsertWarnActLogInfo(conn, actionLog);
    java.sql.Statement stmt = conn.createStatement();
    for(int i=0;i<sql.length;i++){
    stmt.addBatch(sql[i]);
    }
    int[] count = stmt.executeBatch();

    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    finally{
    closeConnection(null,conn);
    }
      

  4.   

    谢谢 jacbo(今天你坚持了没有) ,但是最主要的是我需要的两个共同方法。
      

  5.   

    jacbo(今天你坚持了没有) ( ) 信誉:89    Blog 
    不是已经说得很清楚了么
      

  6.   

    public static int[] update(Connection con, Vector executeSQLVec, Object params[])
    public static int[] query(String, Object[])(Connection con, Vector executeSQLVec, Object params[])
    这两个方法从参数来看似乎不是很好
      

  7.   

    那应该用什么参数?
    我想的是:
    要有一个executeSQLVec 是一个sql的集合,里面有创建表、插入数据、修改数据、删除数据,检索数据的sql语句。
    还有一个params[]来放参数,就是替换?号的数据值。
    链接要不要都一样?
      

  8.   

    那应该用什么参数?
    我想的是:
    要有一个executeSQLVec 是一个sql的集合,里面有创建表、插入数据、修改数据、删除数据,检索数据的sql语句。
    还有一个params[]来放参数,就是替换?号的数据值。
    链接要不要都一样?
      

  9.   

    那应该用什么参数?
    我想的是:
    要有一个executeSQLVec 是一个sql的集合,里面有创建表、插入数据、修改数据、删除数据,检索数据的sql语句。
    还有一个params[]来放参数,就是替换?号的数据值。
    链接要不要都一样?
      

  10.   

    我建议你创建一个JavaBean.package a;
    import java.sql.*;public class sql_data
    {
    Connection con = null;
    Statement stm = null;
    ResultSet result = null;

    public sql_data()
    {
    try
    {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    con = DriverManager.getConnection("jdbc:odbc:MydataSoure", "sa", "");
    }
    catch(Exception e)
    {
    System.err.println("驱动设备或者连接出错,操作失败");
    }
    }

    public ResultSet executeQuery(String sql)
    {
    try
    {
    stm = con.createStatement();
    result = stm.executeQuery(sql);
    }
    catch(SQLException e1)
    {
    System.err.println("查询数据出错");
    }
    return result;
    }

    public void executeUpdate(String sql)
    {
    try
    {
    stm = con.createStatement();
    stm.executeUpdate(sql);
    }
    catch(SQLException e1)
    {
    System.err.println("更新数据失败");
    }
    } public void closeStm()
    {
         try
         {
    stm.close();
         }
         catch(SQLException e)
         {
    e.printStackTrace();
         }
    }

    public void closeCon()
    {
         try
         {
    con.close();
         }
         catch(SQLException e1)
         {
    e1.printStackTrace();
         }
    }
    }然后在JSP页面中调用此JavaBean
    例如:更新数据<jsp:useBean id="a" scope="application" class="a.sql_data" />
          <div align="center"><br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <%
      String Username=request.getParameter("Username");
        String sql="select * from Users where cUser_Name='"+Username+"'";
    ResultSet rs=a.Query(sql); 
        if(rs.next())
        {
      rs.close();
      a.closeCon();
      a.closeStm();
    %>
            <img src="../picture/login_kulian.jpg" width="87" height="87">用户名已存在,请更换用户名后重新注册
            <%}
    else
    {
        rs.close();
    String Password1=request.getParameter("Password1");
    String Address=request.getParameter("Address");
    String Pcode=request.getParameter("Pcode");
         String PAddress=request.getParameter("PAddress");
    String Phone=request.getParameter("Phone");
    String sql1="insert into Users values('"+Username+"','"+Password1+"','"+Address+"','"+Pcode+"','"+PAddress+"','"+Phone+"')";
    a.Update(sql1);
    %>
      

  11.   

    首先,要谢谢楼上,但是,您没有理解我的问题!我的问题是:
    public static int[] update(Connection con, Vector executeSQLVec, Object params[])
    public static int[] query(String, Object[])(Connection con, Vector executeSQLVec, Object params[])
    这两个方法怎么实现?(关于SQL的批处理)
    请来看贴的朋友们,仔细看看我的问题?
      

  12.   

    /**批量更新,适合少量的、各不相同的SQL语句,大批量更新建议用PreparedStatement*/
    Connection conn = null;//数据库连接
      Statement stmt=null;  
    public Properties autoUpdate(Vector sql){
        String msg="";
        Properties p=new Properties();
        try{
          conn.setAutoCommit(false);
          for(int i=0;i<sql.size();i++){
            stmt.addBatch((String)sql.get(i));
          }
          int[] rows=stmt.executeBatch();
          conn.commit();
       }
        catch(SQLException e){
              }
        p.setProperty("errorMsg",msg);
        p.setProperty("number",(new Integer(errorCode)).toString());
        return p;
      }