java - 运算符中的sql查询语句

标签 java mysql sql groovy

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

class test{

def selectAuther(){
    def nameList = []

    con = DriverManager.getConnection("url", "username", "password")
    stmt = con.createStatement();
    rs = stmt.executeQuery("SELECT name FROM auther");
    while (rs.next()) {
        nameList.add(rs.getString(1));
      }
    con.close();
    return nameList;
}

def selectbook(List autherName){
    def nameList = []
    con = DriverManager.getConnection("url", "username", "password")
    stmt = con.createStatement();
    rs = stmt.executeQuery("SELECT name FROM book WHERE authername in " + autherName + "")
    while (rs.next()) {
        nameList.add(rs.getString(1));
    }
    con.close();
    return nameList
}
}
where autherName is a parameter = selectAuther()

异常:

You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near '[john]

selectAuther() 的结果是 [john]

我知道我可以通过 1 个查询执行这 2 个查询,但是当用户登录多次使用它而不加载到数据库时,我会将 selectAuther() 保存在我的项目中

我知道我可以这样写

def selectbook(){
    def nameList = []
    con = DriverManager.getConnection("url", "username", "password")
    stmt = con.createStatement();
    rs = stmt.executeQuery("SELECT name FROM book WHERE authername in (SELECT name FROM auther))
    while (rs.next()) {
        nameList.add(rs.getString(1));
    }
    con.close();
    return nameList
}
}

但我不需要这样

最佳答案

如果您想使用 Groovy,为什么不使用 Groovy Sql 类并利用 groovy 为您带来的所有好处呢?

我相信这完全可以替代您的原始代码...

import groovy.sql.Sql

class Test{
  List selectAuther( sql ){
    List nameList = []
    sql.eachRow( 'SELECT name FROM auther ' ) {
      nameList << it.name
    }
    nameList
  }

  List selectbook(List autherName){
    def sql = Sql.newInstance( 'url', 'username', 'password', 'driver' )
    List autherName = selectAuther( sql )
    List nameList = []
    sql.eachRow( "SELECT name FROM book WHERE authername in ('" + autherName.join( "','" ) + "')" ) {
      nameList << it.name
    }
    nameList
  }
}

关于java - 运算符中的sql查询语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008306/

相关文章:

java - Java 类中的无限组合?

php - 如何在 JOIN 语句中指定 WHERE?

php - 添加后的 Codeigniter 查询

mysql - SQL:仅查询第二个表中有两行与其关联的结果

java - 将 FREArray 从 Java 返回到 Flash

java - 如何将两个 JMenuItem 彼此相邻放置?

c# - 将行插入 MySQL 数据库的最有效方法

sql - SQL Server 2008 中数据库的最大大小

mysql - 等价于在 MySQL 中处理字符串的 explode()

java - 将数据库表中的多个键值对添加到 HashMap