わかった。
以下は、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句を削除すると出力されます。
これの原因と修正方法を知っている人はいますか?