+2 امتیاز
قبل در برنامه نویسی توسط (778 امتیاز)
ویرایش شده قبل توسط

با عرض سلام

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

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

2 پاسخ

+1 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

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

+1 امتیاز
قبل توسط (2.2هزار امتیاز)
ویرایش شده قبل توسط

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

 

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 جاوا وارد کرده و مورد استفاده قرار داد.

منبع

قبل توسط (2.2هزار امتیاز)
این لینک رو مطالعه کنید ان شاءالله که مفید واقع بشه:

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

سوالات مشابه

+1 امتیاز
1 پاسخ 537 بازدید
0 امتیاز
1 پاسخ 2.4هزار بازدید
0 امتیاز
0 پاسخ 420 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
1 پاسخ 1.3هزار بازدید
سوال شده 11 سال قبل در برنامه نویسی توسط Milad (1.3هزار امتیاز)
0 امتیاز
1 پاسخ 1.4هزار بازدید
0 امتیاز
1 پاسخ 496 بازدید
...