2013-08-16 29 views
8

ho creato un database con una tabella in MySQL:Inserimento di record in una tabella MySQL con 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) 
); 

ho cercato di inserire un record utilizzando 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!"); 
    } 
} 

L'uscita sembra di tornare con successo : insert_success

Ma quando seleziono da MySQL, il record inserito è vuoto: mysql_blank_record

Perché si sta inserendo un record vuoto?

+0

Non si sta utilizzando ovviamente _ *** variabili nella query. –

+1

Non si stanno impostando valori sull'istruzione di inserimento. Controlla utilizzando una dichiarazione preparata con le variabili bind invece di creare una dichiarazione di inserimento "stringa". Questo inserirà i dati e ti impedirà di ottenere problemi di SQL injection. – Dave

risposta

17

no che non può funzionare (non con dati reali):

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

modificarla in:

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

Crea una PreparedStatment con che SQL e inserire i valori con l'indice:

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

Ciao, ho provato a cambiare la parte del codice in [this] (http://pastebin.com/ZCrxG6F3). Ma sta restituendo 'impossibile trovare il simbolo' per la variabile' prepareStatement'. –

+0

di couse devi crearlo prima dell'uso. –

+0

PreparedStatement preparedStatement = conn.prepareStatement (sql); –

1

questo può essere fatto anche in questo modo se non si desidera utilizzare istruzioni preparate.

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

Perché non ha ancora inserire valore è perché non fornivano valori, ma si fornivano i nomi delle variabili che avete usato.

+2

Dovresti sempre usare preparatiStatements. Questo tipo di codice è una cattiva pratica e porterà a problemi di iniezione SQL. – Dave

+0

d'accordo Dave ma per i principianti dovrebbe imparare anche questo –

+0

no, non dovrebbe imparare in questo modo ... :) –

0

c'è un errore nella vostra dichiarazione dell'inserto chage al di sotto e provare: String sql = "insert into table_name values ('" + Col1 +"','" + Col2 + "','" + Col3 + "')";

+0

Anche se questo risolve anche il problema, ho scelto di utilizzare l'approccio PreparedStatement. Grazie per l'aiuto. –

Problemi correlati