为了账号安全,请及时绑定邮箱和手机立即绑定

如何摆脱第二个参数?

如何摆脱第二个参数?

犯罪嫌疑人X 2023-03-09 13:58:41
我创建了一个方法 ( getData()) 来从数据库接收数据,这似乎有效。我想要的是只使用 1 个参数,所以该方法应该以className.getData("SELECT * FROM myTable"). 我怎样才能做到这一点?public List<String> getData(String sql, Map column) {    this.driver();    try {        Connection conn = DriverManager.getConnection(this.url);        Statement stmt = conn.createStatement();        ResultSet rs = stmt.executeQuery(sql);        List<String> result = new ArrayList<>();        if (column.containsKey("string")) {            for (Object i : column.values()) {                while (rs.next()) {                    result.add(rs.getString(String.valueOf(i)));                }            }            return result;        }    }    catch (SQLException e) {        e.printStackTrace();    }    return null;}private void driver() {    // Ensure we have mariadb Driver in classpath    try {        Class.forName("org.mariadb.jdbc.Driver");    }    catch (ClassNotFoundException e) {        e.printStackTrace();    }}
查看完整描述

2 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

当然,您不需要将列名作为参数传递。JDBC 允许您从元数据中获取列名。就像下面一样


ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");

ResultSetMetaData rsmd = rs.getMetaData();

Integer colunNum = rsmd.getColumnCount();

for(int i =0; i < columnNum; i ++){

    String colmnName = rsmd.getColumnName(i);

    ....

}

归功于:从 java.sql.ResultSet 中检索列名


查看完整回答
反对 回复 2023-03-09
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

在类实例化中调用驱动方法。


static {

    // Ensure we have mariadb Driver in classpath

    try {

        Class.forName("org.mariadb.jdbc.Driver");

    }

    catch (ClassNotFoundException e) {

        e.printStackTrace();

    }

}

你也应该关闭你的资源。您可以使用try-with-resources来做到这一点。


public List<String> getData(String sql, Map column) {

    try (

        Connection conn = DriverManager.getConnection(this.url);

        Statement stmt = conn.createStatement();

        ResultSet rs = stmt.executeQuery(sql);

     ){

        List<String> result = new ArrayList<>();

        if (column.containsKey("string")) {

            for (Object i : column.values()) {

                while (rs.next()) {

                    result.add(rs.getString(String.valueOf(i)));

                }

            }

            return result;

        }


    }

    catch (SQLException e) {

        e.printStackTrace();

    }

    return null;

}


查看完整回答
反对 回复 2023-03-09
  • 2 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信