2015-11-16 4 views
1

Если я выполняю:Неправильный индекс столбца в JDBC PreparedStatement

Connection conn = null; 
PreparedStatement LoginStatement = null; 
ResultSet LoginResult = null; 
UpdateData(); 
String LoginQuery = "SELECT * FROM USERS WHERE USER_NAME = ? AND PASSWORD = ? "; 
try{ 
    System.out.println(LoginQuery); 
    conn = DatabaseConnection.getDBCon(); 
    LoginStatement = conn.prepareStatement(LoginQuery); 
    LoginStatement.setString(1, "ett"); 
    LoginStatement.setString(2, "ett"); 
    LoginResult = LoginStatement.executeQuery(LoginQuery); 

я получаю исключение: 63000 - ORA-03115: неподдерживаемый тип данных сети или представление

Если я cahnge? на '?'

Connection conn = null; 
PreparedStatement LoginStatement = null; 
ResultSet LoginResult = null; 
UpdateData(); 
String LoginQuery = "SELECT * FROM USERS WHERE USER_NAME = '?' AND PASSWORD = '?' "; 
try{ 
    System.out.println(LoginQuery); 
    conn = DatabaseConnection.getDBCon(); 
    LoginStatement = conn.prepareStatement(LoginQuery); 
    LoginStatement.setString(1, "ett"); 
    LoginStatement.setString(2, "ett"); 
    LoginResult = LoginStatement.executeQuery(LoginQuery); 

я

Исключение: 99999 - Ungültiger Spaltenindex

, который в основном означает неправильный индекс столбца.

Это неправда, я устанавливаю индекс 1 и 2, и есть 2 заполнителя, и индекс начинается с 1 .... любых идей?

+0

Вы уверены, вы используете правильный драйвер? И можете ли вы разместить свою строку соединения? –

ответ

3

Просто:

executeQuery(LoginQuery); // Statement 

должен быть

executeQuery(); // PreparedStatement 

Немного отвратительный дизайн API и сообщение об ошибке.


Кроме того, как ПАРОЛЬ зарезервированное слово попробовать

"SELECT * FROM USERS WHERE USER_NAME = ? AND \"PASSWORD\" = ? " 
+0

public boolean ProcessLogin() { \t \t Connection conn = null; \t \t Подготовлено Состояние: LoginStatement = null; \t \t ResultSet LoginResult = null; \t \t UpdateData(); \t \t String LoginQuery = "SELECT * FROM USERS WHERE USER_NAME = '?' И ПАРОЛЬ = '?' «; \t \t try { \t \t \t System.out.println (LoginQuery); \t \t \t conn = DatabaseConnection.getDBCon(); \t \t \t LoginStatement = conn.prepareStatement (LoginQuery); \t \t \t LoginStatement.setString (1, username); \t \t \t LoginStatement.setString (2, password); \t \t \t LoginResult = LoginStatement.executeQuery(); – user3718058

+0

К сожалению, такая же ошибка:/ – user3718058

+0

Тогда, возможно, это ПАРОЛЬ, поместите его обратно. Расширенный ответ. Функция executeQuery должна быть без параметра. –

1

Изменить код

LoginResult = LoginStatement.executeQuery(); 

Вы можете увидеть больше о первом исключением здесь java.sql.SQLException: ORA-03115: unsupported network datatype or representation

+0

Ошибка не изменяется. – user3718058

+0

@ user3718058 вы должны изменить sql на «SELECT * FROM USERS WHERE USER_NAME =? AND PASSWORD =?»; и измените блок выполнения на LoginResult = LoginStatement.executeQuery(); – codeaholicguy

0

Использование executeQuery() на месте от executeQuery(LoginQuery);

Нет необходимости менять ? к '?'

+0

попробуйте this.it должен работать. –

0

executeQuery(String query) метод не может быть вызван на PreparedStatement или CallableStatement. Используйте executeQuery()

0

Обратите внимание на различие между следующими вызовами:
// PreparedStatement
PreparedStatement.executeQuery(); // Обычно используется для хранимых процедур

// Заявление
bool res = Statement.execute(String sql);

ResultSet rs = Statement.executeQuery(String sql); 
Смежные вопросы