2013-08-16 3 views
8

Я создал базу данных с одной таблицы в MySQL:Вставка записей в таблицу MySQL с помощью Java

CREATE DATABASE iac_enrollment_system; 

USE iac_enrollment_system; 

CREATE TABLE course(
    course_code CHAR(7), 
    course_desc VARCHAR(255) NOT NULL, 
    course_chair VARCHAR(255), 
    PRIMARY KEY(course_code) 
); 

Я попытался вставить запись с помощью Java:

// STEP 1: Import required packages 
import java.sql.*; 
import java.util.*; 

public class SQLInsert { 
// JDBC driver name and database URL 
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
static final String DB_URL = "jdbc:mysql://localhost:3306/iac_enrollment_system"; 

// Database credentials 
static final String USER = "root"; 
static final String PASS = "1234"; 

public static void main(String[] args) { 
    Connection conn = null; 
    Statement stmt = null; 
    Scanner scn = new Scanner(System.in); 
    String course_code = null, course_desc = null, course_chair = null; 

    try { 
     // STEP 2: Register JDBC driver 
     Class.forName("com.mysql.jdbc.Driver"); 

     // STEP 3: Open a connection 
     System.out.print("\nConnecting to database..."); 
     conn = DriverManager.getConnection(DB_URL, USER, PASS); 
     System.out.println(" SUCCESS!\n"); 

     // STEP 4: Ask for user input 
     System.out.print("Enter course code: "); 
     course_code = scn.nextLine(); 

     System.out.print("Enter course description: "); 
     course_desc = scn.nextLine(); 

     System.out.print("Enter course chair: "); 
     course_chair = scn.nextLine(); 

     // STEP 5: Excute query 
     System.out.print("\nInserting records into table..."); 
     stmt = conn.createStatement(); 

     String sql = "INSERT INTO course " + 
      "VALUES (course_code, course_desc, course_chair)"; 
     stmt.executeUpdate(sql); 

     System.out.println(" SUCCESS!\n"); 

    } catch(SQLException se) { 
     se.printStackTrace(); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if(stmt != null) 
       conn.close(); 
     } catch(SQLException se) { 
     } 
     try { 
      if(conn != null) 
       conn.close(); 
     } catch(SQLException se) { 
      se.printStackTrace(); 
     } 
    } 
    System.out.println("Thank you for your patronage!"); 
    } 
} 

Выход появляется вернуться успешно : insert_success

Но когда я выбираю из MySQL, вставленная запись пустая: mysql_blank_record

Почему он вставляет пустую запись?

+0

Вы не используете курс _ *** переменные в запросе. –

+1

Вы не устанавливаете значения в инструкции insert. Проверьте, используя подготовленноеStatement со связями, вместо того, чтобы составлять инструкцию «string» insert. Это позволит вставить данные и не даст вам проблем с SQL-инъекциями. – Dave

ответ

17

нет, что не может работать (а не с реальными данными):

String sql = "INSERT INTO course " + 
     "VALUES (course_code, course_desc, course_chair)"; 
    stmt.executeUpdate(sql); 

изменить его:

String sql = "INSERT INTO course (course_code, course_desc, course_chair)" + 
     "VALUES (?, ?, ?)"; 

Создать PreparedStatment с этим SQL и вставить значения с индексом:

PreparedStatement preparedStatement = conn.prepareStatement(sql); 
preparedStatement.setString(1, "Test"); 
preparedStatement.setString(2, "Test2"); 
preparedStatement.setString(3, "Test3"); 
preparedStatement.executeUpdate(); 
+0

Привет, я попытался изменить часть кода на [this] (http://pastebin.com/ZCrxG6F3). Но он возвращает 'can find find' для переменной' prepareStatement'. –

+0

couse вы должны создать его перед использованием. –

+0

ПодготовленоУтверждение подготовленоСтатус = conn.prepareStatement (sql); –

1

это также можно сделать так, если вы не хотите использовать подготовленные заявления.

String sql = "INSERT INTO course(course_code,course_desc,course_chair)"+"VALUES('"+course_code+"','"+course_desc+"','"+course_chair+"');" 

Почему оно не вставить значение, потому что вы не предоставляли значения, но были указаны имена переменных, которые вы использовали.

+2

Вы всегда должны использовать readyStatements. Этот тип кода является плохой практикой и приведет к проблемам SQL-инъекций. – Dave

+0

согласен Дэйв, но для новичков он тоже должен учиться так –

+0

нет, он не должен учиться этому так ... :) –

0

Существует ошибка в вашем вставить заявление Ставить его ниже и попробовать: String sql = "insert into table_name values ('" + Col1 +"','" + Col2 + "','" + Col3 + "')";

+0

Хотя это также решает проблему, я решил использовать подход PreparedStatement. Спасибо за помощь. –