2013-08-16 21 views
8

stworzyłem bazę danych z jednej tabeli w MySQL:Wstawianie rekordów do tabeli MySQL przy użyciu 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) 
); 

Próbowałem wstawić rekordu przy użyciu 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!"); 
    } 
} 

Wyjście wydaje się powrócić z powodzeniem : insert_success

Ale kiedy wybrać z MySQL, włożona płyta jest pusta: mysql_blank_record

Dlaczego wstawia pusty rekord?

+0

Nie używasz kurs _ *** zmiennych w zapytaniu. –

+1

Nie ustawiasz żadnych wartości w instrukcji wstawiania. Sprawdź przy użyciu readyStatement ze zmiennymi związanymi, zamiast tworzyć instrukcję "string". Spowoduje to wstawienie danych i uniemożliwi uzyskanie problemów z iniekcją SQL. – Dave

Odpowiedz

17

nie, że nie może pracować (nie z rzeczywistym danych):

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

go zmienić na:

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

Tworzenie PreparedStatment z tym SQL i wstawić wartości z indeksu:

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

Witam, próbowałem zmienić część kodu na [this] (http://pastebin.com/ZCrxG6F3). Ale powraca "nie można znaleźć symbolu" dla zmiennej 'prepareStatement'. –

+0

należy utworzyć przed użyciem. –

+0

PreparedStatement preparedStatement = conn.prepareStatement (sql); –

1

Można to również zrobić tak, jeśli nie chcesz używać przygotowanych wyciągów.

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

Dlaczego nie wstawiono wartości, ponieważ nie podawano wartości, ale podajesz nazwy zmiennych, które zostały użyte.

+2

Powinieneś zawsze używać readyStatements. Ten rodzaj kodu jest złą praktyką i prowadzi do problemów z iniekcją SQL. – Dave

+0

zgadzam się z Dave'em, ale dla początkujących powinien się tego nauczyć –

+0

nie powinien się tego uczyć w ten sposób ... :) –

0

Jest to błąd w INSERT chage go poniżej i spróbuj: String sql = "insert into table_name values ('" + Col1 +"','" + Col2 + "','" + Col3 + "')";

+0

Podczas gdy to rozwiązuje problem, zdecydowałem się użyć podejścia PreparedStatement. Dziękuję za pomoc. –

Powiązane problemy