【问题标题】:Connection to database in NetBeans unsuccessful (error ora-00933)在 NetBeans 中连接到数据库失败(错误 ora-00933)
【发布时间】:2024-01-22 14:09:01
【问题描述】:

对于学校项目,我正在使用一个简单的数据库(名称、艺术家、长度、专辑......)制作音乐播放器,我已经完成了 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());
       }

非常感谢!

【问题讨论】:

  • 试试这个,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+";");

标签: java mysql sql netbeans database-connection


【解决方案1】:

您是否尝试过像这样将 pb.close 放入 finally 中,以确保它不会意外关闭连接

finally
{
pb.close()
}

也可以尝试手动运行该查询,因为这可能是查询本身的问题

【讨论】:

    【解决方案2】:

    变量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();
    

    【讨论】:

      【解决方案3】:

      将您的 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是String,所以需要在单引号内指定

      【讨论】: