使用JDBC从eclipse发出的SQL命令

时间:2013-08-12 01:42:47

标签: java sql jdbc

我一直在寻找和尝试不同的东西,但还没找到答案。我正在尝试使用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;
    }

2 个答案:

答案 0 :(得分:0)

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

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

CachedRowSet是“特殊的,它可以在不连接到其数据源的情况下运行,也就是说,它是一个断开连接的RowSet对象”

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

    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中的名称。实际上,您应该永远不要让用户决定要获取哪些列,这应该是硬编码的。

答案 1 :(得分:0)

删除列名称周围的引号。

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

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

的表
CREATE TABLE some_table ( 'DoNotChangeToUpperCase' VARCHAR2 );

然后你必须选择带引号的列

SELECT 'DoNotChangeToUpperCase' FROM some_table

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