1

わかった。
以下は、JDBCでデータベースを検索した後に配列を返すコードの一部です。JDK に組み込まれているのは Apache Derby データベースです。

import java.sql.Connection;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class readnames {

static Object [] name;
static Object [] type;
static Object [] desc;
static ArrayList<String> l = new ArrayList<String>();
static ArrayList<String> l2 = new ArrayList<String>();
static ArrayList<String> l3 = new ArrayList<String>();

public static Object[] lies(String desq) {

    final String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";

    final String CONNECTION = "jdbc:derby:AccountDatabase";

    try {
    Class.forName(DRIVER).newInstance();
    } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
    e.printStackTrace();
    }
    try {
        Connection connection = DriverManager.getConnection(CONNECTION);
        PreparedStatement statement = connection.prepareStatement("select * from WARPS WHERE CATEGORY=?");
        statement.setString(1, "Server");
        ResultSet resultset = statement.executeQuery();
            if (resultset.next()) {
                    while(resultset.next()) {
                        l.add(resultset.getString("NAME"));
                          l2.add(resultset.getString("CATEGORY"));  
                        l3.add(resultset.getString("DESCRIP"));
                    }
                    name = l.toArray();
                    type = l2.toArray();
                    desc = l3.toArray();
                    for (int i = 0; i < name.length; i++){
                        System.out.println(name[i]);
                    }
                    for (int i2= 0; i2 < type.length; i2++) {
                        System.out.println(type[i2]);
                    }
                    for (int i3= 0; i3 < desc.length; i3++) {
                        System.out.println(desc[i3]);
                    }
                    System.out.println("The method is called");
            } else {System.out.println("No entries exist in this category");
            }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return name;
} 

}

私の問題は、何も返さないことです。WHERE句を含むPreparedStatementを使用してデータをフィルタリングしようとするまでは、うまくいきました。しかし、私は本当にすべてのデータを取得したくはありませんが、特定のデータを取得したいと考えています。println への呼び出しは、デバッグ目的で追加されました。コード内に where 句がある場合、何も出力されません。

編集: while-loop の l2.add 句と l3.add 句も、デバッグ目的のためのものです。スリー。

ところで、明確に取得したいデータはデータベースにあり、where句を削除すると出力されます。

これの原因と修正方法を知っている人はいますか?

4

4 に答える 4

2

結果が 1 行しかない場合、何も得られません。

理由:

if (resultset.next()) {  
                    while(resultset.next()) {

でを実行する.next()`while、カーソルはすでに で 1 回進んでいますif。あなたはただやっているはずです

while(resultset.next()) {

行がない場合、これは実行されません。

于 2013-06-14T17:24:06.443 に答える