2014-06-05 2 views
-1

Для школьного проекта я делаю Музыкальный проигрыватель, используя простую базу данных (для имени, исполнителя, длины, альбома ...), и я сделал это 1/2 но уже сейчас, когда я пытаюсь подключиться к базе данных школы это дает мне ошибку:Ошибка подключения к базе данных в NetBeans (ошибка ora-00933)

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()); 
     } 

Большое спасибо!

+0

попробуйте это, выполнитеQuery («выберите Song.Name, Artist.name из песни, альбома, исполнителя, где Song.Album_ID = Album.ID и Album.Artist_fk = Artist.ID и Song.name =" + имя + ";"); – hari

ответ

0

Вы пробовали положить pb.close в конце концов, как это, чтобы убедиться, что он не закрывает соединение неожиданно

finally 
{ 
pb.close() 
} 

попробовать Также работает этот запрос вручную, так как это может быть проблема с самим запросом

+0

Не работает, даже если он находится в конце блока – user3710762

0

Переменная 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(); 
0

Обновление ваш 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, необходимо указать I t в одинарных кавычках

Смежные вопросы