我有一个字符串数组,其中包含500个股票的名称。现在我在我的mysql数据库中有一个表,其中包含超过1000个股票的符号。我想做的是从我的表中检索那500个股票的符号。我试过以下代码
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql//localhost/mydatabase","user","pass");
PreparedStatement stmt = conn.prepareStatement("SELECT (NAME) FROM stocks1 WHERE FULLNAME =?");
for(int i1=0;i1<i;i1++)
{
stmt.setString(1, name[i1]);
stmt.addBatch();
}
ResultSet t=stmt.executeQuery();
while(t.next())
System.out.println(t.getString("NAME"));
但它不起作用。什么都没打印。我想我在stmt.addBatch()中犯了一个错误。此外,如果我希望名称[i1]被通配符字符(%)所示,我将如何做到这一点。
答案 0 :(得分:1)
您可以为字符串数组中的股票创建一个表,并使用stocks1表进行连接。
假设您的阵列表的表名为stocksperuser,其中一列为FULLNAME,代码如下:
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql//localhost/mydatabase","user","pass");
PreparedStatement stmt = conn.prepareStatement("SELECT NAME FROM stocks1 WHERE FULLNAME is in (SELECT FULLNAME FROM arraystocks)");
ResultSet t=stmt.executeQuery();
while(t.next()) {
System.out.println(t.getString("NAME"));
}
答案 1 :(得分:1)
要包含通配符,您可以执行以下操作。
在你的select语句中删除=并添加LIKE
PreparedStatement stmt = conn.prepareStatement("SELECT (NAME) FROM stocks1 WHERE FULLNAME LIKE ?");
在setString方法中添加%。
ps.setString(1, name[i1]+ "%");
另外,对于空行问题,请检查比较列的大小写是否相同,它们应该在上面还是下面。 如果不是,那么您可以在比较时进行转换,如下所示。
SELECT (NAME) FROM stocks1 WHERE upper(FULLNAME) LIKE ?
ps.setString(1, upper(name[i1])+ "%");