2017-04-07 74 views
0

我有查询从MySQLJAVA - MySQL的一个ArrayList

String sqlSearch = "SELECT * from Item" 

和方法与ArrayList的

public static ArrayList<String> checkNo() throws SQLException { 

    ArrayList<String> no= new ArrayList<String>(); 

    DbManager db = new DbManager(); 
    db.connect(); 
    String sql = "SELECT * from Category where id = " + idUser + " "; 

    Statement stmt = db.connect().createStatement(); 
    ResultSet rs = stmt.executeQuery(sql); 

    while (rs.next()) { 

     no.add(rs.getString("nameCategory")); 

    } 
    db.disconnect(); 
    return no; 
} 

我从特定的用户在ArrayList中得到他的范畴,但如何将这些类别sqlSearch传递???

SELECT * from Item where category ???? 
    data from ArrayList 

任何想法?

+0

建议使用预准备语句。 http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html – dsharew

回答

1

你可以通过ArrayList项目环,并建立一个Stringwhere子句中使用这样的

String inCondition = ""; 
boolean first = true; 
ArrayList<String> categories = checkNo(); 

for(String cat : categories){ 
    if(first){ 
     first = false; 
    } else { 
     inCondition += ","; 
    } 
    inCondition += cat; 
} 

String sqlSearch = "SELECT * from Item where category in (" + inCondition + ")"; 
+0

非常感谢! – dev

0

checkNo()方法返回一个ArrayList。它看起来像这个ArrayList将只有一个项目,从ArrayList中获取该项目并将其传递给像这样的查询。

String category = list.get(i);  
"Select * from Item where category = "+category; 
+0

只有一个类别的假设有点强烈,有关表格的信息很少......是不是? –

+0

我做了这样的假设,认为上述查询只会返回1个结果,因为Where子句与'id'匹配 –

0

由于您的查询尚不清楚我给你一个示例代码,强制尝试

if (count > 0) { 
     for (int i = 0; i < count; i++) { 
      ColumnName= no.get(i).getColumnName(); 
      } 
     getItemQuery = "FROM Item where category in (" +ColumnName + ")"; 
    } 
0

有这样做的许多方面,

一种方法是两者结合起来的两个查询:

SELECT * from Item where category in (SELECT nameCategory from Category where id = idUser) 

的建议它能够更好地使用准备好的声明。

相关问题