PDA

View Full Version : Xin hỏi về JDBC và SQL Server



ILoveJava
15-04-2003, 20:53
Mình đang gặp một vấn đề rắc rối với JDBC và SQL Server:
Chương trình của mình cho phép người dùng nhập liệu thông tin. Trong đó có các trường nhập liệu liên quan tới ngày tháng năm.
Mình tạo kiểu của dữ liệu trong cơ sở dữ liệu SQL Server 2K là datetime (ví dụ như trong trường ngày sinh chẳng hạn). Khi người dùng nhập vào thì đó là kiểu String truyền đến server thì mình muốn chuyển nó thành kiểu Date để insert vào cơ sở dữ liệu. Nhưng mình dùng Date date=new Date(String date_argument);
thì Java bảo là kiểu này hiện đã bị Depricate và khuyên mình dùng Calender hoặc dùng phương thức parse(String) của DateFormat để chuyển về kiểu Date. Mình ví dụ là xâu mình nhập vào có dạng là 30/04/2003 chẳng hạn nhưng khi mình dùng DateFormat để chuyển thì nó báo lỗi. Vậy các bạn giúp mình giải quyết vấn đề này với và giả thử khi ta đã có kiểu Date rồi thì câu lệnh INsert hoặc Update vào SQL Server có điểm đặc biệt gì không hay là giống với kiểu số và kiểu String.
Mong các bạn giúp đỡ. Mình đang làm project sắp bị lụt đến nơi rồi.

tiger2003
16-04-2003, 07:29
Bạn thử dùng cái này xem thế nào :

java.sql.Date.valueOf(dateVariable), sẽ trả về kiểu Date nhưng lại định dạng là yyyy-MM-dd
- Hoặc bạn có thể truyền kiểu string vào thủ tục hay hàm ở trong SQL Server sau đó dùng làm Convert để đổi ra kiểu ngày, có định dạng. Ví dụ Convert (string_date, datetime, 'dd/mm/yyyy') v...

- Nếu bạn muốn tìm hiểu thêm cụ thể có thể vào đây để search
http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&group=comp.lang.java.programmer
ví dụ là ; Convert string to date thì chắc chắn bạn sẽ tìm ra được

Chúc vui vẻ ha

nguyenthu
16-04-2003, 15:49
Chào bạn,
Trước đây mình cũng mệt với format Datetime : mỗi CSDL, mỗi ngôn-ngữ lập trình có thể có format ngày, giờ khác nhau, nên thận trọng.
Các câu lệnh SQL chuẩn đều dùng format ngày là 'yyyy-mm-dd' bạn chú ý nằm giữa hai dấu nháy ' ...' vì đó là cách viết string trong SQL. Dù khi nhập vào, bạn nhập kiểu gì chăng nữa thí dụ là '30-4-2003' hay '30-4-03'... bạn phải đổi lại format trên của SQL thì câu lệnh SQL mới chạy. Format dùng riêng cho Access hay SQL Server 2k có thể chạy dưới software của Access hay SQL Server 2k, nhưng khi bạn dùng ODBC, thực thi một câu lệnh SQL chuẩn, thì phải dùng format của SQL chuẩn.
Còn format datetime, bạn phải xem lại Help, vì mỗi CSDL có thể chỉ chấp nhận một format riêng, cái này SQL chuẩn cũng không có nói rõ.
Thí-dụ :
'yyyy-mm-dd hh:mm:ss' cho MySQL
'yyyy-mm-dd-hh:mm:ss:nnnnnn' cho DB2 (nnnnnn = số 1/triệu giây)
Để nhập vào type datetime, dĩ nhiên bạn chỉ nhập ngày, tháng, năm, giờ, phút là cùng, phần giây phải bỏ qua, cho nó = 0 (default). Thông thường, nên tránh dùng datetime như từ khoá (primary key) vì nó chạy rất chậm (26 bytes/data), và một khi xoá nó rồi thì khó xài lại (vì phải nhập lại cho đúng đến giây...). Và thông thường người ta hay dùng nó trong Update để so sánh thời điểm lúc làm Select với lúc làm update, nếu khác nhau là dữ liệu đã có người khác cập nhật trước rồi (trong trương hợp này, datetime là thời điểm Insert của record, hay thời điểm update record).
Chắc bạn có biết qua các transaction : đó là trường hợp phải update nhiều thứ một lượt, nếu OK thì update một lượt, nếu không thì Rollback (trở lại) hết. Khi xài transaction, phải có datetime để bảo đảm là dữ liệu được sửa đổi một cách có mạch-lạc.
Thân

lahai
14-05-2003, 11:18
mình mới tìm hiểu về JDBC. có phần kết nối đến CSDL và tải driver thì không hiểu mấy.

Giả sử tôi có 1 CSDL viết bằng Access, tôi muốn truy vấn DL này thì tải driver và truy cập đến CSDL này ra sao ? (tôi đang cài MySQL).
Cám ơn nhiều !

tiger2003
14-05-2003, 11:36
Download Driver về rui bạn copy vào thư mục , và sau đó phải add vào trong CLASS_PATH nữa (cái này tuỳ thuộc vào từng loại server, chắc bạn biết rồi chứ). Đã có driver rùi thì mọi thử sẽ trở lên đơn giản ví dụ
//Load Driver
Class.forName(your driver here) ;

//Create a connection to your database :
Connection con = DriverManager.createConnection (url) ;
ulr - là chỉ ra : Địa chỉ server, Database Name, port, username, password
Việc xem format của URL ra sao nên tham khảo thêm khi download cái Driver đó về, chắc sẽ có hướng dẫn chi tiết.

//Create statement
Statement stmt = con.createStatement (sql);
sql -- là câu lệnh sql của bạn ví dụ select * from MyTable

//Execute statement
ResultSet rs = stmt.executeQuery();

//Read Data From ResultSet
while (rs.next()) {

string variable =rs.getString, getInt, getDouble, getObject ...(tencột hoặc index) ;
}
chú ý là index bắt đầu từ 1 chứ không phải là 0.

Vậy thui, đơn giản quá phải không

Chúc các bác vui vẻ ha