Java Connect to SQL Server Database (JDBC) |
Java Connect to SQL Server Database (JDBC) บทความนี้จะเป็นเนื้อหาเกี่ยวกับการเขียนโปรแกรมด้วยภาษา Java เพื่อติดต่อกับฐานข้อมูลของ SQL Server Database การเรียกใช้งาน รูปแบบการเชื่อมต่อ วิธีการต่าง ๆ ว่าถ้าจะใช้ SQL Server Database บนภาษา Java นั้นเราจะต้องทำอย่างไรบ้าง ซึ่งปกติแล้วในภาษา Java จะมี Connector Package หรือ Class Library ที่ใช้ติดต่อกับ Database ที่มีชื่อว่า JdbcOdbcDriver (sun.jdbc.odbc.JdbcOdbcDriver) รองรับทุก Database โดย Class นี้จะมีมากับ Package ของ JDK โดยไม่ต้องไปหามาติดตั้งเพิ่ม แต่จะรองรับการทำงานบน Windows ในรูปแบบของ ODBC เท่านั้น เพียงแต่ใน Windows จะต้องมี Driver ของ Database นั้น ๆ มารองรับก็สามารถที่จะเรียกใช้งานได้ทันที
Java and JDBC/ODBC/JdbcOdbcDriver (รองรับทุก Database เชื่อมต่อผ่าน ODBC)
แต่เราจะเลือกใช้ com.microsoft.sqlserver.jdbc.SQLServerDriver เป็น Connector Package ที่สร้างเพื่อ SQL Server Database โดยเฉพาะ และรองรับการทำงานได้ทุก Platform
Java and SQL Server Database
ในการใช้ Java ติดต่อกับฐานข้อมูลของ SQL Server สามารถใช้ JdbcOdbcDriver ซึ่งจะมี Package มาพร้อมกับ JDK ได้ทันที แต่ในบทความนี้ จะเลือกใช้ Package ของ com.microsoft.sqlserver.jdbc.SQLServerDriver ซึ่งเป็น Connector Package ที่ได้ถูกออกแบบมาไว้สำหรับฐานข้อมูลของ SQL Server โดยเฉพาะ สามารถ Download ได้ที่เว็บไซต์ของ Microsoft ได้โดยตรง และรองรับการทำงานได้ทุก Platform เช่น Windows , Linux , Mac OS
Error กรณีไม่มี Package Connector ของ SQL Server
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.java.myapp.MyClass.main(MyClass.java:14)
Exception in thread "main" java.lang.NullPointerException
at com.java.myapp.MyClass.main(MyClass.java:29)
Microsoft JDBC Driver for SQL Server
เลือก Version :: Download the Microsoft JDBC Driver 4.0 for SQL Server
เลือก Download
เอาเฉพาะที่เป็นไฟล์ .tar.gz
หลังจากที่ Download แล้วจะได้เป็น Package เป็นไฟล์ jar และจะต้องนำไป Import ในโปรแกรม Eclipse หรือ Netbeans ซะก่อน
Copy มาไว้ที่โฟเดอร์ lib ของ Project เอาเฉพาะไฟล์ sqljdbc4.jar
กลับมาที่ Project บน Eclipse ให้ทำการ Refresh ตัว Project ซะ 1 ครั้ง เราจะเห็น Library ของ jar ที่เป็น Connector ของ SQL Server Database ดังรูป
ให้คลิกวาที่ Project เลือก Properties
ในส่วนของ Java Build Path ให้เลือก Add JARs...
เลือก Package ไฟล์ jar ที่เป็น Connector ของ SQL Server
Library ได้ถูก Add เข้ามาใน Project แล้ว ซึ่งตอนนี้เราจะสามารถเรียกใช้งานได้ตามปกติ
เพิ่มเติม ถ้าในกรณีรันแล้ว Error ลองปรับแต่งตัวนี้
com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
at com.microsoft.sqlserver.jdbc.SQLServerException. ConvertConnectExceptionToSQLServerException(SQLServerException.java:241)
at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2243)
at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:491)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1309)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.java.myapp.MyClass.main(MyClass.java:15)
Exception in thread "main" java.lang.NullPointerException
at com.java.myapp.MyClass.main(MyClass.java:29)
เลือก SQL Server Configuration Manager
เลือกตัว Instance ที่เราใช้ -> TCP/IP - > Enable
จากนั้นก็ Restart ตัว SQL Server Service ซะ 1 รอบ
เริ่มต้นการเขียน Java กับ SQL Server Database
เริ่มต้นด้วยเรียกใช้ Class ของ com.microsoft.sqlserver.jdbc.SQLServerDriver
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection String
jdbc:sqlserver://host\\instance;databaseName=mydatabase;user=user;password=password"
ตัวอย่าง Table และ Data
CREATE TABLE [dbo].[customer](
[CustomerID] [varchar](4) NOT NULL,
[Name] [varchar](50) NULL,
[Email] [varchar](50) NULL,
[CountryCode] [varchar](2) NULL,
[Budget] [float] NULL,
[Used] [float] NULL,
CONSTRAINT [PK_customer] PRIMARY KEY CLUSTERED
(
[CustomerID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
INSERT INTO customer VALUES ('C001', 'Win Weerachai', '[email protected]', 'TH', 1000000, 600000);
INSERT INTO customer VALUES ('C002', 'John Smith', '[email protected]', 'UK', 2000000, 800000);
INSERT INTO customer VALUES ('C003', 'Jame Born', '[email protected]', 'US', 3000000, 600000);
INSERT INTO customer VALUES ('C004', 'Chalee Angel', '[email protected]', 'US', 4000000, 100000);
ตัวอย่าง Database ที่ใช้ทดสอบ
ชื่อตารางว่า customer จัดเก็บข้อมูลดังรูป
Example การเขียน Java เพื่อติดต่อกับ Database ของ SQL Server
MyClass.java
package com.java.myapp;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MyClass {
public static void main(String[] args) {
Connection connect = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
connect = DriverManager.getConnection("" +
"jdbc:sqlserver://localhost\\SQL2008;databaseName=mydatabase;user=sa;password=");
if(connect != null){
System.out.println("Database Connected.");
} else {
System.out.println("Database Connect Failed.");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
connect.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Output
Database Connected.
สำหรับการเขียน Java เพื่อกระทำกับข้อมูลของ SQL Server เช่น การ อ่านข้อมูล (Read) การบันทึกข้อมูล (Add/Insert) การแก้ไขข้อมูล (Edit/Update) การลบข้อมูล (Delete) สามารถอ่านได้จากหัวข้อถัดไป
|