الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تنبيه ] طريقه التعامل مع javaDb من خلال NetBeans فيديو

بدأه javaeg في 15 أغسطس 2010 · 22 رد · 2,258 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

دي شرح فيديوا لطريقه التعامل مع قاعده بيانات javadb الموجوده مع NetBeans

http://www.4shared.com/file/Z56rxx3W/derby.html

تم تعديل هذه المشاركة بواسطة javaeg في 15 أغسطس 2010 في 16:07

1

SCJP

SCBCD Soon

#2

السلام عليكم

جزاكم الله خيرا على الشرح

لكن لدى سوال

ليه اثناء التشغيل اعترض على

DriverManager.deregisterDriver(new Driver30());

ويعنى ايه Driver30 , Driver20 , Driver40

ايه الفرق بينهم

وليه استخدمت هذه الطريقه فى تحميل الـ Driver

مش ممكن اعمل تحميل للـ Driver بالطريقه دى ؟

Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

مش قصدى ليه بالتحديد الطريقه

انا اقصد هل يوجد مثل هذه الطريقه مثلا ف mySQL

ام هذه طريقه خاصه بالـ Derby

طريقه انى اكتب

DriverManager.deregisterDriver(new AutoloadedDriver());

لم حضرتك استخدم هذه الجمله فى اضافه بيانات فى قاعده البيانات استخدمت هذا الامر

statement.execute("insert into users values ('mahmoud' , '1111')");

لماذا لا تستخدم هذا الامر مع انه فى الوصف الخاص بالـdocumentation هنلاقى ان الـ executeeUpdate

مسئولة عن

اقتباس
Executes the given SQL statement, which may be an

INSERT, UPDATE, or DELETE statement or an

SQL statement that returns nothing, such as an SQL DDL statement

ممكن الاطلاع عليها من الرابط التالى http://download-llnw.oracle.com/javase/1.4.2/docs/api/java/sql/Statement.html

يعنى استخدمها كدا

statement.executeUpdate("insert into users values ('mahmoud' , '1111')");

وهذا تطبيقى على ما تم شرحه فى الفيديو

Derby Test.rar

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 15 أغسطس 2010 في 18:20

Software Developer
Mahmoudkelany.com


 

#3

السلام عليكم ورحمه الله وبركاته

انا مبسوط من تفاعلك اخي محمود مع الموضوع ومن ملاحظاتك الجيده

في البدايه انا مستخدمتش deregisterDriver انا استخدمت registerDriver

DriverManager.registerDriver(new Driver30());

الاثنين عكس بعض تماما ووجودهم هيه ميزه بدل مستخدم

Class.forName("");

الاثنين ممكن استخدمهم مع اي قاعده بيانات سواء MySQl او JavaDb

Class.forName

دي التقليديه الي الكل عارفها بتساعدني اني احمل الدرايفر واتعامل معاها او بمعني تاني اعمله register

طب هل ممكن اعمل عمليه عكسيه اني خلاص مش محتاج الدرايفر ده ممكن اعمله deregister مع Class.forName مينفعش انما باستخدك deregisterDriver Method من DriverManager وبستخدم registerDriver علشان احمل الدرايفر

الاختلاف كمان ان Class.forName بتاخد String لو لحظت دي مسار الدرايفر بتاعك ممكن متكونش حافظ اسم الدرايفر زي مثلا org.apache.derby.jdbc.EmbeddedDriver او org.apache.derby.jdbc.ClientDriver او الدرايفر بتاع mysql

او اوراكل

فانا بفضل انس استخدم DriverManager للميزه دي انا بعض مبضيف pakages الي هستخدمها علشان اتصل بقاعده البيانات هنشاء Object نوع الدرايفر وابعته لregisterDriver ودي مش خاصه بقاعده بيانات محدده

والداله دي بتاخد حاجه من نوع Driver وبنبعتلها Implementation الخاص vendor

علشان كده كان قدامي كذا نوع من الدرايفر اول مضغط CTRL+SPACE وظهر لي ShutdownException لاني استخدمت نوع غير مناسب org.apache.derby.jdbc.Driver20وorg.apache.derby.jdbc.Driver30وorg.apache.derby.jdbc.Driver40

دلو لهم استخدامت اخري في انهم مش انا الي بستخدمهم دول بيستخدموا من قبل EmbeddedDriver

علشان يتاكدوا من اصدار JDBC

انا كنت عاوز افرق بين نوعين او طريقتين من التعامل مع Derbyكل طريقه لها درايفر مختلف هزكرها في رد تاني

حضرتك بتقول اني استخدمت

statement.execute("insert into users values ('mahmoud' , '1111')");

مستخدمتش الموصوف ليه في الدكيمنتاشن

statement.executeUpdate("insert into users values ('mahmoud' , '1111')");

هوه في جميع الاحوال مش هيظهر ليه باذن الله خطا هوه كلامك صح الدكيومنتاشن بيقول كده

بس بردك داخل الدكيمنتاشن هتلاقي ان execute بتستخدم علشان اطبق اي نوع من انواع SQL

execute(String sql)
          Executes the given SQL statement, which may return multiple results.

طيب وexecute بترجع ايه

Returns:
    true if the first result is a ResultSet object; false if it is an update count or there are no results

يعني ممكن استخدمها مفهاش مشكله

وعلي فكره بردك بص كده في الدكيمنتاشن في استخدام executeupdate

DDL

executeUpdate(String sql)
          Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.

يعني مش هتفرق انا عارف ان الي بترجع رقم يقولي جمله الاستعلام دي سمعت او اثرت في كام Row بس هل فيه حد بيستخدمه الرقم الي راجع ده في حاجه في الغالب لاء بالزات في جمل insert لاني هكون عارف كام قيمه انا دخلتها

SCJP

SCBCD Soon

#4

يمكن استخدام javadb بطريقتان كل طريقه لها الدرايفر الخاص بها

1.	Embedded Server Edition
the Derby engine does not run in a separate process, and there are no separate database processes to start up and shut down. Instead, the Derby database engine runs inside the same Java Virtual Machine (JVM) as the application.

embedded.png

بمعني ان الداتا بيس علي نفس الجهاز ولان الديربي مصنوعه من الجافا في هترن علي نفس الماشين

وده الدرايفر بتاعنا

driver = "org.apache.derby.jdbc.EmbeddedDriver";

2.	Network Server Edition
An application can also access a Derby database using the more familiar client/server mode. This is achieved via a framework that embeds Derby and handles database requests from applications, including applications running in different JVMs on the same machine or on remote machines. The Derby Network Server is such a framework. It embeds Derby and manages requests from network clients.

network_server.png

وده الدرايفر التاني لها

driver = "org.apache.derby.jdbc.ClientDriver";

دلوقتي انا في المثال استخدمت AutoloadedDriver

وفيها Database Engine بيتم تحميله لحظه مباخد الكونكشن مش من لحظه عمل registration له من خلال DriveManager

SCJP

SCBCD Soon

#5
اقتباس
الاثنين ممكن استخدمهم مع اي قاعده بيانات سواء MySQl او JavaDb

Class.forName

دي التقليديه الي الكل عارفها بتساعدني اني احمل الدرايفر واتعامل معاها او بمعني تاني اعمله register

طب هل ممكن اعمل عمليه عكسيه اني خلاص مش محتاج الدرايفر ده ممكن اعمله deregister مع Class.forName مينفعش انما باستخدك deregisterDriver Method من DriverManager وبستخدم registerDriver علشان احمل الدرايفر

الاختلاف كمان ان Class.forName بتاخد String لو لحظت دي مسار الدرايفر بتاعك ممكن متكونش حافظ اسم الدرايفر زي مثلا org.apache.derby.jdbc.EmbeddedDriver او org.apache.derby.jdbc.ClientDriver او الدرايفر بتاع mysql

او اوراكل

فانا بفضل انس استخدم DriverManager للميزه دي انا بعض مبضيف pakages الي هستخدمها علشان اتصل بقاعده البيانات هنشاء Object نوع الدرايفر وابعته لregisterDriver ودي مش خاصه بقاعده بيانات محدده

ما فهمته أنك تفضل إستخطام DriverManager.registerDriver فوق Class.forName للأسباب الأتيه:

1- في حالة registerDriver أنت تستخدم full class name بدلا من string

2- في حالة registerDriver بإمكانك علم deregisterDriver ..

حسنا, بالنسبة للرقم 1 فهي ميزه لل Class.forName ..... فبإمكانك ترجمة البرنامج دون الحاجه لوجود ال JDBC class إلا فقط عند ال runtime و هي طبعا ميزه و ليست عيب.

بالنسبة للنقطة الثانيه, تقول أنت تستخدم register لكي تستطيع عمل deregister .... مامصدر هذه المعلومه؟

#6

*- يحظر استخدام اللهجة العامية

*- أو كتابة الأسئلة باللغة الإنجليزية

*- أو كتابة الكلمات الإنجليزية بالعربية

====

#7
هويدي كتب:

ما فهمته أنك تفضل إستخطام DriverManager.registerDriver فوق Class.forName للأسباب الأتيه:

1- في حالة registerDriver أنت تستخدم full class name بدلا من string

2- في حالة registerDriver بإمكانك علم deregisterDriver ..

حسنا, بالنسبة للرقم 1 فهي ميزه لل Class.forName ..... فبإمكانك ترجمة البرنامج دون الحاجه لوجود ال JDBC class إلا فقط عند ال runtime و هي طبعا ميزه و ليست عيب.

بالنسبة للنقطة الثانيه, تقول أنت تستخدم register لكي تستطيع عمل deregister .... مامصدر هذه المعلومه؟

السلام عليكم

اولا كوني اني اذكر ميزات طريقه مش معني كده ان بقول الطريقه التانيه فيها مشكله

انا عارف ان Class.forName ميزتها في dynamic class loading

بس فرضا انت كتبت اسم Driver خطا lمش هتعرف غير في Runtime

انما registerDriver بتاخد Object من نوع Driver لو كان Driver مش موجود هشوف error at compiler time

بالنسبه للنقطه التانيه ممكن تتطلع علي Documentation دي مصدر معلوماتي

deregisterDriver:Removes a driver from the {@code DriverManager}'s registered driver list. This will only succeed when the caller's class loader loaded the driver that is to be removed. If the driver was loaded by a different class loader, the removal of the driver fails silently.

If the removal succeeds, the {@code DriverManager} will not use this driver in the future when asked to get a {@code Connection}.

SCJP

SCBCD Soon

#8

أولا, أريد أن أشكرك لرد... جزاك الله خيرا..

بالنسبة للسؤال الأول.... في رأي الشخصي,,, لايوجد شئ إسمه أن أكتب إسم ال Driver خطأ... :D

بالنسبة للسؤال الثاني:

جزاك الله خيرا على المعلومه القيمه, لكن... هل وضعت الرابط لهذه المعلومه, لأني نظرت هنا فلم أجد هذه المعلومه, فهل نظرتُ في المكان الخطآ؟

نأتى للمعلومه نفسها..

اقتباس
This will only succeed when the caller's class loader loaded the driver that is to be removed. If the driver was loaded by a different class loader, the removal of the driver fails silently.

فهذا ينطبق على Class.forName و DriverManager.registerDriver ... وليس ل registerDriver فقط.. أليس كذلك...

وهذا منطقي يا أخي, لماذا؟ تعال لنلق نظره على الكود الخاص ب DriverManager :

private static synchronized Connection getConnection(
	String url, java.util.Properties info, ClassLoader callerCL) throws SQLException {

    	/*
     * When callerCl is null, we should check the application's
     * (which is invoking this class indirectly)
     * classloader, so that the JDBC driver class outside rt.jar
     * can be loaded from here.
     */
	if(callerCL == null) {
		callerCL = Thread.currentThread().getContextClassLoader();
	}	

	if(url == null) {
		throw new SQLException("The url cannot be null", "08001");
	}

	println("DriverManager.getConnection(\"" + url + "\")");

	if (!initialized) {
		initialize();
	}

	// Walk through the loaded drivers attempting to make a connection.
	// Remember the first exception that gets raised so we can reraise it.
	SQLException reason = null;
	for (int i = 0; i < drivers.size(); i++) {
		DriverInfo di = (DriverInfo)drivers.elementAt(i);

		// If the caller does not have permission to load the driver then 
		// skip it.
		if ( getCallerClass(callerCL, di.driverClassName ) != di.driverClass ) {
		println("	skipping: " + di);
		continue;
		}
		try {
		println("	trying " + di);
		Connection result = di.driver.connect(url, info);
		if (result != null) {
			// Success!
			println("getConnection returning " + di);
			return (result);
		}
		} catch (SQLException ex) {
		if (reason == null) {
			reason = ex;
		}
		}
	}

	// if we got here nobody could connect.
	if (reason != null)	{
		println("getConnection failed: " + reason);
		throw reason;
	}

	println("getConnection: no suitable driver");
	throw new SQLException("No suitable driver", "08001");
	}

ملحوظة, كلامى حول رقم 2 مجرد إستنتاجات شخصيه,,, من واقع ال docs و الكود

تم تعديل هذه المشاركة بواسطة هويدي في 16 أغسطس 2010 في 19:28

#9

جزاك الله خيراا اخي الفاضل هويدي

المناقشه معك مثمرة جدااا جزاك الله خيرااا

انا اقصد driver class name

بالنسبه لمصدر المعلومه انا عملت بحث عليها علشان اجبها هيه نفس الرابط الي وضعته حضرتك ولقيت رابط اخر موضحها بالتفصيل زي منقلتها الرابط

انا فضلت احط الرابط التاني علشان موضح اكثر

بالنسبه deregisterdriver

دي مثال عليها

 import java.sql.Driver;    import java.sql.DriverManager; 
import java.sql.SQLException;  
 for (Enumeration e = DriverManager.getDrivers(); e.hasMoreElements();)  {  
 {   
DriverManager.deregisterDriver(driver);  
 }

هيه فعلا نقدر نستخدمها علي loaded drivers جمعيا مش مهم مين الي عملهم register سواء class.forName او DriverManager.registerDriver

ولو حولت اقول DriverManager.getconnection بعد عمليه deregister هيعطيني exception

انا شايف انهم readable عن class.forName والي ممكن تستخدم مع اي كلاس مش Driver بس انما register , deregister بتطلب Driver class

class.forName بتستخدم ايضا في موضوع reflection

دي الكود الخاص بكلا من registerDriver , deregisterDriver

    public static synchronized void registerDriver(java.sql.Driver driver)
	throws SQLException {
	if (!initialized) {
	    initialize();
	}

	DriverInfo di = new DriverInfo();

	di.driver = driver;
	di.driverClass = driver.getClass();
	di.driverClassName = di.driverClass.getName();

	// Not Required -- drivers.addElement(di);

	writeDrivers.addElement(di); 
	println("registerDriver: " + di);

	/* update the read copy of drivers vector */
	readDrivers = (java.util.Vector) writeDrivers.clone();

    }

 public static synchronized void deregisterDriver(Driver driver) 
	throws SQLException {
	// Gets the classloader of the code that called this method,
	// may be null.
	ClassLoader callerCL = DriverManager.getCallerClassLoader();
	println("DriverManager.deregisterDriver: " + driver);

	// Walk through the loaded drivers.
	int i;
	DriverInfo di = null;
	for (i = 0; i < writeDrivers.size(); i++) {
	    di = (DriverInfo)writeDrivers.elementAt(i);
	    if (di.driver == driver) {
		break;
	    }
	}
	// If we can't find the driver just return.
	if (i >= writeDrivers.size()) {
	    println("    couldn't find driver to unload");
	    return;
	}

	// If the caller does not have permission to load the driver then 
	// throw a security exception.
	if (getCallerClass(callerCL, di.driverClassName ) != di.driverClass ) {
	    throw new SecurityException();
	}

	// Remove the driver.  Other entries in drivers get shuffled down.
	writeDrivers.removeElementAt(i);

	/* update the read copy of drivers vector */
	readDrivers = (java.util.Vector) writeDrivers.clone();        
    }

هنالاحظ فيه vector بيضيف فيه Driver في حاله register وبيحزف في حاله deregister

وبشكر حضرتك تاني علي ردك ومناقشتك المثمره

جزاك الله خيراا ورمضان كريم

تم تعديل هذه المشاركة بواسطة javaeg في 16 أغسطس 2010 في 21:30

SCJP

SCBCD Soon

#10
اقتباس

الاثنين ممكن استخدمهم مع اي قاعده بيانات سواء MySQl او JavaDb

Class.forName

دي التقليديه الي الكل عارفها بتساعدني اني احمل الدرايفر واتعامل معاها او بمعني تاني اعمله register

طب هل ممكن اعمل عمليه عكسيه اني خلاص مش محتاج الدرايفر ده ممكن اعمله deregister مع Class.forName مينفعش انما باستخدك deregisterDriver Method من DriverManager وبستخدم registerDriver علشان احمل الدرايفر

لكن عندك كدا انت اقتصرت الشغل على نوع واحد من قواعد البيانات وانت تذكر انه

ان هذه الداله

DriverManager.deregisterDriver(new AutoloadedDriver());

اـ AutoloadedDriver لا توجد فى باقى قواعد البيانات

لذلك لم يتم توحيد الكود الذى تكتبه

فالجافا تم توحيد الكود والطريقه لكن الاختلاف فقط يكون ف اسم الـ Driver وليس الدوال

اقتباس
حضرتك بتقول اني استخدمت

statement.execute("insert into users values ('mahmoud' , '1111')");

مستخدمتش الموصوف ليه في الدكيمنتاشن

statement.executeUpdate("insert into users values ('mahmoud' , '1111')");

هوه في جميع الاحوال مش هيظهر ليه باذن الله خطا هوه كلامك صح الدكيومنتاشن بيقول كده

بس بردك داخل الدكيمنتاشن هتلاقي ان execute بتستخدم علشان اطبق اي نوع من انواع SQL

يعني ممكن استخدمها مفهاش مشكله

لكن القصد انها موجوده لكى استخدمها يعنى لم تستخدم حاجه مخصصه لغرض معين

ام تستخدم حاجه ممكن تفيدك ف حالات وممكن لالالا

وكمان ازاى تعرف انه تم تنفيذ شىء هل صح ولا غلط

هل كل مره ادخل على قاعده البيانات وانظر هل تم التحديث ام لالا ؟؟

لا طبعا

لذلك ينصح باستخدامها

اقتباس
وعلي فكره بردك بص كده في الدكيمنتاشن في استخدام executeupdate

DDL

executeUpdate(String sql)
          Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.

يعني مش هتفرق انا عارف ان الي بترجع رقم يقولي جمله الاستعلام دي سمعت او اثرت في كام Row بس هل فيه حد بيستخدمه الرقم الي راجع ده في حاجه في الغالب لاء بالزات في جمل insert لاني هكون عارف كام قيمه انا دخلتها

لا طبعا حضرتك ممكن ف برنامج لا تهتم هل تم الادراج بنجاح ام لا

وهل وجد مثلا مستخدم بنفس الاسم فذلك فانه لم يتم اضافته

حضرتك تعرف منين ؟؟ طبعا تعرف من الـ return type للداله

حسب الرقم اللى هترجعه الداله هتعرف هل سمعت فى قاعده البيانات ولا لالا

1

Software Developer
Mahmoudkelany.com


 

#11
هويدي كتب:

ما فهمته أنك تفضل إستخطام DriverManager.registerDriver فوق Class.forName للأسباب الأتيه:

1- في حالة registerDriver أنت تستخدم full class name بدلا من string

2- في حالة registerDriver بإمكانك علم deregisterDriver ..

حسنا, بالنسبة للرقم 1 فهي ميزه لل Class.forName ..... فبإمكانك ترجمة البرنامج دون الحاجه لوجود ال JDBC class إلا فقط عند ال runtime و هي طبعا ميزه و ليست عيب.

بالنسبة للنقطة الثانيه, تقول أنت تستخدم register لكي تستطيع عمل deregister .... مامصدر هذه المعلومه؟

اممممم جميل

فعلا عندك حق اخى هويدى

وكمان انا فى الـ derby لا احتاج الى كل هذه المكتبات التى استخدمها فى شرح الفيديو

فانا احتاج الى مكتبه واحده derby.jar فقظ

اما بالنسبه للنقطه الثانيه فعلا انا بسال نفس السوال

يعنى ايه انا لم مش اكون عاوز الاتصال استخدم deregister كيف ؟ ؟

Software Developer
Mahmoudkelany.com


 

#12

مفيش حاجه موجوده اسمها ملهاش لزمه

deregister موجوده لغرض تم توضيحه في الردود السابقه لو ملهاش وظيفه في الوقت الحالي او مش مستحب انك تستخدمها Documentation هتقولك @Deprecated Method وهيكتبلك السبب

execute ,executeupdate تم توضيح الفرق من Documentation

Execute Statement is used to execute SQL Statement

وهل update او insert مش SQL Statement!!!!!!!!!!!!! :mellow:

وحاجه تانيه سواء انا مستخدم execute ,executeupdate لو انا كاتب جمله الاستعلام بشكل خاطئ :wacko: اظن اكثر حاجه هتبرهن ان الادراج متمش sqlexception محترم

SQLException - if a database access error occurs

Mahmoud Kelany كتب:

وكمان انا فى الـ derby لا احتاج الى كل هذه المكتبات التى استخدمها فى شرح الفيديوفانا احتاج الى مكتبه واحده derby.jar فقظ

المعلومه دي مش صحيحه بنسبه 100% ممكن نبص علي الاقتباس ده افضل

[at]Installing required jar files and adding them to the classpath

To use the Network Server and network client driver, add the following jar file to your server classpath:

* derbyrun.jar

Adding this file to your classpath has the effect of including all of the Derby classes in your classpath. These classes are in the following jar files, which you can also add to your classpath separately:

* derbynet.jar

This jar file contains the Network Server code. It must be in your classpath to start the Network Server.

* derby.jar

This jar file contains the Derby database engine code. It must be in the classpath in order for the Network Server to access Derby databases. derby.jar is included in the Class-Path attribute of derbynet.jar's manifest file. If you have derbynet.jar in the classpath and derby.jar is in the same directory as derbynet.jar, it is not necessary to include derby.jar explicitly.

* derbyclient.jar

This jar file contains the Derby Network Client JDBC driver that is necessary for communication with the Network Server. It must be in the classpath of the application on the client side in order to access Derby databases over a network.

[/at]

SCJP

SCBCD Soon

#13

لو سمحتوا لى اخوتى انا لا افضل JAVA DB لأنى حاولت معاها كتيير وبلاقى دايما مشاكل ليس فى الConnection ولكن فى تطبيقات add , update ,remove ولذلك فضلت اشتغل على access ولكن المشكله ما زالت موجوده

انا عايز اعمل add للبيانات الى فى ال Text Box

 st.execute("insert into course values (jTextField1,jTextField2)");

ولكن بيتج ERROR :excl: ما العمل؟؟

وشكرا :unsure:

no-pain-no-gain.jpg

اذا كنت لا تعلم الى اين تذهب... فكــل الطرق تؤدى الى هناك

#14
 st.execute("insert into course values (" +jTextField1.getText() + ", " + jTextField2.getText() + " )");

تم تعديل هذه المشاركة بواسطة هويدي في 23 أغسطس 2010 في 17:41

#15
هويدي كتب:

 st.execute("insert into course values (" +jTextField1.getText() + ", " + jTextField2.getText() + " )");

مشكور جدا على المساعده والكود منطقى جدا ولكن نفس السطر ينتج نفس ال ERROR

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2.

لأنى لو غيرت ال parameters هكذا

st.execute("insert into course values ('3','PHP')");

فانها تعمل عادى جدا مش عارف ايه المشكله؟؟؟؟؟

no-pain-no-gain.jpg

اذا كنت لا تعلم الى اين تذهب... فكــل الطرق تؤدى الى هناك

#16
The expendable كتب:

مشكور جدا على المساعده والكود منطقى جدا ولكن نفس السطر ينتج نفس ال ERROR

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2.

لأنى لو غيرت ال parameters هكذا

st.execute("insert into course values ('3','PHP')");

فانها تعمل عادى جدا مش عارف ايه المشكله؟؟؟؟؟

امممم

من الملاحظ انك تقول ان عندما تضع فى اول خانه رقم int وفى الخانه الثانيه String فانه يقبل ذلك

فبالتالى انت معرف العمود الاول على انه من النوع Number = integer وانت تحاول ان تضع به قيمه VarChar = String

فلذلك

عليك ان تحرص على ان المستخدم يدخل فى الـ jTextField1

تحرص على انه يدخل رقما وتعمل له عمليه parse

ليكون الكود هكذا

جرب هذا

st.execute("insert into course values (" + Integer.parseInt(jTextField1.getText()) + ", " + jTextField2.getText() + " )");

اتمنى ان تعمل باذن الله بشكل جيد

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 23 أغسطس 2010 في 20:31

1

Software Developer
Mahmoudkelany.com


 

#17

تحياتى لاجمد اعضاء

الكود لم يعمل ولكنى وجدت الحل بفضل الله ومساعدتكم

نحن نسينا وضع العلامات ''

st.execute("insert into course values ('" + Integer.parseInt(jTextField1.getText())  + " ',' " + jTextField2.getText() + " ')");

وشكرا :blush:

no-pain-no-gain.jpg

اذا كنت لا تعلم الى اين تذهب... فكــل الطرق تؤدى الى هناك

#18
The expendable كتب:

تحياتى لاجمد اعضاء

الكود لم يعمل ولكنى وجدت الحل بفضل الله ومساعدتكم

نحن نسينا وضع العلامات ''

st.execute("insert into course values ('" + Integer.parseInt(jTextField1.getText())  + " ',' " + jTextField2.getText() + " ')");

وشكرا :blush:

ماشى بس بدال انت مستخدم المتغير الاول على انه integer

يقبى مفيش ( ' ) single quotation

لانه رقم والرقم لا يوضع بين single quotation

لو اشتغلت دلوقتى

ممكن فى بعض الاحيان فى عمليه الـ update مثلا يرمى لك Exceptions فبالتالى

تعدلها وتكون فى الامان احسن :) :)

تعديلها يكون كدا

st.execute("insert into course values (" + Integer.parseInt(jTextField1.getText())  + ",' " + jTextField2.getText() + " ')");

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 24 أغسطس 2010 في 00:10

Software Developer
Mahmoudkelany.com


 

#19
Mahmoud Kelany كتب:

ماشى بس بدال انت مستخدم المتغير الاول على انه integer

يقبى مفيش ( ' ) single quotation

لانه رقم والرقم لا يوضع بين single quotation

لو اشتغلت دلوقتى

ممكن فى بعض الاحيان فى عمليه الـ update مثلا يرمى لك Exceptions فبالتالى

تعدلها وتكون فى الامان احسن :) :)

تعديلها يكون كدا

st.execute("insert into course values (" + Integer.parseInt(jTextField1.getText())  + ",' " + jTextField2.getText() + " ')");

كلامك صح بس ولا حتى الTEXT Fields لكن لازم تحط باقى parameters بين single quotations

وضع ال single quotations سيكون كالتالى

values (' " + Integer.parseInt(jTextField1.getText())  + " ',' " + jTextField2.getText() + "  ')");

تم تعديل هذه المشاركة بواسطة The expendable في 24 أغسطس 2010 في 01:44

no-pain-no-gain.jpg

اذا كنت لا تعلم الى اين تذهب... فكــل الطرق تؤدى الى هناك

#20
The expendable كتب:

كلامك صح بس ولا حتى الTEXT Fields لكن لازم تحط باقى parameters بين single quotations

وضع ال single quotations سيكون كالتالى

values (' " + Integer.parseInt(jTextField1.getText())  + " ',' " + jTextField2.getText() + "  ')");

ماشى بس انت عامل

Integer.parseInt(jTextField1.getText())

يقبى مش تستخدم ولا قبله ولا بعده single quotations لان دا رقم

ومش ينفع انك تكتب قبله وبعده single quotations

طب جرب وشوف هل فعلا هل هتشتغل ولا لا

Software Developer
Mahmoudkelany.com


 

#21

على فكرة يا محمود في بعض الناس بتحط المعاملات int من النوع string

على أساس بيخافوا يصير عندهم حروف في هذا النوع من المعاملات في يوم من الأيام

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#22
Mahmoud Kelany كتب:

ماشى بس انت عامل

Integer.parseInt(jTextField1.getText())

يقبى مش تستخدم ولا قبله ولا بعده single quotations لان دا رقم

ومش ينفع انك تكتب قبله وبعده single quotations

طب جرب وشوف هل فعلا هل هتشتغل ولا لا

لا طبعا مش هتشتغل لأن ده كود ونفس الكلام فى حاله ال Text Field

وانا معاك ان لو رقم مينفعش احط single quotations ولا حتى لو Text

وتحياتى

no-pain-no-gain.jpg

اذا كنت لا تعلم الى اين تذهب... فكــل الطرق تؤدى الى هناك

#23
علاء الصالحي كتب:

على فكرة يا محمود في بعض الناس بتحط المعاملات int من النوع string

على أساس بيخافوا يصير عندهم حروف في هذا النوع من المعاملات في يوم من الأيام

تحياتي

امممم

ماشى يا عموو علاء

بس انا علشان هو مستخدم

 Integer.parseInt(jTextField1.getText());

المفروض ان المعامل يكون int مش String

Software Developer
Mahmoudkelany.com


 

مواضيع مشابهة