2011-08-21 24 views
1

Я пытаюсь вставить значения в базу данных Oracle 10g, используя приведенный ниже код, но при этом выдает ошибку «Отсутствующее выражение» при выполнении. Мне нужно передать ссылочные значения в предложение insert, но не знаю точного синтаксиса или способа его выполнения. Пожалуйста, помогите мне в этом. Спасибо.Как вставить ссылочные значения в базу данных с помощью JDBC?

Student Таблица: -

     Sid  VARCHAR2(200) PRIMARY KEY CHECK(Sid>0), 
         Pass_word VARCHAR2(10) NOT NULL, 
         S_name VARCHAR2(20) NOT NULL, 
         G_name VARCHAR2(20)   , 
         Branch VARCHAR2(10) NOT NULL, 
         D_company VARCHAR2(20)   , 
         B_Percent INT NOT NULL CHECK(B_Percent<100), 
         twelth_percent INT NOT NULL CHECK(twelth_percent<100), 
         tenth_percent INT NOT NULL CHECK(tenth_percent<100), 
         Certify VARCHAR2(30), 
         Semester INT NOT NULL CHECK(Semester<9), 
         D_Birth DATE NOT NULL, 
         Sex  VARCHAR2(6) NOT NULL 

КОД:

Connection connection = null; 

try 
{ 

    // Load the JDBC driver 

    String driverName = "sun.jdbc.odbc.JdbcOdbcDriver"; 

    Class.forName(driverName); 

    connection = DriverManager.getConnection("jdbc:odbc:placement","siddharth","sid"); 

    studentID = StudentID.getText(); 
    spassword = PasswordField.getPassword(); 
    studentname = NameField.getText(); 
    Gname = GuardianField.getText(); 
    branch = BranchField.getText(); 
    dcompany = DcompanyField.getText(); 
    bpercent = BtechField1.getText(); 
    twelthpercent = TwelthField.getText(); 
    tenthpercent = TenthField.getText(); 
    semester = SemesterField.getText(); 
    certify = CertificationField.getText(); 
    sex = SexCombo.getActionCommand(); 
    date = (Date) DateTextField1.getValue(); 



    Statement stmt = connection.createStatement(); 
    stmt.executeUpdate("insert into student " +"(sid,pass_word,s_name,g_name,branch,d_company,b_percent,twelth_percent,tenth_percent,certify,semester,d_birth,sex)"+ 
       "values(studentID, spassword,studentname,Gname,branch,dcompany,bpercent,twelthpercent,tenthpercent,certify,semester,date,sex)"); 

    stmt.close(); 
    connection.close(); 
    } 

    catch (ClassNotFoundException e) { 
    // Could not find the database driver 
     JOptionPane.showMessageDialog(null,e); 
    } 
    catch (SQLException e) { 
    // Could not connect to the database 
     JOptionPane.showMessageDialog(null,e); 
    } 

ответ

5

В настоящее время ваш SQL заявление выглядит следующим образом:

insert into student (sid, pass_word, ...) values (studentID, spassword, ...) 

Имена переменных не значат для SQL сам.

Вы должны использовать подготовленное заявление. Например, ваш SQL должен выглядеть следующим образом:

insert into student (sid, pass_word, ...) values (?, ?, ...) 

, а затем использовать:

PreparedStatement stmt = connection.prepareStatement(sql); 
stmt.setString(1, studentID); 
stmt.setString(2, spassword); 

// etc 

Смотрите JDBC tutorial on prepared statements для получения дополнительной информации.

+0

+1, быстрее, чем у меня, за тот же ответ, с каким кодом. –

+0

Подготовлено Состояние состояния = connection.prepareStatement (sql); «sql» здесь дает ошибку. Что именно нужно написать вместо «sql» ?? –

+0

@ Сиддхарт: Это текст инструкции SQL. –

0

Чтобы быть в безопасности, вы должны использовать подготовленные заявления.

Приготовьте Строка запроса

String updateString = "update " + dbName + ".COFFEES " + 
         "set SALES = ? where COF_NAME = ?"; 

Создать PrepartedStatement с этим запросом:

updateSales = connnection.prepareStatement(updateString); 

Наполните? spaceholders с вами значения:

updateSales.setInt(1, myVariable1); 
updateSales.setString(2, myVariable2); 

выполнить запрос

updateSales.executeUpdate(); 
Смежные вопросы