当前位置: 代码迷 >> J2EE >> 大家看看这个sql应该如何实现
  详细解决方案

大家看看这个sql应该如何实现

热度:71   发布时间:2016-04-17 23:13:53.0
大家看看这个sql应该怎么实现
我现在要用java连接数据库查询这样一个sql
select * from tablename where id=list.get(0) or id=list.get(1) ... or id=list.get(list.length()-1) ;
这ResultSet里面应该怎么写

------解决思路----------------------
引用:
Quote: 引用:

string strsql = "select * from tablename where id in (?)";  
preparedstatement pstmt = conn.preparestatement(strsql);
string param="";
for(int i:list){
param+=i+",";

param=param.substring(0,param.length()-1);
pstmt.setstring(1,param);  
resultset rs = pstmt.executequery();

但是我list中的元素是Integer类型的,而且表中的id也是bigint,这种方法也是可以的吗


既然你能成功用Integer类型取到bigint类型的id,应该就没溢出,这样应该可以,试试咯
------解决思路----------------------
楼主 ,你要循环读取list数据拼接sql的话,办法是很多的,我就写了个最容易想到的给你
class ConnectJDBC{
public void connectMySql(){

List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);

String str1="select * from userdata where id in(";
StringBuffer sb=new StringBuffer();
for(int i=0;i<list.size();i++){
sb.append(list.get(i)+",");
}
String str2=sb.toString();

str2=str2.substring(0,str2.length()-1);
String str3=")";
String sql=str1+str2+str3;

String url="jdbc:mysql://localhost:3306/test";
String username="root";
String password="root";

try {

Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection(url,username,password);
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getInt("id"));
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
  相关解决方案