Ceviz Forum

Geri Dön   Ceviz Forum > Programlama > Java / JSP

Cevapla
 
LinkBack Seçenekler
Eski 22/02/2007, 19:13   #1 (permalink)
Üye
 
x_cem Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 10/2006
Mesaj: 63
Varsayılan Transactions hakkında yardım lütfen

Merhaba Arkadaşlar bi konuda acilen yardımınıza ihtiyacaım var.
Yapmaya çalıştığım bi programda kullanıcı ların fatura girişlerinde faturaya malzeme ekledikleri zaman malzeme için sıra numarası veriyor ama bu sıranumaraları asla aynı olmaz ama iki kişi aynı anda aynı fatura girişi yapınca sıra numaraları bazen aynı oluyor. (numaralar ardışık olarak gidiyor 1.2.3... şeklinde ) netten bulduğum kodu aşağıya kopyalıyorum ama işe yaramadı yardımlarınız için şimdiden teşekkürler.
/*
Driver DriverTks_Islem_SiraNo = (Driver)Class.forName(MM_Ayniyat_DRIVER).newInstan ce();
Connection ConnTks_Islem_SiraNo = DriverManager.getConnection(MM_Ayniyat_STRING,MM_A yniyat_USERNAME,MM_Ayniyat_PASSWORD);
*/
int SiraNo=1;
PreparedStatement StatementTks_Islem_SiraNo = ConnAyniyat.prepareStatement("SELECT MAX(SiraNo)AS SiraNo FROM tks_Islemler WHERE (TasinirIslemFisiRecordNo = ?)");
StatementTks_Islem_SiraNo.setInt(1, Tks_Islem__prmTasinirIslemFisiRecordNo);

try
{
DatabaseMetaData dmd = ConnAyniyat.getMetaData();
if (dmd.supportsTransactions()) {

ResultSet Tks_Islem_SiraNo = StatementTks_Islem_SiraNo.executeQuery();
boolean Tks_Islem_SiraNo_isEmpty = !Tks_Islem_SiraNo.next();
boolean Tks_Islem_SiraNo_hasData = !Tks_Islem_SiraNo_isEmpty;
Object Tks_Islem_SiraNo_data;
int Tks_Islem_SiraNo_numRows = 0;

if(Tks_Islem_SiraNo_hasData){SiraNo = Tks_Islem_SiraNo.getInt("SiraNo")+1;};

Tks_Islem_SiraNo.close();

}
else
{
// Transactions are not supported
}
}
catch(SQLException e)
{
//out.print(e);
session.setAttribute("msj", "Kaydiniz Eklenemedi Hata Olustu");
response.sendRedirect("1");
}
finally
{
StatementTks_Islem_SiraNo.close();
ConnTks_Islem_SiraNo.close(); };


burdan aldığım fiş sıra numarasını sonra yazdırıyorum ama bi türlü başaramadım tekrar herşey için teşekkürler...

Enson 22/02/2007 19:39 tarihinde x_cem tarafından düzenlenmiştir.. Sebep: Yanlış lık
x_cem hatta değil   Alıntı Yaparak Yanıtla
Eski 23/02/2007, 13:12   #2 (permalink)
Üye
 
Üyelik Tarihi: 02/2007
Yer: 127.0.0.1
Mesaj: 71
Varsayılan

Oncelikle, asagidaki kodda insert eden bolum eksik sanirim. Ama, o aldigin sirano yu hemen insert etsen bile, burada numara islemini synchronized olarak dagitan bir yapiya ihtiyacin var. Sonucta senin sorunun, iki kullanici bu kodu ayni anda calistirirsa, ikisi de insert/update e girmeden once selecti calistiracak ve dolayisiyla ayni numarayi alacaklar.

Bunun icin, eger mysql kullaniyorsan, AUTO_INCREMENT ile tanimla siranoyu ve direkt insert et. O noktada, mysql atayacaktir bir sirano. Eger Oracle kullaniyorsan sequence kullan, ve ilk olarak sequence.nextval ile bir sonraki noyu al, ve sonra insert et.

Eger, tek bir sunucu uzerinden calisiyorsan (yani java kodu tek bir serverda/process de calisiyorsa), bu numara verme islemini database de degil, javada da yapabilirsin. Bunun icin "synchronized" bloklarina gozat.
dcabbar hatta değil   Alıntı Yaparak Yanıtla
Eski 23/02/2007, 17:17   #3 (permalink)
Üye
 
x_cem Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 10/2006
Mesaj: 63
Varsayılan

Kullandığım veritabanı ms sql2000 benim tablomda AUTO_INCREMENT bi alan var id olarak ikincisne AUTO_INCREMENT yapmama izin vermiyor verse bile diyelimki 300 kodlu malzeme için 1 den başlayacak olan sıra numarası 301 kodlu malzame için yine 1 den başlaması gerekiyo tekrara 300 kodlu malzeme girildiğinde daha önceki girilen 300 kodlu malzemenin kaldığı sıranumarasından devam etmeli veri tabanında bu iş için stora procedure yazdım ama ondada başarılı olamadım.
statement lerda cursor gibi bi kodlar la yapıla bilirmi yada başka bi çözüm yolu bula bilirmiyim.
Not: Bu kodu jsp de çalıştırmaya çalışıyorum.
tşk
x_cem hatta değil   Alıntı Yaparak Yanıtla
Eski 23/02/2007, 18:46   #4 (permalink)
Üye
 
x_cem Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 10/2006
Mesaj: 63
Varsayılan

<%

Integer hits = (Integer)application.getAttribute("counter");
if(hits==null)
{
hits=new Integer(0);
}
else
{
hits=new Integer(hits.intValue()+1);
}
application.setAttribute("counter", hits);

%>
<%= application.getAttribute("counter") %>


bu şekilde bi counter tanımlasam sayfanın başında eğer counter sıfırdan farklı ise bekle değil ise işlemi gerçekleştir şeklinde düşünüyorum ama olurmu
seneryoyu kurdum ama kodlaması nasıl olabilir. bu konuda düşüncesi olan varmı!
şimdiden herkese tşk.
x_cem hatta değil   Alıntı Yaparak Yanıtla
Eski 26/02/2007, 06:14   #5 (permalink)
Üye
 
Üyelik Tarihi: 02/2007
Yer: 127.0.0.1
Mesaj: 71
Varsayılan

Sevgili x_cem,

Iki seviyeli bir counter tutmak istiyorsan, bunu web server'da yapmak bence cok mantikli degil, zira kac tane malzeme oldugunu bilmiyorsun ve malzeme sayisi arttikca, bunlarin hepsini serverda tutman gerekiyor ve bu da gereksiz yere memory harcaman demek.

Benim tavsiyem, bir counter tablosu yarat:

1. Malzeme id,
2. Max Malzeme Sira No

seklinde. Yeni bir malzeme yarattigin zaman, buraya bir satir insert et, <malzeme id , 0> seklinde.

Yeni sira noya ihtiyacin oldugunda bu rowu lock et, Max Malzeme Sira No'yu bir arttir, yeni numarayi al ve unlock et. Sonra kodunda bu aldigin numarayi kullan.

Bunu stored procedure ile yapman cok daha hizli olacaktir, ama ben MS SQL bilmedigim icin, o konuda yardimci olamiyorum.
dcabbar hatta değil   Alıntı Yaparak Yanıtla
Eski 26/02/2007, 12:49   #6 (permalink)
Üye
 
x_cem Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 10/2006
Mesaj: 63
Varsayılan

dcabbar da önerdiği gibi ikinci yola başvurdum javada synchronized baktım sanırsam aşağıdaki kod işimi görecek gibi.
Veri tabanı kısmına girmek istemiyorum çünkü ms sql den my sql geçiş de yapa bilirim o sebep leki veri tabanı bazında işlem yaptırmak istemiyorum.
<%!
private int veri;
private boolean mevcut=false;

public synchronized int veriAl()
{
while(mevcut==false){
try{
wait();
}catch(InterruptedException e){ }
}
mevcut=false;
notifyAll();
return veri;
}
public synchronized void veriKoy(int gelenVeri){

while(mevcut==true){
try{
wait();
}catch(InterruptedException e){ }

}


veri=gelenVeri;
mevcut=true;
notifyAll();


}

%>
x_cem hatta değil   Alıntı Yaparak Yanıtla
Cevapla

Bookmarks

Seçenekler

Mesaj Yazma Hakları
Yeni mesajgöndermezsiniz
Cevap yazamazsınız
Dosya ekleyemezsiniz
Mesajınızı düzenleyemezsiniz

BB code is Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık

Benzer Konular
Konu Konuyu açana göre Forum Cevap En Son Mesaj
KuruLum hakkında yardım Lütfen blue_dark Windows 1 25/02/2007 02:55
bir program hakkında yardım lütfen :S Muuuzy C / C++ 0 23/02/2007 14:15
Lütfen Yardım (internet radyosu hakkında) netkolik Internet 0 01/08/2005 01:25
TC++ Hakkında ÇOK ACİL Yardım Lütfen!!!! batilc Uygulama Yazılımları / Hazır Betikler 4 09/03/2005 06:04
Lütfen yardım. Perl hakkında bestwow Diğer Diller 8 20/02/2005 15:14


Forum saati Türkiye saatine göredir. GMT +3. Şu anda saat 03:20.

Reklamlar & Desteklenenler
Hassas Valf | Hassas Kaplama | Antalyamız | Gazete | Ticari Bilişim | Hakan Müştak | Rüya Tabirleri | Kadın | Hastalıklar | Cepte msn ve e-posta | Webmaster | Antalya Aupair | Turkish Property Antalya | Forum | Chat | Perde | Adsl | Araba | bolindir.com | guncelle.com | livescore | Web Tasarım | evden eve nakliyat | forum | evden eve | sohbet | Resimcim| Kalifiye İnsan Kaynakları | Web Tasarım | Oyun | Yusuf KOÇ | Akın Yorulmaz | şiir | UFO | Web Tasarım | Oyunlar | Canlı Tv |


Forum Yazılımı: vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright ©2001 - 2008, Ceviz.net