Java sql types - IT Справочник
Llscompany.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java sql types

Mapping MySQL Data Types in Java

  • Questions: Ask
  • Latest
  • Tutorials:Latest
  • Topics

Data types of MySQL and Java programming language are not same, its need some mechanism for transferring data between an database using MySQL data types and a application using Java data types.

Data types of MySQL and Java programming language are not same, its need some mechanism for transferring data between an database using MySQL data types and a application using Java data types.

Mapping MySQL Data Types in Java

Data types of MySQL and Java programming language are not same, its need some mechanism for transferring data between an database using MySQL data types and a application using Java data types. We need to provide Java mappings for the common MySQL data types. We have to confirm that we have proper type information then only we can correctly store and retrieve parameters and recover results from MySQL statements.

There is no particular reason that the Java data type needs to be exactly isomorphic to the MySQL data type. For example, Java String don’t precisely match any of the MySQL data CHAR type, but it gives enough type information to represent CHAR, VARCHAR or LONGVARCHAR successfully.

The following table represent the default Java mapping for various common MySQL data types:

Here is the video description:

    CHAR, VARCHAR and LONGVARCHAR
    MySQL data types CHAR, VARCHAR, LONGVARCHAR are closely related. CHAR represents a small, fixed-length character string, VARCHAR represents a small, variable-length character string, and LONGVARCHAR represents a large, variable-length character string. There is no need for Java programmer to distinguish these three MySQL data types. These can be expressed identically in Java. These data types could be mapped in Java to either String or char[]. But String seemed more appropriate type for normal use. Java String class provide a method to convert a String into char[] and a constructor for converting a char[] into a String.

The method ResultSet.getString allocates and returns a new String. It is suitable for retrieving data from CHAR, VARCHAR and LONGVARCHAR fields. This is suitable for retrieving normal data, but LONGVARCHAR MySQL type can be used to store multi-megabyte strings. So that Java programmers needs a way to retrieve the LONGVARCHAR value in chunks. To handle this situation, ResultSet interface have two methods for allowing programmers to retrieve a LONGVARCHAR value as a Java input stream from which they can subsequently read data in whatever size chunks they prefer. These methods are getAsciiStream and getCharacterStream, which deliver the data stored in a LONGVARCHAR column as a stream of ASCII or Unicode characters.


NUMERIC and DECIMAL
The NUMERIC and DECIMALMySQL data types are very similar. They both represent fixed point numbers where absolute precision is required. The most convenient Java mapping for these MySQL data type is java.math.BigDecimal. This Java type provides math operations to allow BigDecimal types to be added, subtracted, multiplied, and divided with other BigDecimal types, with integer types, and with floating point types.

jdbc: получить имя типа SQL из кода java.sql.Type

У меня есть массив с именами полей и кодами типа jdbc. (Те коды int, которые вы можете найти в

Я использую драйвер 4-го уровня.

Я не могу понять, как спросить у драйвера соответствующие имена типов SQL (DDL). Это было бы полезно в jdbc году и на местных диалектах.

У меня есть
(CustomerId, 1) (CustomerName, -8)

(customerId, INT) (customerId, VARCHAR (200))

Где я могу найти функции, которые помогут мне в этом? Я использую jdbc в jython через zxJDBC, таким образом, я могу использовать все функции java и python DB API 2.0.

7 Ответов

Чтобы конкретно ответить «получить имя типа SQL из кода java.sql.Type», если вы используете версию java, которая может делать отражение, вот небольшой служебный метод, который в значительной степени делает то же самое:

Добавьте import java.lang.reflect.Field; в объявления импорта. Как только вы это сделаете, просто используйте его следующим образом:

Java 8 и позже: JDBCType & SQLType

С улучшениями в API-х годах, начиная с Java 8 и JDBC 4.2, у нас есть JDBCType и SQLType , и в том же духе, как и некоторые другие примеры, можно просто использовать следующим образом:

Но, конечно, зачем использовать числовые типы для начала. Сделайте привычку и переключитесь с числовых на enum константы, определенные в JDBCType :

Однако этого может быть недостаточно, чтобы иметь что-то достаточно хорошее для использования в DDL . возможно, Вам потребуется реализовать перевод для конкретного поставщика. Например, вам может потребоваться рассмотреть возможность перевода VARCHAR в VARCHAR2 в случае _42.

Вам нужен объект ResultSetMetaData вашего текущего ResultSet . Вы можете получить его с помощью getMetaData() . Перебрать столбцы и колонки вызов foreach метод

из вашего ResultSetMetaData .

i представляет собой номер столбца (начиная с 1).

Вы, кажется, используете некоторые методы метаданных JDBC, которые вы еще не опубликовали. Я полагаю, что вы видите имя столбца вместе с константой типа JDBC, из которой можно вывести тип столбца. Взгляните на java.sql API , чтобы узнать больше о том, как получить больше метаданных.

Читать еще:  Как восстановить логин от почты mail ru

У Spring есть удобный помощник Enum под названием JdbcTypesEnum , но это действительно довольно странно, что это не является частью JDBC собственно. Однако вместо использования

Я бы использовал

при извлечении типа столбца. Например, при проверке таблицы базы данных H2 со специальным типом VARCHAR_IGNORECASE или UUID :

Но обратите внимание, что вы не можете охватить диапазон типов строки для всех баз данных, в этом случае int был бы несколько более удобным (но это все-таки не закрытый тип перечисления).

Библиотека помогает вам также с другими потребностями DDL, но в последнее время, похоже, не привлекает особого внимания.

Похожие вопросы:

Мне нужно напечатать реальное имя типа datbase из DbParameter.DbType , но когда я делаю что-то вроде этого DbParameter.DbType.ToString() , я получаю, например, Int32 вместо int , есть ли команда или.

У меня есть XML, который вызывается как часть кода установщика программного обеспечения. В XML я выполняю файлы SQL, используя фреймворк JDBC. Установщик терпит неудачу в точке, где JDBC получает.

У меня есть большой пакет Oracle PL / SQL с несколькими процедурами с параметрами типа IN и OUT. И некоторые из этих параметров являются определяемыми пользователем типами. Некоторые из них являются.

Как можно получить имя имени базы данных из объекта подключения try < this.ds = (DataSource) new InitialContext().lookup(java:comp/env/jdbc/amger); >catch (NamingException ne) < >Connection conObj.

Я использую jdbcdslog с log4j logging engine в веб-приложении. Я могу регистрировать SQL запроса, которые выполняются. Я хочу знать, как получить имя пакета, из которого был запущен запрос. Так что.

Java Data Types

Java Data Types

As explained in the previous chapter, a variable in Java must be a specified data type:

Example

Data types are divided into two groups:

  • Primitive data types — includes byte , short , int , long , float , double , boolean and char
  • Non-primitive data types — such as String, Arrays and Classes (you will learn more about these in a later chapter)

Primitive Data Types

A primitive data type specifies the size and type of variable values, and it has no additional methods.

There are eight primitive data types in Java:

Numbers

Primitive number types are divided into two groups:

Integer types stores whole numbers, positive or negative (such as 123 or -456), without decimals. Valid types are byte , short , int and long . Which type you should use, depends on the numeric value.

Floating point types represents numbers with a fractional part, containing one or more decimals. There are two types: float and double .

Even though there are many numeric types in Java, the most used for numbers are int (for whole numbers) and double (for floating point numbers). However, we will describe them all as you continue to read.

Integer Types

The byte data type can store whole numbers from -128 to 127. This can be used instead of int or other integer types to save memory when you are certain that the value will be within -128 and 127:

Example

Short

The short data type can store whole numbers from -32768 to 32767:

Example

The int data type can store whole numbers from -2147483648 to 2147483647. In general, and in our tutorial, the int data type is the preferred data type when we create variables with a numeric value.

Example

The long data type can store whole numbers from -9223372036854775808 to 9223372036854775807. This is used when int is not large enough to store the value. Note that you should end the value with an «L»:

Example

Floating Point Types

You should use a floating point type whenever you need a number with a decimal, such as 9.99 or 3.14515.

Float

The float data type can store fractional numbers from 3.4e−038 to 3.4e+038. Note that you should end the value with an «f»:

Example

Double

The double data type can store fractional numbers from 1.7e−308 to 1.7e+308. Note that you should end the value with a «d»:

Example

Use float or double ?

The precision of a floating point value indicates how many digits the value can have after the decimal point. The precision of float is only six or seven decimal digits, while double variables have a precision of about 15 digits. Therefore it is safer to use double for most calculations.

Scientific Numbers

A floating point number can also be a scientific number with an «e» to indicate the power of 10:

Example

Booleans

A boolean data type is declared with the boolean keyword and can only take the values true or false :

Example

Boolean values are mostly used for conditional testing, which you will learn more about in a later chapter.

Characters

The char data type is used to store a single character. The character must be surrounded by single quotes, like ‘A’ or ‘c’:

Читать еще:  Восстановление системы отключено системным администратором как включить

Example

Alternatively, you can use ASCII values to display certain characters:

Example

Tip: A list of all ASCII values can be found in our ASCII Table Reference.

Strings

The String data type is used to store a sequence of characters (text). String values must be surrounded by double quotes:

Example

The String type is so much used and integrated in Java, that some call it «the special ninth type».

A String in Java is actually a non-primitive data type, because it refers to an object. The String object has methods that is used to perform certain operations on strings. Don’t worry if you don’t understand the term «object» just yet. We will learn more about strings and objects in a later chapter.

Non-Primitive Data Types

Non-primitive data types are called reference types because they refer to objects.

The main difference between primitive and non-primitive data types are:

  • Primitive types are predefined (already defined) in Java. Non-primitive types are created by the programmer and is not defined by Java (except for String ).
  • Non-primitive types can be used to call methods to perform certain operations, while primitive types cannot.
  • A primitive type has always a value, while non-primitive types can be null .
  • A primitive type starts with a lowercase letter, while non-primitive types starts with an uppercase letter.
  • The size of a primitive type depends on the data type, while non-primitive types have all the same size.

Examples of non-primitive types are Strings, Arrays, Classes, Interface, etc. You will learn more about these in a later chapter.

2011/01/16 — Apache ObJectRelationalBridge has been retired.

For more information, please explore the Attic.

JDBC Types

Mapping of JDBC Types to Java Types

OJB implements the mapping conversions for JDBC and Java types as specified by the JDBC 3.0 specification (see JDBC 3.0 specification Appendix B, Data Type Conversion Tables). See the table below for details.

If a sql-java type mapping is needed, that doesn’t match the java types defined by the specification, e.g. a field in the persistent object class is of type int[] and the DB type is VARCHAR or a List field have to be mapped to VARCHAR a field-conversion class can be used.

Type and Value Conversions — The FieldConversion Interface

Introduction

A typical problem with O/R tools is mismatching datatypes: a class from the domain model has an attribute of type boolean but the corresponding database table stores this attribute in a column of type BIT or int.

This example explains how OJB allows you to define FieldConversions that do the proper translation of types and values.

The source code of this example is included in the OJB source distribution and resides in the test package org.apache.ojb.broker .

The problem

The test class org.apache.ojb.broker.Article contains an attribute isSelloutArticle of type boolean:

The coresponding table uses an int column ( Auslaufartikel ) to store this attribute:

The Solution

OJB allows to use predefined (or self-written) FieldConversions that do the appropiate mapping. The FieldConversion interface declares two methods: javaToSql(. ) and sqlToJava(. ) :

The method FieldConversion.sqlToJava() is a callback that is called within the OJB broker when Object attributes are read in from JDBC result sets. If OJB detects that a FieldConversion is declared for a persistent classes attributes, it uses the FieldConversion to do the marshalling of this attribute.

For the above mentioned problem of mapping an int column to a boolean attribute we can use the predefined FieldConversion Boolean2IntFieldConversion . Have a look at the code to see how it works:

There are other helpful standard conversions defined in the package org.apache.ojb.broker.accesslayer.conversions : Of course it is possible to map between java.sql.date and java.util.date by using a Conversion. A very interesting Conversion is the Object2ByteArrFieldConversion it allows to store inlined objects in varchar columns!

Coming back to our example, there is only one thing left to do: we must tell OJB to use the proper FieldConversion for the Article class. This is done in the XML repository file. The field-descriptor allows to define a conversion attribute declaring the fully qualified FieldConversion class:

Как использовать базу данных MySQL в Java

    Переводы, 24 июня 2015 в 13:46

В этой статье мы научимся подключаться к базе данных MySQL из Java-кода и выполнять простые запросы для получения и обновления данных. Для того, чтобы получить доступ к базе данных, мы будем использовать JDBC (Java Database Connectivity) API, который входит в стандартную библиотеку Java. JDBC позволяет подключиться к любой базе данных: Postgres, MySQL, SQL Server, Oracle и т. д. — при наличии соответствующей реализации драйвера, необходимого для подключения. Для базы данных MySQL мы будем использовать драйвер Type 4 JDBC из пакета mysql-connector-java-5.1.23-bin.jar . Он написан на чистой Java, а значит, нам не понадобятся какие-либо нативные библиотеки или ODBC-мост. Все, что нам надо будет сделать — это положить JAR-файл в директорию, содержащуюся в CLASSPATH. JAR-файл содержит класс com.mysql.jdbc.Driver , необходимый для подключения к MySQL. Если его не окажется в CLASSPATH, во время выполнения программы выбросится исключение java.lang.ClassNotFoundException , поэтому убедитесь, что вы правильно настроили пути.

Читать еще:  Как можно восстановить удаленную переписку в одноклассниках

Кстати, если вы ищете хорошую книгу по использованию JDBC, обратите внимание на Practical Database Programming with Java (Ying Bai). Это относительно новая книга, и в ней рассматриваются две самые популярные базы данных: Oracle и SQL Server 2008. В книге используется IDE NetBeans для примеров и описываются все инструменты, необходимые для работы с базами данных в Java. Это отличная книга для начинающих и опытных программистов.

Подключаем базу данных MySQL с помощью JDBC

Для того, чтобы подключить базу данных MySQL, нам потребуется четыре вещи:

  1. Строка подключения JDBC (например: jdbc:mysql://localhost:3306/test ).
  2. Имя пользователя (root).
  3. Пароль (root).
  4. База данных с некоторым количеством таблиц для примера (например, база данных книг).

Строка подключения для MySQL начинается с jdbc:mysql . Это название протокола соединения, за которым следуют хост и порт подключения, на которых запущена база данных. В нашем случае это localhost с портом по умолчанию 3306 (если вы его не поменяли при установке). Следующая часть — test — имя базы данных, которая уже существует в MySQL. Мы можем создать таблицу Books :

и наполнить ее хорошими книгами:

Программа на Java, которая использует базу данных

Теперь давайте напишем программу на Java, которая будет подключаться к нашей базе данных, запущенной на localhost . Важно помнить о том, что необходимо закрывать соединение, запросы и результат выполнения после завершения работы с ними. Также важно закрывать их в finally-блоке, со своей try/catch оберткой, поскольку сам метод close() может кинуть исключение, что приведет к утечке ресурсов. За подробной информацией вы можете обратиться к этой статье. Кроме того, вы можете использовать обертку try-with-resource, которая появилась в Java 7. Более того, это стандартный способ работы с ресурсами в Java 1.7.

При первом запуске у вас, возможно, будет ошибка No suitable driver found for jdbc:mysql , если драйвера MySQL нет в CLASSPATH:

Добавим нужный JAR-файл в путь и снова запустим программу. Другая частая ошибка — указать таблицу в строке соединения: jdbc:mysql://localhost:3306/test/book . В этом случае вылетит следущее исключение:

Успешный запуск программы выведет на экран следующее:

Результат верный, поскольку у нас в таблице только две книги: «Effective Java» и «Java Concurrency in Practice».

Кстати, если у вас был драйвер при компиляции, но отсутствует при запуске, вы получите исключение java.lang.ClassNotFoundException: com.mysql.jdbc.Driver . О том, как исправить эту ошибку, вы можете прочитать здесь.

Получаем данные с помощью SELECT-запроса в JDBC

Для получения данных из БД вы можете выполнить SELECT-запрос. В первом примере мы уже его использовали, но получили только количество строк. Теперь мы вернем сами строки. Большая часть программы останется без изменений, за исключением SQL-запроса и кода, возвращающего данные из объекта ResultSet :

Этот код выведет на экран следующее:

Тут есть пара моментов, на которые следует обратить внимание. Метод rs.getInt(1) используется для получения столбца с целочисленным типом, в нашем случае это столбец «id». Индексы в JDBC начинаются с единицы, поэтому rs.getInt(1) вернет значение первого столбца как целое число. В случае, если вы укажете неверный индекс (многие разработчики вызывают rs.getInt(0) для получения первого столбца), выбросится исключение InvalidColumnIndexException . Доступ к столбцам по индексу чреват ошибками, поэтому лучше использовать имя столбца, например, rs.getInt(«id») . Подробнее об этом вы можете прочитать в этой статье. Метод getString() используется для получения строковых значений из базы (например, VARCHAR ). Цикл будет выполняться, пока rs.next() не вернет false . Это значит, что строки закончились. В нашем случае в таблице две строки, поэтому цикл выполнится два раза, выводя информацию о книгах из таблицы на экран.

Добавляем данные с помощью INSERT-запроса в JDBC

Добавление данных мало отличается от их получения: мы просто используем INSERT-запрос вместо SELECT-запроса и метод executeUpdate() вместо executeQuery() . Этот метод используется для запросов INSERT, UPDATE и DELETE, а также для SQL DDL выражений, таких как CREATE, ALTER или DROP. Эти команды не возвращают результата, поэтому мы убираем все упоминания ResultSet ‘а в коде и изменяем запрос соответственно:

После запуска программы вы можете проверить таблицу в СУБД. На этот раз вы увидите три записи в таблице:

Теперь вы умеете подключаться к MySQL из Java-приложения и выполнять SELECT, INSERT, DELETE и UPDATE-запросы так же, как и в MySQL GUI. Для подключения мы используем объект Connection , для чтения результатов запроса — ResultSet . Убедитесь перед подключением, что сервер MySQL запущен и mysql-connector-java-5.1.17-bin.jar находится в CLASSPATH, чтобы избежать ClassNotFoundException .

Когда разберетесь с подключением и простыми запросами, имеет смысл изучить, как использовать подготавливаемые запросы (Prepared Statement) в Java для избежания SQL-инъекции. В боевом коде всегда следует использовать подготавливаемые запросы и связывание переменных.

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector