JDBC гэж юу бэ?
- JDBC - Java Database Connectivity
- Java хэдийгээр маш сайн стандарчлагдсан боловч SQL хэлний хувьд маш олон янз байдаг
- JDBC нь Java-аас SQL
өгөгдлийн баазууд руу хандах гол арга хэрэгсэл
- JDBC нь Java программууд хэрэглэхэд зориулагдсан стандарт API
- JDBC нь гуравдагч компаниуд тодорхой нэг SQL хувилбар луу хандахад
зориулагдсан драйвер бичихэд хэрэглэддэг загвар
Драйверын төрлүүд
- JDBC Type 1 Driver -- JDBC/ODBC Гүүр драйверууд
- ODBC (Open DataBase Connectivity) нь програмчлалын хэлнээс үл хамааралтай
стандарт API
- JDBC Type 2 Driver – тодорхой платформын API ашиглан өгөгдөл рүү хандах. Intersolv Oracle Driver, WebLogic г.м.
- JDBC Type 3 Driver -- 100% Java, тусдаа DB хост дээрх программ дуудна. Олон
бааз руу нэг драйвераар хандах боломж олгоно. Symantec DBAnywhere г.м.
- JDBC Type 4 Driver -- 100% Java
- Хамгийн үр дүнтэй хэлбэр нь
- Сул тал нь бааз болгоны хувьд тусдаа драйвертай
- Oracle, MySQL г.м.
Connector/J
- Connector/J нь JDBC Type 4 Driver бөгөөд Java-аас MySQL рүү хандахад
хэрэглэнэ
- Суулгах процесс нь энгийн:
- http://www.mysql.com – оос сүүлийн тогтвортой хувилбарыг нь
татаж авна
- Үүнийгээ задлана
- JAR файлыг нь Java олохоор байрлуулна
- JAR файлыг нь CLASSPATH руу нэмж болно
- Eclipse дээр: Project -->
Properties --> Java Build Path --> Libraries --> Add External
Jars... гэж нэмнэ
Холболт хийх
Connection con =
DriverManager.getConnection(url, “myLogin", "myPassword");
URL нь ямар байх ёстой бэ?
Холболт хийх: Жишээ URL-ууд
- Oracle:jdbc:oracle:thin:@machine:1521:database
- DB2:jdbc:db2://machine:6789/sample
- MS SQL
Server: jdbc:microsoft:sqlserver:
//machine:1433;DatabaseName=database;
selectMethod=cursor
- Pointbase: jdbc:pointbase:embedded:sample
Сервер лүү холбогдох
- MySQL сервер ажиллаж байгааг нягтал
- Кодын хувьд,
- import java.sql.Connection;
// not com.mysql.jdbc.Connection
import java.sql.DriverManager;
import java.sql.SQLException; - JDBC драйверыг бүртгүүлнэ,
Class.forName("com.mysql.jdbc.Driver").newInstance(); - getConnection() дүрмийг
дууд,
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3333/myDB", myUserName, myPassword); - эсвэл getConnection("jdbc:mysql:///myDB?user=dave&password=xxx")
Сервер лүү холбогдох
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class
JdbcExample1 {
public static void
main(String args[]) {
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql:///test", "root", ”rootpswd");
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql:///test", "root", ”rootpswd");
if (!con.isClosed())
System.out.println("Successfully connected to MySQL server...");
System.out.println("Successfully connected to MySQL server...");
} catch(Exception e) {
System.err.println("Exception: " + e.getMessage());
} finally {
try {
if (con != null)
con.close();
} catch(SQLException e) {}
}
}
System.err.println("Exception: " + e.getMessage());
} finally {
try {
if (con != null)
con.close();
} catch(SQLException e) {}
}
}
}
Connection обьектыг хэрэглэх
- public Statement createStatement()
throws SQLException - SQL илэрхийллийг өгөгдлийн бааз руу илгээхэд зориулж Statement обьект үүсгэнэ.
Параметр байхгүй SQL
илэрхийллүүд нь ерөнхийдөө Statement обьектыг ашиглан биелэгддэг.
- Statement обьект нь олон
илэрхийлэлд ашиглагдаж болно
- public PreparedStatement prepareStatement(String sql)
throws SQLException - Параметртай SQL илэрхийллийг илгээхийн тулд PreparedStatement обьектыг үүсгэнэ.
- Параметртай болон параметргүй SQL илэрхийллүүд нь PreparedStatement обьектод урьдчилан биелэж хадгалагдаж болно. Энэ обьект нь
тухайн илэрхийллийг олон удаа үр ашигтайгаар хэрэгжүүлэхэд хэрэглэгдэнэ.
Query ажиллуулах
- Statement обьектод нь дараах
дүрмүүд байдаг:
- int executeUpdate() – баазыг өөрчлөөд
мөрөн утга буцаадаггүй илэрхийлэл ажиллуулахад
- Үүнд: DROP TABLE, CREATE TABLE, INSERT
- Үр дүн хэрэгжсэн хүснэгт дэх мөрийн тоог буцаана
- ResultSet executeQuery() – Мөрийн утга буцаадаг илэрхийллүүдэд
- Буцаах утга нь ResultSet обьект байна
Хүснэгт үүсгэх
CREATE TABLE animal (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
name CHAR(40),
category CHAR(40)
)
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
name CHAR(40),
category CHAR(40)
)
Statement s =
conn.createStatement ();
s.executeUpdate
("DROP TABLE IF EXISTS animal");
s.executeUpdate
(
"CREATE TABLE animal ("
+ "id INT UNSIGNED NOT NULL AUTO_INCREMENT,"
+ "PRIMARY KEY (id),“
+ "name CHAR(40), category CHAR(40))");
"CREATE TABLE animal ("
+ "id INT UNSIGNED NOT NULL AUTO_INCREMENT,"
+ "PRIMARY KEY (id),“
+ "name CHAR(40), category CHAR(40))");
Хүснэгтэд утга оруулах
int count;
count =
s.executeUpdate (
"INSERT INTO animal (name, category)"
+ " VALUES"
+ "('snake', 'reptile'),"
+ "('frog', 'amphibian'),"
+ "('tuna', 'fish'),"
+ "('racoon', 'mammal')");
"INSERT INTO animal (name, category)"
+ " VALUES"
+ "('snake', 'reptile'),"
+ "('frog', 'amphibian'),"
+ "('tuna', 'fish'),"
+ "('racoon', 'mammal')");
s.close ();
System.out.println
(count + " rows were inserted");
ResultSet
- executeQuery() нь ResultSet буцаана
- ResultSet нь маш олон янзын getXXX дүрмүүдтэй, жишээ
нь
- public String getString(String columnName)
- public String getString(int columnIndex)
- Үр дүнгүүд нь тухайн очсон байгаа мөрнөөс авагдана
- Мөрүүдийг гүйлгэхдээ:
- public boolean next()
- Statement, ResultSet обьектууд нь
хэрэглэгдэж дуусаад хаагдах ёстой
- public void close()
Жишээ
Statement s =
conn.createStatement ();
s.executeQuery
("SELECT id, name, category FROM animal");
ResultSet rs =
s.getResultSet ();
int count = 0;
while (rs.next ()) {
int idVal = rs.getInt ("id");
String nameVal = rs.getString ("name");
String catVal = rs.getString ("category");
System.out.println (
"id = " + idVal
String nameVal = rs.getString ("name");
String catVal = rs.getString ("category");
System.out.println (
"id = " + idVal
+ ", name = " + nameVal
+ ", category = " + catVal);
++count;
+ ", category = " + catVal);
++count;
}
rs.close ();
s.close ();
System.out.println
(count + " rows were retrieved");
Бэлтгэгдсэн илэрхийллүүд
Бэлтгэгдсэн илэрхийллүүд нь урьдчилан бэлтгэгдсэн
байдаг тул хэрэглэхэд илүү үр дүнтэй
PreparedStatement s;
s =
conn.prepareStatement (
"INSERT INTO animal (name, category VALUES(?,?)");
"INSERT INTO animal (name, category VALUES(?,?)");
s.setString (1,
nameVal);
s.setString (2,
catVal);
int count =
s.executeUpdate ();
s.close ();
System.out.println(count
+ " rows were inserted");
Алдааг барих
try {
Statement s = conn.createStatement ();
s.executeQuery ("XYZ");
s.executeQuery ("XYZ");
// issue
invalid query
s.close ();
s.close ();
}
catch (SQLException e)
{
System.err.println ("Error message: “ + e.getMessage ());
System.err.println ("Error message: “ + e.getMessage ());
System.err.println ("Error number: “ + e.getErrorCode ());
}
1 comments:
tanks (h)
Post a Comment