我正在尝试从数据库中获取每张图片并将其放入ArrayList中,然后将其打印出来。但是我得到了一个我不明白的结果。
结果:
Q1:为什么我会得到这个结果?
Q2:如果我想用ImageIcon显示图片,那么ArrayList是否可以使用?
这是我的代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.*;
public class ImageData {
public static void main(String[] args){
Connection con = null;
Statement st = null;
ResultSet rs = null;
//databasens lokalisation, namn, användare & lösenord
String url = "jdbc:mysql://localhost:3306/";
String dbname = "101207-facemash";
String user = "root";
String pwd = "root";
List<String> img = new ArrayList<String>();
try{
// Vi upprätta en anslutning till databasen med hjälp av anslutningen URL, dbnamnet, användarnamn och lösenord.
con = DriverManager.getConnection(url + dbname, user, pwd);
st = con.createStatement();
rs = st.executeQuery("SELECT filename FROM images");
while(rs.next()){
img.add(rs.getString("filename"));
System.out.println(img);
}
} catch (SQLException ex) {
Logger lgr = Logger.getLogger(ImageData.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
} finally {
try {
if (rs != null) {
rs.close();
}
if (st != null) {
st.close();
}
if (con != null) {
con.close();
}
} catch (SQLException ex) {
Logger lgr = Logger.getLogger(ImageData.class.getName());
lgr.log(Level.WARNING, ex.getMessage(), ex);
}
}
}
}
答案 0 :(得分:0)
您正在检索图像文件的名称,而不是图像本身。如果图像存储在数据库中,则必须使用第二个查询检索它们,使用第一个查询从数据库中检索的图像名称,或者检索表的不同列(取决于数据库的方式)是有组织的)。如果它们存储在单独的文件中(db只包含文件名),那么在检索名称后,您需要读取每个图像。 ImageIO类对此有用。 (另外,如果您以URL的形式放置名称,ImageIcon类可以自己检索图像。)
至于使用ArrayList - 这通常是处理不确定大小数组的好方法。我不认为您使用ImageIcon(一次处理一个图像)的事实与ArrayList是否是一个好主意有关。