导入java.util.List; /** *从国家/地区数据库读取并打印国家/地区的数据 *@author TJ */ 公共类CountryMain{ 公共静态void main(字符串[]args){ CountriesDB cdb=新的CountriesDB(); List countries=cdb.getCountries(); 适用于(国家:国家){ System.out.println(“名称:”+country.getName() +“人口:“+country.getPopulation() +“年龄中位数:”+country.getMedianAge() +“ID:+country.getId() +“语言:”+country.getLanguage() ); } } }
首先,行:导入java.util.List; /** *从国家/地区数据库读取并打印国家/地区的数据 *@author TJ */ 公共类CountryMain{ 公共静态void main(字符串[]args){ CountriesDB cdb=新的CountriesDB(); List countries=cdb.getCountries(); 适用于(国家:国家){ System.out.println(“名称:”+country.getName() +“人口:“+country.getPopulation() +“年龄中位数:”+country.getMedianAge() +“ID:+country.getId() +“语言:”+country.getLanguage() ); } } },java,sql,Java,Sql,首先,行: countries.add(new Country(rs.getString("Language"), rs.getString("Language"))); 在声明或填充之前,请参阅rs。此外,他们似乎试图用两条线(都是一样的)来建设一个国家 第二, countries.add(new Language ()); 是疯狂的,因为国家中有国家对象,所以你不能只添加一个语言对象,然后再添加一个新对象(不是从数据库中) 这几乎就像你没有自己写代
countries.add(new Country(rs.getString("Language"),
rs.getString("Language")));
在声明或填充之前,请参阅rs
。此外,他们似乎试图用两条线(都是一样的)来建设一个国家
第二,
countries.add(new Language ());
是疯狂的,因为国家中有国家对象,所以你不能只添加一个语言对象,然后再添加一个新对象(不是从数据库中)
这几乎就像你没有自己写代码,因此不理解它
我认为你需要的是更接近这一点:
private void readLanguages() {
try (
Connection connection = getConnection();
PreparedStatement stmt = connection.prepareStatement(GET_COUNTRY_LANGS_SQL)
) {
ResultSet rs = null;
for (Country country : countries); {
stmt.setInt(1, country.getId());
rs = stmt.executeQuery();
while (rs.next()) {
country.setLanguage(rs.getString("Language")); //assumes 1 per country - others are discarded
}
rs.close();
}
}
}
不是完美的java—但应该让您知道哪里出了问题
其他说明:
- 实现这一点的简单方法(假设每个国家有一种语言)是在SELECT中加入表李>
- 完成数据库连接后,还应关闭数据库连接
- 我不确定您的
语法是否正确try(stuff){statements}
- 如果每个国家都有多种语言,您需要在数据结构/类中支持这些语言
- 我假设你的国家队有接球手和接球手
注意:问题已经更新,但我认为这仍然是最相关的。根据设计,一个
国家可以有多个语言,因此您的模型应该如下所示:
class Country {
private int id;
private String name;
private List<String> language;
//....
}
国家级{
私有int-id;
私有字符串名称;
私有列表语言;
//....
}
有不同的方法可以构造它,最直接的方法是(在伪代码中):
列出结果国家=。。。。;
countryRows=ExecuteTCountrySQL
countryRows中的每个countryRow{
id=行获取(“id”);
name=row.get(“name”);
List langs=new ARRAYLISTY您在这一行没有得到任何编译错误?countries.add(new Country(rs.getString(“Language”)、rs.getString(“Language”);
首先写下您想要遵循的步骤以及您实际遵循的是什么?问:“Language”实际上是表“Country”中的(string)列吗如果是这样的话,你的语法应该是有效的。如果列不是“语言”,那么它就不起作用了…;Naman,我会根据我尝试循环的语句来做。你的DB表结构是什么?
package edu.pcc.cis233j.countries;
import java.util.List;
/**
* Read from the Country database and print data on the countries
* @author TJ
*/
public class CountryMain {
public static void main(String[] args) {
CountriesDB cdb = new CountriesDB();
List<Country> countries = cdb.getCountries();
for (Country country : countries) {
System.out.println("Name: " + country.getName()
+ " Population: " + country.getPopulation()
+ " Median Age: " + country.getMedianAge()
+ " ID : " + country.getId()
+ " Language: " + country.getLanguage()
);
}
}
}
countries.add(new Country(rs.getString("Language"),
rs.getString("Language")));
countries.add(new Language ());
private void readLanguages() {
try (
Connection connection = getConnection();
PreparedStatement stmt = connection.prepareStatement(GET_COUNTRY_LANGS_SQL)
) {
ResultSet rs = null;
for (Country country : countries); {
stmt.setInt(1, country.getId());
rs = stmt.executeQuery();
while (rs.next()) {
country.setLanguage(rs.getString("Language")); //assumes 1 per country - others are discarded
}
rs.close();
}
}
}
class Country {
private int id;
private String name;
private List<String> language;
//....
}
List<Country> resultCountries=....;
countryRows = executeGetCountrySql
foreach countryRow in countryRows {
id = row.get("ID");
name = row.get("NAME");
List<String> langs = new ArrayList<();
langRows = executeGetLanguageByCountryIdSql(id);
foreach langRow in langRows {
langs.add(langRow.get("LANGUAGE"));
}
resultCountries.add(new Country(id, name, langs));
}