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

استثناء في تنفيذ الدالة ! أرجو المساعدة

بدأه JavaPorgrammer في 19 ديسمبر 2010 · 3 رد · 475 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله..

ايه الخطأ في الكود ؟ :wacko:

السيناريو : تقوم الدالة بجرد محتويات الـ hashtable ثم يقوم بتخزينها بقاعدة البيانات .. ويتوضح بالكود :

الدالة :

public boolean insertOrder(String c_name, Hashtable cart, double total){
boolean done =false;
long bill_sn = System.currentTimeMillis();

Connection con ;
try{
    con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","root","root");
    con.setAutoCommit(false);
    Statement s = con.createStatement();

    String sql  = "insert into bill values("+bill_sn+","+c_name+","+total+")";
    s.executeUpdate(sql);

    Enumeration enm = cart.elements();
    while(enm.hasMoreElements()){
    Item shop_Item = (Item) enm.nextElement();// every row is Object .. 
      sql = "insert into bill_details values("+bill_sn+","+shop_Item.getProd_sn()+
            ","+shop_Item.getQTY()+","+shop_Item.getDISCOUNT()+","+shop_Item.getPAIED_TYPE()+
            ","+shop_Item.getCHECK_NO()+")";
    s.executeUpdate(sql);

    }

    s.close();
    con.commit();
    con.close();
    done = true;
}catch (SQLException e) {System.out.println(e.toString());}
return done;
}

الجداول :

SQL> desc bill;
 Name                                      Null?    Type
 ----------------------------------------- -------- --------------

 BILL_SN                                   NOT NULL NUMBER(20)
 C_USER_NAME                                        VARCHAR2(50)
 TOTAL                                     NOT NULL FLOAT(126)

SQL> desc bill_details;
 Name                                      Null?    Type
 ----------------------------------------- -------- --------------

 BILL_SN                                   NOT NULL NUMBER(20)
 PROD_SN                                   NOT NULL NUMBER(38)
 QTY                                       NOT NULL NUMBER(38)
 DISCOUNT                                           FLOAT(126)
 PAIED_TYPE                                NOT NULL VARCHAR2(10)
 CHECK_NO                                           NUMBER(38)

عند تنفيذ الدالة يعطيني هذا الاستثناء :

java.sql.SQLSyntaxErrorException: ORA-00984: column not allowed here

أرجو المساعدة :blush:

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#2
اقتباس
String sql = "insert into bill values("+bill_sn+","+c_name+","+total+")";

المشكله هنا .....

ضع single quotes حول ال c_name لأن أوراكل ستعتبرها إسم عمود إن لم تحيطها ب single quotes ....

#3

حياك أخي هويدي .. شكرا على تفاعلك.

سبق وجربت ذلك ، لكنه لم يفلح! :unsure:

وجربت Batch ظناً مني أن المشكلة من الـ loop ، لأنه ينفذ استعلامين كل مرة !

وللأسف!

وجربت اجعل كل جملة ينفذها statement مستقل ، ونفس القصة تتكرر ! :wacko:

تم تعديل هذه المشاركة بواسطة JavaPorgrammer في 20 ديسمبر 2010 في 02:09

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#4

بحمد الله تم حل المشكلة :happy:

جعلت كل جملة ينفذها PreapredStatement مستقل :blush:

لتصبح الدالة بهذا الشكل :

public boolean insertOrder(String c_name, Hashtable cart, double total){
boolean done =false;
long bill_sn = System.currentTimeMillis();

Connection con ;
try{
    con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","root","root");
    con.setAutoCommit(false);
    //Statement s = con.createStatement();

    String sql = "insert into bill values(?,?,?)";
    PreparedStatement s = con.prepareStatement(sql);
//    s.executeUpdate(sql);
    s.setLong(1, bill_sn);
    s.setString(2, c_name);
    s.setDouble(3, total);
    s.executeUpdate();
    String sql2 = "insert into bill_details values(?,?,?,?,?,?)";
PreparedStatement s2 = con.prepareStatement(sql2);
    Enumeration enm = cart.elements();
    while(enm.hasMoreElements()){
    Item shop_Item = (Item) enm.nextElement();// every row is Object ..
    s2.setLong(1, bill_sn);
    s2.setInt(2, shop_Item.getProd_sn());
    s2.setInt(3, shop_Item.getQTY());
    s2.setDouble(4, shop_Item.getDISCOUNT());
    s2.setString(5, shop_Item.getPAIED_TYPE());
    s2.setInt(6, shop_Item.getCHECK_NO());
    s2.executeUpdate();
    }

    s.close();
    s2.close();
    con.commit();
    con.close();
    done = true;
}catch (SQLException e) {System.out.println(e.toString());}
return done;
}

تحية عطرة للجميع :blush:

تم تعديل هذه المشاركة بواسطة JavaPorgrammer في 20 ديسمبر 2010 في 02:24

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

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