首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

请问高人写一条灵活的sql语句

2011-12-18 
请教高人写一条灵活的sql语句请教高人写一条灵活的sql语句:要求:如数据库中字段NAME(Notnull),TYPE1(Notnu

请教高人写一条灵活的sql语句
请教高人写一条灵活的sql语句:要求:如数据库中字段NAME(Not   null),TYPE1(Not   null),TYPE2,TYPE3,TYPE4,TYPE5,TYPE6,TYPE7,TYPE8,TYPE9,TYPE10
,现在想通过JDBC向数据库Insert一条记录,但是,TYPE2~TYPE10的值要求在程序中进行判断,如果Type2为null,就在SQL语句中不对TYPE2处理,如果不为null,在SQL语句中就加入Type2字段和值。依此类推!!!这样的话SQL语句怎么写呢?

[解决办法]
null是sql里面的关键字,直接写null(字符串)就行了。不用特殊处理
[解决办法]
case when type2 is not null then type2 else null end,
[解决办法]
string sql_ins = "insert into targetTable ( ";
string sql_val = "values ( ";
sql_ins += "name,type1 ";
sql_val += " ' " + o.getName() + " ', ";
sql_val += " ' " + o.getType1() + " ' ";
if (!(o.getType2() == null || " ".equals(o.getType2())))
{
sql_ins += ",type2 ";
sql_val += ", ' " + o.getType2() + " ' ";
}//TYPE3-Type10的处理与此相同
sql_val += ") ";
sql_ins + ") ";
string sql = sql_ins + " " + sql_val;

[解决办法]
動態組字符SQL
[解决办法]
nvl()函数
[解决办法]
不知道下面的这些代码是否能满足你的要求,全是动态的

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Map;
import java.util.TreeMap;

public class Insert {

  public static void main(String[] args) {
    try {
      Class.forName( "com.mysql.jdbc.Driver ");
    } catch (ClassNotFoundException e) {    
      e.printStackTrace();
    }
    Connection con = null;
    PreparedStatement ps = null;    
    try {
      String url = "jdbc:mysql://localhost:3306/bookstore ";
      String user = "root ";
      String password = "root ";
      con = DriverManager.getConnection(url, user, password);
      Tbl tbl = new Tbl();
      tbl.setName( "pengyiming ");
      tbl.setType1( "a ");      
      tbl.setType3( "c ");
      
      Map <String, String> map = tbl.getMap();
      
      // 通过 map 生成 SQL
      StringBuffer type = new StringBuffer( "INSERT INTO tbl ( ");
      StringBuffer value = new StringBuffer( " VALUES ( ");
      for(Map.Entry <String, String> entry : map.entrySet()) {
        type.append(entry.getKey()).append( ", ");
        value.append( "?, ");
      }
      String sql = type.append( ") ").append(value).append( ") ").toString();
      sql = sql.replace( ",) ", ") ");
      
      ps = con.prepareStatement(sql);
      
      // 通过 map 设置 PreparedStatement 的值
      int i = 1;
      for(Map.Entry <String, String> entry : map.entrySet()) {
        ps.setString(i, entry.getValue());
        i++;
      }      
      ps.executeUpdate();  
      
    }catch(SQLException e) {
      e.printStackTrace();
    }finally{
      try {
        ps.close();
        con.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }      
    }        
  }
}


/**
* Tbl 的 POJO 类,在每个 set 方法中,增加 map.put
* 方便起见,只设置了三个
*/
class Tbl {
  private String name;
  private String type1;
  private String type2;
  private String type3;
  private Map <String, String> map = new TreeMap <String, String> ();
  
  public Tbl() {    
  }  
  public Tbl(String name, String type1) {
    this.name = name;
    this.type1 = type1;
    map.put( "name ", name);
    map.put( "type1 ", type1);
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
    map.put( "name ", name);
  }
  public String getType1() {
    return type1;
  }
  public void setType1(String type1) {
    this.type1 = type1;
    map.put( "type1 ", type1);
  }
  public String getType2() {
    return type2;
  }
  public void setType2(String type2) {
    this.type2 = type2;
    map.put( "type2 ", type2);
  }
  public String getType3() {
    return type3;
  }
  public void setType3(String type3) {
    this.type3 = type3;
    map.put( "type3 ", type3);
  }
  public Map <String, String> getMap() {
    return map;
  }
}

[解决办法]
import java.util.*;

public class sssss{
public void createSql()
{
String[] listName= { "NAME ", "TYPE1 ", "TYPE2 ", "TYPE3 ", "TYPE4 ", "TYPE5 ", "TYPE6 ", "TYPE7 ", "TYPE8 ", "TYPE9 ", "TYPE10 "};
ArrayList list =new ArrayList();
list.add( "NAME ");
list.add( "TYPE1 ");
list.add( " ");
list.add( "TYPE3 ");
list.add( " ");
list.add( " ");
list.add( "TYPE6 ");
list.add( " ");
list.add( " ");
list.add( " ");
list.add( "TYPE10 ");
String sql = "insert into sss( ";
String sql2 = " ";
for(int i = 0; i < listName.length; i++)
{
if(((String)list.get(i)).trim().length() != 0)
{
sql += listName[i];
sql2+= " ' " + ((String)list.get(i)).trim() + " ' ";
if(i <= listName.length - 1)
{
sql += ", ";
sql2 += ", ";
}
}
}
sql = sql.substring(0, sql.lastIndexOf( ", "));
sql += ") values ( ";
sql2 = sql2.substring(0, sql2.lastIndexOf( ", "));
sql2 += ") ";
System.out.println(sql+sql2);
//return oper.insertRecord(sql+sql2);
}
public static void main(String args[]){
sssss s= new sssss();
s.createSql();
}
}

[解决办法]
要达到要求的sql语句一定是组装出来的,不过你可以在不同的地方组装罢了
[解决办法]
你可以把数据库中的TYPE通过JDBC 都取出来存到一个LIST中 ,然后分别对一行数据做循环判断! 如果要是 ' '的话,就continue ,如果不是‘’ 就进行插入操作
[解决办法]
insert into table
select name,type1,nvl(type2, ' '),nvl(type3, ' ')...nvl(type10, ' ') from dual;

热点排行
Bad Request.