2013-02-19 3 views
-1

Я учусь JDBC использовать на Spring Framework следуя урока: http://www.tutorialspoint.com/spring/spring_jdbc_example.htmОпределенные сомнения по поводу логики JDBC в Spring Framework

Так у меня есть следующие таблицы с именем студента на мой MySql БД:

mysql> describe Student; 
+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| ID | int(11)  | NO | PRI | NULL | auto_increment | 
| NAME | varchar(20) | NO |  | NULL |    | 
| AGE | int(11)  | NO |  | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 

Как вы можете видеть в ссылке учебника у меня есть интерфейс с именем StudentDAO, которые описывают операцию CRUD на этом студенческого столе моего объекта DAO

Хорошо, глядя на StudentJDBCTemplate класс: это реализация интерфейса StudentDAO, поэтому в этом классе у меня есть вся реализация для CRUD-метода, объявленного внутри интерфейса.

Хорошо ... У меня есть некоторые сомнения относительно метода JDBC в этом классе.

Например, когда у меня есть что-то вроде:

public void create(String name, Integer age) { 
    String SQL = "insert into Student (name, age) values (?, ?)"; 

    jdbcTemplateObject.update(SQL, name, age); 
    System.out.println("Created Record Name = " + name + " Age = " + age); 
    return; 
} 

Хорошо ... Я думаю, что этот метод создать новую запись в моей студенческой таблице.

Переменная SQL содержит строку, которая rappresents мой запрос и здесь я есть первые сомнения

Когда у меня есть:

Строка SQL = «вставить Студента (имя, возраст) значения (?,?) ";

Что именно означает? Это означает, что два входных параметра my create() заменяют имя «name» и «age» int this String?

ммм ... это звучит странно для меня, потому что это выглядит как строка (Infact является Whithin «»)

scond сомнения относится к следующей строке:

jdbcTemplateObject.update(SQL, name, age); 

Если я есть SQL-запрос внутри SQL String, почему я должен передать также имя переменной и возраст?

Можете ли вы помочь мне хорошо понять, как работает JDBC?

Tnx

Andrea

+1

прочитайте о [Подготовленные утверждения] (http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html) – leonbloy

ответ

1

Когда у меня есть:

Строка SQL = "(?), Вставить Студент (имя, возраст) значение";

Что именно означает? Это означает, что два входных параметра my create() заменяют имя «name» и «age» int this String?

JDBC заменит два заполнителя нумерации соответствующими значениями. Это считается хорошей практикой, так как это помогает предотвратить SQL-инъекцию.

+0

На самом деле драйвер JDBC или даже сервер базы данных заменяет«? »Заполнителями значение параметра. –

+0

@MarkRotteveel Спасибо за разъяснение этого. Я уточню свой ответ. – vegemite4me

1

Этот

insert into Student (name, age) values (?, ?) 

означает, что вы вставляя запись (строку) в таблицу Student, указав (в указанном порядке) имя и возраст. Каждый '?' относится к названию столбца, указанному в порядке, поэтому первый «?» является заполнитель для значения имени и т. д. Обратите внимание, что вы можете вставить запись и (ограничения), чтобы указать только подмножество столбцов, поэтому вы можете просто указать имя или возраст или что-то еще, если этот столбец существует.

Этот заполнитель (?) существует такой механизм, что вам не нужно беспокоиться о том, чтобы избежать ваших значений для name и т. д., и создавая путем конкатенации/замены SQL-оператора that isn't valid. Заполнитель позволяет вставить любую строку для имени, не беспокоясь о котировках, комментариях SQL и т. Д., Что может вызвать проблемы, если вы просто создали свою строку, используя конкатенацию, например.

String sql = "insert into Student... " + name + ", " + age; 

Обратите внимание, что имя и возраст в

jdbcTemplateObject.update(SQL, name, age); 

относятся к переменным Java, а не имена столбцов таблицы. Они могут так же легко быть

jdbcTemplateObject.update(SQL, x, y); 

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

+0

Пожалуйста, не могли бы вы объяснить мне, что вы имеете в виду как механизм запирания? В этом случае, что именно означает значения (?,?) Это означает, что если бы я поместил только значение имени в таблицу, то мне нужно сделать что-то вроде: Вставить в значения Student (name) (?) Is это правильно? Если да ... что я должен делать, если бы я вставил только значение возраста в новую строку таблицы? Tnx – AndreaNobili

+0

Это в значительной степени. Если вы написали SQL и забыли JDBC, вы должны написать «insert into (Student) (имя, возраст)» («Andrea», 21) « –

Смежные вопросы