Java 连接到NetBeans中的数据库失败(错误ora-00933)
对于学校项目,我正在使用一个简单的数据库(名称、艺术家、长度、专辑…)制作音乐播放器,我已经完成了1/2,但现在当我尝试连接到学校数据库时,出现了一个错误:Java 连接到NetBeans中的数据库失败(错误ora-00933),java,mysql,sql,netbeans,database-connection,Java,Mysql,Sql,Netbeans,Database Connection,对于学校项目,我正在使用一个简单的数据库(名称、艺术家、长度、专辑…)制作音乐播放器,我已经完成了1/2,但现在当我尝试连接到学校数据库时,出现了一个错误: ORA-00933:SQL命令未正确结束。 我已经检查了我的代码一千次,但没有发现错误这是连接部分(和sql命令): try{ String name=display.getText(); String url="jdbc:oracle:thin:@193.2.139.248:1521:ers"; Class.forName("oracl
ORA-00933:SQL命令未正确结束。
我已经检查了我的代码一千次,但没有发现错误这是连接部分(和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.close放入finally中,以确保它不会意外关闭连接
finally
{
pb.close()
}
还可以尝试手动运行该查询,因为它可能与查询本身有关变量
名称
在选择
查询中未正确使用
使用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();
至:
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
是一个字符串,您需要在单引号中指定它尝试执行以下操作(“从歌曲、唱片、艺人中选择Song.name、Artister.name、Album、Artister where Song.Album_ID=Album.ID和Album.Artister_fk=Artister.ID和Song.name=“+name+”;”;