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

2 回目の単純なクエリの試行:

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

列名を囲む引用符を削除します。

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 に答える
0

使用する前に、 を閉じていないことを確認してくださいResultSetResultSetこれは、 を返し、それを別の場所で使用しようとしたときに発生する可能性があります。このようなデータを返したい場合は、次を使用しますCachedRowSet

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

CachedRowSet は、「データ ソースに接続せずに操作できるという点で特別です。つまり、切断された RowSet オブジェクトです」

編集:あなたがコードを投稿したのを見たので、いくつかの考えを追加すると思いました。それが実際のコードである場合、何も得られない理由は、クエリがおそらく何も返さないためです。

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

これは、2 つの理由から間違っています。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 に答える