对于学校项目,我正在使用一个简单的数据库(名称,艺术家,长度,专辑…)做音乐播放器,我已经完成了1/2,但现在当我试图连接到学校数据库它给了我一个错误:
ORA-00933: SQL command not properly ended.
我检查了我的代码一千次,但没有发现一个错误。下面是连接部分(和sql命令):
try{
String name=display.getText();
String url="jdbc:oracle:thin:@193.2.139.248:1521:ers";
Class.forName("oracle.jdbc.OracleDriver").newInstance();
Connection pb=DriverManager.getConnection(url,"username", "password");
Statement sta=pb.createStatement();
ResultSet rs=sta.executeQuery("select Song.Name, Artist.name from Song,Album,Artist where Song.Album_ID=Album.ID and Album.Artist_fk=Artist.ID and Song.name="+name);
if(rs.next()){
JOptionPane.showMessageDialog(rootPane, rs);
}
else{
JOptionPane.showMessageDialog(rootPane, "Song not found");
}
pb.close();
}
catch(Exception e){
JOptionPane.showMessageDialog(rootPane, e.getMessage());
}
非常感谢!
你试过把pb。像这样关闭到finally,以确保它没有意外关闭连接
finally
{
pb.close()
}
也尝试手动运行查询,因为它可能是查询本身的问题
变量name
在select
查询中没有正确使用。
使用PreparedStatement
,这样作为数据一部分的任何特殊字符都可以安全地转义。
:
Statement sta=pb.createStatement();
ResultSet rs=sta.executeQuery("select Song.Name, Artist.name from Song,Album,Artist
where Song.Album_ID=Album.ID
and Album.Artist_fk=Artist.ID
and Song.name="+name);
:
String sql = "select Song.Name, Artist.name from Song, Album, Artist
where Song.Album_ID=Album.ID
and Album.Artist_fk=Artist.ID
and Song.name=?";
PreparedStatement pst = pb.prepareStatement( sql );
ResultSet rs = pst.executeQuery();
将SQL查询更新为:
ResultSet rs=sta.executeQuery("select Song.Name, Artist.name from Song,
Album,Artist where Song.Album_ID=Album.ID and Album.Artist_fk=Artist.ID
and Song.name='" + name +'" ");
由于name
是一个字符串,您需要在单引号