Java 从jdbc检索数据

Java 从jdbc检索数据,java,mysql,jdbc,Java,Mysql,Jdbc,我有一个字符串数组,其中包含500只股票的名称。现在我的mysql数据库中有一个表,其中包含1000多只股票的符号以及它们的名称。我想做的是从我的表中检索这500只股票的符号。我尝试了以下代码 Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql//localhost/mydatabase","user","pass"); PreparedStatement

我有一个字符串数组,其中包含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]后面跟一个通配符%,我该怎么做。

您可以为字符串数组中的股票创建一个表,并与股票1表进行联接

假设ArrayStock的表名为stocksperuser,有一列全名。代码如下所示:

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"));
}

要包含通配符,可以按如下所示操作

SELECT (NAME) FROM stocks1 WHERE upper(FULLNAME) LIKE ?   

ps.setString(1, upper(name[i1])+ "%");
在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])+ "%");

批处理用于DML语句,而不是查询。您需要为要检索的每个ID运行SELECT或使用WHERE IN。。。无法在准备好的语句中使用。请参见@ridhish.Chaudhari-上述问题答案中的链接似乎有错误。@ahorsewithnoname,-因此我必须将select语句放入for循环并运行它。这意味着创建一个新表。还有其他方法吗?您可以使用临时表,它们在关闭事务后会自动删除。但我不确定mysql是否支持这一点。但是没有表,你必须循环,就像你提到的那样。如果查询对性能至关重要,则必须使用“where in..”。但是语句的长度通常是有限的,因此您必须在一个查询中处理成片的股票名称,例如100只股票。我使用了you answer,但它在is inSELECT FULLNAME FROM中引发语法异常…我没有要测试的db。但错误必须是“正在”仅在中使用。从stocks1中选择名称,其中出于某种奇怪的原因,从arraystocksIt中选择全名中的全名不会打印任何内容。但没问题。我迭代了每个select查询。我贴了一个问题,但无论如何问也无妨。如何执行案例不敏感选择