0

我一直在搜索和尝试不同的东西,但没有找到答案。我正在尝试使用 Eclipse 中的 JDBC 建立与 sql 的连接。当我需要在数据库中选择一个字符串时,我遇到了麻烦。如果我使用:

Select name from data where title = 'mr'; 

这适用于终端/命令行,但是当我尝试在我使用的地方使用 eclipse 时

statement sp = connection.createstatement();
resultset rs = sp.executequery("select name from data where title = '" + "mr" + "'");

它没有给我任何东西,而终端输入却给了我任何东西。我在日食中做错了什么?谢谢

这是代码的一部分。抱歉,有点乱,一直在尝试不同的东西。

private boolean loginChecker(String cid, String password) throws SQLException{
        boolean check = false;
        PreparedStatement pstatment = null;     

        Statement stmt = null;
        //String query = "SELECT 'cat' FROM customer";
        String query = "select '"+cid+"' from customer where password = '"+password+"'";
        try {
            System.out.println("in try......");

            //stmt = con.createStatement();
            //ResultSet rs = stmt.executeQuery(query);
            PreparedStatement prepStmt = con.prepareStatement(query);
            ResultSet rs = prepStmt.executeQuery();

            //System.out.print(rs.getString("cid"));
            while(rs.next()){
                check = true;
                System.out.print(rs.getString("cid"));
            }

        } catch (SQLException e ) {
            e.printStackTrace();
        } finally {
            if (stmt != null) { 
                //stmt.close(); 
            }
        }

        return check;
    }

第二次尝试更简单的查询:

public List<Object> showTable() {
        List<Object> result = new ArrayList<Object>();
        String name = "bob";
        try
        {
            PreparedStatement preStatement = con.prepareStatement("select total from test where name = ?");
            preStatement.setString(1, name);

            ResultSet rs1 = preStatement.executeQuery();

            while(rs1.next()){
                System.out.println("there");
                System.out.println(rs1.getInt("total"));
            }


        }
        catch (SQLException ex)
        {
            System.out.print("Message: " + ex.getMessage());
        }
        return result;
    }
4

2 回答 2

0

ResultSet在尝试使用它之前,请确保您没有关闭它。当您返回 aResultSet并尝试在其他地方使用它时,可能会发生这种情况。如果要返回这样的数据,请使用CachedRowSet

   CachedRowSet crs = new CachedRowSetImpl();
   crs.populate(ResultSet);

CachedRowSet 的“特殊之处在于它可以在不连接其数据源的情况下进行操作,即它是一个断开连接的 RowSet 对象”

编辑:看到你发布的代码,所以我想我添加了一些想法。如果那是您的实际代码,那么您没有得到任何东西的原因是因为查询可能没有返回任何东西。

    String query = "select '"+cid+"' from customer where password = '"+password+"'";

这是错误的,有两个原因。1)如果您使用准备好的语句,则应将所有输入替换为“?” 所以它应该如下所示:

    String query = "select name from customer where password = ?";

然后:

    PreparedStatement prepStmt = con.prepareStatement(query);
    prepStmt.setString(1, password);
    ResultSet rs = prepStmt.executeQuery();

2)

    System.out.print(rs.getString("cid"));

这里正在尝试获取名为“cid”的列,它应该是存储在 cid 中的名称。实际上,您永远不应该让用户决定要获取哪些列,这应该是硬编码的。

于 2013-08-12T01:57:09.550 回答
0

删除列名周围的引号。

String query = "select "+cid+" from customer where password = '"+password+"'";

您没有提到您正在使用哪个数据库,但许多数据库(如 Oracle)将列大小写更改为大写,除非它们被引用。因此,如果这是您创建表格列的方式,您只需引用它们。例如,如果您创建了一个类似的表

CREATE TABLE some_table ( 'DoNotChangeToUpperCase' VARCHAR2 );

然后您还必须选择带引号的列

SELECT 'DoNotChangeToUpperCase' FROM some_table

但是,如果您没有使用引号创建表,那么您也不应该将它们与您的 SELECT 一起使用。

于 2013-08-12T02:21:10.890 回答