L'insertion d'enregistrements dans une table MySQL à l'aide de Java
J'ai créé une base de données avec une table dans MySQL:
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)
);
J'ai essayé d'insérer un enregistrement à l'aide de 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!");
}
}
La sortie s'affiche à nouveau avec succès:
Mais lorsque je sélectionne à partir de MySQL, l'enregistrement inséré est vide:
Pourquoi est-il de l'insertion d'un enregistrement vide?
Vous n'êtes pas à l'aide de course_*** variables dans la requête.
Vous n'êtes pas définir toutes les valeurs sur l'instruction insert. Découvrez à l'aide d'un preparedStatement avec bind variables plutôt que de faire une "chaîne" instruction insert. Cela permettra d'insérer les données et de cesser de vous faire une injection SQL questions.
Vous n'êtes pas définir toutes les valeurs sur l'instruction insert. Découvrez à l'aide d'un preparedStatement avec bind variables plutôt que de faire une "chaîne" instruction insert. Cela permettra d'insérer les données et de cesser de vous faire une injection SQL questions.
OriginalL'auteur | 2013-08-16
Vous devez vous connecter pour publier un commentaire.
pas de cela ne peut pas fonctionner(pas avec des données réelles):
le modifier:
Créer un PreparedStatment avec sql et insérer les valeurs de l'indice:
cannot find symbol
pour la variableprepareStatement
.de couse, il faut le créer avant de l'utiliser.
PreparedStatement preparedStatement = conn.prepareStatement(sql);
Salut, désolé si je suis de nouveau à cela. J'ai changé le code. Ici c'est mon pastebin. Il est en train de jeter un
Can not issue data manipulation statements with executeQuery()
.oui, vous devez utiliser executeUpdate. Je vais mettre à jour ma réponse
OriginalL'auteur Stefan Beike
cela peut également être fait comme ceci si vous ne voulez pas utiliser les requêtes préparées.
Pourquoi il n'a pas valeur d'insertion est parce que vous n'offraient pas de valeurs, mais vous étiez en donnant des noms de variables que vous avez utilisé.
acceptez de Dave, mais pour les débutants, il doit apprendre de cette façon aussi
non, il ne faut pas l'apprendre de cette façon... 🙂
Aayush, je suis en désaccord. Vous ne devriez pas apprendre de mauvaises habitudes qu'ils collent. Apprendre à utiliser preparedStatements depuis le début et vous permettra de mieux écrire le code.
J'ai opté pour l'utilisation de la PreparedStatement approche. Encore, votre explication sur pourquoi il n'a pas d'insérer des valeurs a été utile. Upvote pour que. Je vous remercie.
OriginalL'auteur Bilbo Baggins
Il y a une erreur dans votre déclaration insert chage à ci-dessous et essayez :
String sql = "insert into table_name values ('" + Col1 +"','" + Col2 + "','" + Col3 + "')";
OriginalL'auteur Satyen Udeshi