مستقل بودن از نوع دیتابیس در یک برنامه jdbc

+2 رأی
میانگین بازدید روزانه 0.32484 بازدید

با عرض سلام

در برنامه های شی گرایی که از orm هایی مثل hibernate , jpa استفاده می شه برای عوض کردن دیتابیس مثلا mysql به postgrte دغدغه ای وجود ندارد، چون این مورد را hibernate با استفاده از dialect حل میکند و hql ها را خودش ترجمه می کند.

اما اگر برنامه شی گرا نباشد و از مواردی مثل jdbc استفاده بشه برای مستقل از دیتابیس بودن چه راه حلی یا فریم ورکی رو پیشنهاد می کنید؟

سوال 4 سال قبل در تالار برنامه نویسی توسط java_ (763 امتیاز)
ویرایش 4 سال قبل توسط Saeed Zarinfam

2 جواب

+1 رأی
 
بهترین جواب

به نظر من در اینگونه موارد  رسیدن کامل به استقلال از دیتابیس کار واقعا سختیه و بیشتر خود توسعه دهندگان باید در کد نویسی خیلی چیز هارو رعایت کنند ولی استفاده از کتابخانه های SQL Mapper مثل MyBatis می تونه بهتر مارو به مستقل بودن از دیتابیس برسونه. استفاده از ابزار های ساده ای مثل Spring Framework JDBC هم می تونه کمی کمک کنه ولی در نهایت چون query ها در قالب sql نوشته می شوند و ممکن است به یک دیتابیس خاص وابسته شوند باید توسعه دهندگان تیم استاندارد های مشترک SQL بین تمام پایگاه داده های رابطه ای را یاد بگیرند و سعی کنند query های خاص یک دیتابیس را ننویسند.

جواب 4 سال قبل توسط Saeed Zarinfam (433 امتیاز)
انتخاب شده در 4 سال قبل توسط java_
+1 رأی

امیدوارم که منظور شما رو حاصل کنه:

 

JDBC مخفف Java DataBase Connectivity یک API برای زبان برنامه نویسی جاوا است که نحوه دسترسی کلاینت را به دیتابیس مشخص می کند. یک سری متدها هم برای اجرای کوئیری داره. به زبان دیگر یک کتابخانه برای دسترسی به دیتابیس و مستقل از سامانه مدیریت پایگاه داده (DBMS) است. کدهای پرل هم می توانند بوسیله دستور زیر از JDBC استفاده کنند

DBD::JDBC proxy driver

 

درايور JDBC، براي شناسايي و برقراري ارتباط با بانک اطلاعاتي از JDBC URL استفاده مي کند. ضمناً هر کدام از DataBase هاي موجود در دنيا، يک URLمختص به خود دارند

نحوه اتصال به بانک اطلاعاتي


براي اتصال به بانک اطلاعاتي، در مرحله اول مي بايست نوع درايور مورد نظر خود را تعيين نماييد:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")

سپس با استفاده از متد ()DriverManager.getConnection، يک JDBC URL را فراخواني کنيد.

=Connection conn
DriverManager.getConnection("jdbc:odbc:MyAccess DataSource")

در طي زمان اجراي() GetConnection ،کلاس DriverManager در مورد قبول شناسايي URL ، از درايور سوال کرده و تنها در صورت تاييد، از آن براي ايجاد Connection استفاده خواهد کرد.


شي Satement و ايجاد پرس و جو


براي ايجاد Statement بايد متد GreateStatementرا از کلاس Connection فراخواني نمود:

Satement stmt=con.CreateStatement

هم اکنون پس از ايجاد شدن يک پرس و جو(Query)، از متد() executeQuery در شي Satement، براي گرفتن داده استفاده مي شود.

(ResultSet rs=stmt.execuletQery(SELECT * FROMP TableName

ضمناً Statement داري متد ديگري به نام() Update excuteاست که براي اجراي عمليات خاصي مانند Delete،Updat،Insertروي بانک اطلاعاتي مورد استفاده قرار مي گيرد.

 

مثالJDBC


در اين بخش نشان خواهيم داد که چگونه مي توان از طريق JDBC-ODBC به بانک اطلاعاتي متصل شده و يک در خواست پرس و جو (Quesry) را اجرا و نتايج آن را نمايش داد. توجه داشته باشيد که به هنگام استفاده از ODBC، ابتدا بايد يکDSN تعريف نمود که اين کار در سيستم عامل Unix از طريق فايل پيکربندي ODBC.initو در ويندوز از طريق مسير زير قابل دسترس است.


ControlPanel\Administrative\DataSource


براي تعريف DSN جديد، از تب System DSN روي دکمه ADD کليک کرده و سپس در ليست System DataSource ، درايور بانک اطلاعاتي مورد نظر (که مي خواهيد با آن ارتباط برقرار کنيد) را انتخاب نماييد. سپس در قسمت Data Source Name، يک نام دلخواه براي DSN تعيين کرده و با کليک دکمه Select، مسير فايل بانک اطلاعاتي را مشخص کنيد. در نهايت بر روي دکمه OKکليک کرده و پس از انتخاب نام DSNساخته شده در پنجره ODBC ، پنجره را تاييد نماييد.
قطعه کد زير به زبان برنامه نويسي جاوا و بانک اطلاعاتي Access (که داراي جدولي به نام Employeeو سه فيلدPositionوName و Empnoاست) تهيه گرديده که از طريق واسط ODBC-JDBC به بانک مورد نظر متصل شده و يک در خواست پرس و جو را اجرا و نتايج آن را نمايش مي دهد.

importjava.sql.DriverManager
importjava.sql.Connection
importjava.sql.Statment
importjava.sql.SQLException
importjava.sql.SQLException
public class QueryExample {
final Static String driverClass="sun.jdbc.odbc.JdbcOdbcDriver:
final Static String connectionURL=
"jdbc.odbc:MyAccessDataSourse:
Connection con =null
public QueryExample() {
try {
System.out.print("Loading JDBC Drirer->"+driverClass+"\n")
Class.forName(driverlass).newInstance()
System.out.print("Connection to ->"؛(connectionURL+"\n")
this.con=DriverManager,getConnection(connectionURl,userID userPassword)
System.out.print("Connected as ->"+ userID +"\n")} catch (ChassNotFoundException e) {e.printStackTrace()}
catch)]InstantiationExecption(}
catch (SQLExecption e) {؛.printStackTrace()}
public void performQuery() {Statment Stmt = null,
ResultSet = null,
String queryString= "SELECT Empno, Name, Position FROM Employee", try {
System.out.print("Creating Statement...\n")
stmt = con.createStatement ()
System.out.print(" Opening ResultsSet...\n")
rest = stmt.executeQuery(queryString)
int counter = 0
while (rest.next()) {
System.out.println()
System.out.println(" Row [" +++counter + "]")
System.out.println("----------------")
System.out.println(" Name -> " + rest.getString(1))
System.out.println(" Position -> " + rest.getString(2))
System.out.println(" Empno -> " + rest.getfloat(3))
}
System.out.println()
System.out.print("Closing ResultSet...\n")
erst.chose()
System.out.print("Closing Statement...\n")
stmt.close()
} catch (SQLEception e) {
e.printStackTrace()
}
}
public void closeConnection() {
try {
System.out.print("Closing Connection...\n")
con.close()
} catch (SQLException e) {
e.printStackTrace()
}
}
public static void main(String[] args)
throws gava.lang.InterruptedException {
QueryExample qe = new QueryExample()
qe.performQuery()
qe.closeConnection()
}
}

ناگفته نماند که قطعه برنامه فوق را مي توان در يک محيط IDE جاوا وارد کرده و مورد استفاده قرار داد.

منبع

جواب 4 سال قبل توسط saeedd (2,147 امتیاز)
ویرایش 4 سال قبل توسط Saeed Zarinfam
این لینک رو مطالعه کنید ان شاءالله که مفید واقع بشه:

http://alimajidi.ir/1392/10/123#more-123
خیلی ممنون
همان طور که در متن صفحه معرفی شده آمده در تغییر دیتابیس ها ممکن است سینتکس کوری ها مشکل ایجاد کنه دنبال رفع این مورد هستم.
مرسی

سوال های مشابه

+1 رأی
1 جواب میانگین بازدید روزانه 0.09192 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.721,466 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.09201 بازدید
سوال 5 سال قبل در تالار برنامه نویسی توسط Saeed Zarinfam (433 امتیاز)
+1 رأی
1 جواب میانگین بازدید روزانه 0.31714 بازدید
سوال 6 سال قبل در تالار برنامه نویسی توسط Milad (1,298 امتیاز)
0 رأی
1 جواب میانگین بازدید روزانه 0.38914 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.82841 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.2632 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.0598 بازدید
کانال تلگرام جواب یاب
...