我创建了这个方法,使用他的名字从艺术家中选择id,但它返回0。
public int getIdArtist(){
Conexion connection=new Conexion();
ArtistVO artistVO=new ArtistVO();
int id=0;
try{
String cSql="SELECT ArtistId from artist where Name=?";
PreparedStatement sqlArtistId=connection.getConnection().prepareStatement(cSql);
sqlArtistId.setString(1, artistVO.getNameArtist());
ResultSet result=sqlArtistId.executeQuery();
System.out.println(id); //debug
while(result.next()){
id=result.getInt("ArtistId");
}
return id;
}catch(SQLException exception){
exception.printStackTrace();
return 0;
}
}
我尝试过一些打印件来检查它失败的地方,并在executeQuery()
之后立即失败;知道为什么会这样吗?
public class ArtistVO {
private int idArtist;
private String nameArtist;
public int getIdArtist(){
return idArtist;
}
public void setIdArtist(int idArtist){
this.idArtist=idArtist;
}
public String getNameArtist(){
return nameArtist;
}
public void setNameArtist(String nameArtist){
this.nombreArtist=nombreArtist;
}
}
这是我设置艺术家名称的代码的一部分,方法的其余部分无关紧要:
String nameArtist=chooseArtist.getSelectedItem().toString();
System.out.println(nameArtist); //debug
artistVO.setNameArtist(nameArtist);
它取自Combobox的名称,并使用打印显示名称,显示,设置和获取名称不是问题。
#2:更新
此方法用于添加相册,sqlAddAlbum.setInt(3, getIdArtist());
应该使用getIdArtist
中给出的ID,但根据您的第一次更新,它以红色下划线,我不知道如何调整它:
public void addAlbum(AlbumVO albumVO){
Conexion connection=new Conexion();
try{
String cSql="INSERT into album values(?,?) where ArtistId=?";
PreparedStatement sqlAddAlbum=connection.getConnection().prepareStatement(consultaSql);
sqlAddAlbum.setInt(1, getMaxIdAlbum());
sqlAddAlbum.setString(2, albumVO.getNameAlbum());
sqlAddAlbum.setInt(3, getIdArtist());
Integer affectedRows=sqlAddAlbum.executeUpdate();
if(affectedRows>0){
JOptionPane.showMessageDialog(null, "Album has been inserted","Information",JOptionPane.INFORMATION_MESSAGE);
}else{
JOptionPane.showMessageDialog(null, "Album has not been inserted", "Error", JOptionPane.ERROR_MESSAGE);
}
sqlAddAlbum.close();
connection.closeConnection();
}catch(SQLException exception){
excepcion.printStackTrace();
JOptionPane.showMessageDialog(null, "Album could not be added", "Error", JOptionPane.ERROR_MESSAGE);
}
}
来自@Rafael Osipov的最新更新
String nameArtist=chooseArtist.getSelectedItem().toString();
int artistId = getIdArtist(nameArtist);
System.out.println("artistId = " + artistId);
我粘贴该代码以显示我如何从Combobox获取艺术家的名字,它不需要更改或调整,打印行是调试行,因此也不需要更改。
就像我说的那样问题出现在addAlbum()
中,因为你对getIdArtist()
做了第一次更改,它强调了对此方法的调用,我不知道如何解决它,我希望我现在能说清楚。
答案 0 :(得分:0)
在线:
ArtistVO artistVO=new ArtistVO();
您正在按班级ArtistV0
创建新对象。由于我们没有这个类的代码,我假设这个对象在里面是空的,并且在创建对象时没有设置艺术家名称。
致电时:
artistVO.getNameArtist()
在刚刚创建的对象上,你得到一个空字符串,你的sql看起来像这样:
SELECT ArtistId from artist where Name=''
当你执行你的sql时,你没有得到艺术家姓名为空的记录,因为你的artist
表中没有这样的记录。
<强>更新强>
请查看您的getIdArtist()
方法。即使您在此方法之外选择了艺术家姓名,也不要在此方法中使用此选定的艺术家姓名。您正在此方法内创建一个新对象,此对象具有空的艺术家名称。
将外部和已填充的 ArtistVO
对象作为参数传递给此方法并使用它:
public int getIdArtist(ArtistVO artistVO){
Conexion connection=new Conexion();
int id=0;
try{
String cSql="SELECT ArtistId from artist where Name=?";
PreparedStatement sqlArtistId=connection.getConnection().prepareStatement(cSql);
sqlArtistId.setString(1, artistVO.getNameArtist());
ResultSet result=sqlArtistId.executeQuery();
System.out.println(id); //debug
while(result.next()){
id=result.getInt("ArtistId");
}
return id;
}catch(SQLException exception){
exception.printStackTrace();
return 0;
}
}
<小时/> 更新#2
请注意,java语句区分大小写。我不确定chooseArtist.getSelectedItem()
会返回什么,所以我再次更新了您的方法。
检查以下代码。
以新的方式声明getIdArtist()
:
public int getIdArtist(String artistName){
Conexion connection=new Conexion();
int id=0;
try{
String cSql="SELECT ArtistId from artist where Name=?";
PreparedStatement sqlArtistId=connection.getConnection().prepareStatement(cSql);
sqlArtistId.setString(1, artistName);
ResultSet result=sqlArtistId.executeQuery();
System.out.println(id); //debug
while(result.next()){
id=result.getInt("ArtistId");
}
return id;
}catch(SQLException exception){
exception.printStackTrace();
return 0;
}
}
在代码中使用此方法:
String nameArtist=chooseArtist.getSelectedItem().toString();
int artistId = getIdArtist(nameArtist);
System.out.println("artistId = " + artistId);