class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

JDBC

загрузка драйвера
соединение с БД
выполнение запросов
параметризованные запросы

ODBC

ODBC
ODBC для wxWidgets
JDBC - ODBC мост

ADO

ADO

VCL

VCL компоненты

PHP

PHP

DBI (perl)

dbi пример

Hibernate

Hibernate

Справка по JDBC

Параметризованные запросы

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


import java.sql.*;
...
Connection conn;        
PreparedStatement psql;
int cnt;
try{
Class.forName("com.mysql.jdbc.Driver").
          newInstance();
System.out.println("load driver - ok");
conn = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/test?"+
            "user=root&password=root1");
System.out.println("connection - ok");

// создание параметризованного запроса
psql = conn.prepareStatement(
      "update tblname set str=replace(str, ?, ?)"+
      "where str like ?");

// задаем значения параметров
psql.setString(1, "old");
psql.setString(2, "new");
psql.setString(3, "old%");

// выполняем запрос
cnt = psql.executeUpdate();
System.out.println(cnt+" rows updated");
}       
catch (Exception e) {     
System.out.println("Some error");
e.printStackTrace();
}

Oracle расширяет стандарт SQL, разрешая заменить знак вопроса на :n, где n номер параметра.


Class.forName("oracle.jdbc.OracleDriver").
          newInstance();
System.out.println("load driver - ok");

// замените на свой ip-адрес
conn = DriverManager.getConnection(
          "jdbc:oracle:thin:root/root1@"+
          "//10.4.6.229:1521/orcl");

// создание параметризованного запроса
psql = conn.prepareStatement(
      "update tblname set str=replace(str, :1, :2)"+
      "where str like :3");
...

Аналогичным образом используются объекты типа CallableStatement для выполнения хранимых процедур и функций. Перед выполнением такого запроса необходимо зарегистрировать типы выходных параметров и результата. Пусть имеется функция finc, возвращающая аргумент, увеличенный на единицу, и аналогичная процедура pinc, сохраняющая результат в самом аргументе.


// пример вызова процедуры для Oracle
CallableStatement csql;
...
csql = conn.prepareCall("begin ?:=finc(?); end;" );

// задание значения второму аргументу
csql.setInt(2, 5);

// регистрация типа результата (первый аргумент)
csql.registerOutParameter(1,java.sql.Types.INTEGER);

// выполнение запроса
csql.executeUpdate();

// вывод результата
System.out.println("result = " + csql.getInt(1));

Ниже приведены только примеры создания процедурного запросы для различных баз. Обратите внимание, что PostgreSQL следует стандарту, т.е. вызов происходит внутри фигурных скобок.


//--------------------------------------
// вызов процедуры в Oracle
csql = conn.prepareCall("begin pinc(?); end;" );

//--------------------------------------
// вызов процедуры в MySQL 
csql = conn.prepareCall("call pinc(?);" );

//--------------------------------------
// вызов процедуры и функции в PostgreSQL 
// разделитель ; перед закрывающей фигурной
// скобкой приведет к ошибке
// команда call должна содержать только маленькие
// буквы, например, Call приведет к ошибке
csql = conn.prepareCall("{call pinc(?)}" );
csql = conn.prepareCall("{? = call finc(?)}" );

Рейтинг@Mail.ru