#connection etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
#connection etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

10 Mayıs 2019 Cuma

HIBERNATE



1. one to one 

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Adress {
        @Id
        @GeneratedValue(strategy= GenerationType.AUTO)
        private Long adressId;  

        @Column(name="Mahalle")
        private String mahalle;      
   
        @Column(name="Cadde")
        private String cadde;       

        // getters and setters

}




import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Entity
public class Kisi {

        @Id
        @GeneratedValue(strategy= GenerationType.AUTO)
        private Long id;
       
        @Column(name="Ad")
        private String ad;
       
        @OneToOne
        private Adress address;       

        // getters and setters

}


2. one to many = bir kisinin birden fazla birden fazla banka hesabi olabilir.


import javax.persistence.*;

@Entity
public class Hesap {

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name="HesapId")
        private Long id;   

        @Column(name="HesapAdi")
        private String hesapAdi;       

        @Column(name="Bakiye")
        private Double hesapBakiyesi;

        //getters and setters

}


import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;

@Entity
public class Kisi {

        @Id
        @GeneratedValue(strategy= GenerationType.AUTO)
        @Column(name="KisiId")
        private Long id;
   
        @Column(name="Ad")
        private String ad;
      
        @OneToMany(cascade = CascadeType.ALL)
        @JoinTable(name="KisiAdres", joinColumns = {@JoinColumn(name="KisiId") }, inverseJoinColumns = { @JoinColumn(name="HesapId")})
        private List hesapListesi;
  

        // getters and setters

}



10 Nisan 2019 Çarşamba

ANDROID JSOUP

Merhaba,
Bu yazimdan Jsoup kullanimi ile ilgili ornek yapacagim.
Oncelikle Jsoup nedir kisaca ondan bahsedelim. Jsoup html parse eden yani ayristiran bir java kutuphanesidir. Jsoup ile html sayfalarindan css elemanlarini kullanarak veri cekebilir ve bu verileri uygulamamiz icinde kullanabiliriz.

Dezavantaji ise web sitesinin html elemanlarinda degisiklik yapildiginda istedigimiz veriyi cekemeyebiliriz.

Oncelikle ilk adim olarak build.gradle a jsoup u ekleyelim.

compile 'org.jsoup:jsoup:1.11.3'



Simdi de Manifest e gidip internet izni verelim cunku uygulamamiz internetten veri cekecek.

Simdi layoutumuza bir buton koyalim ve o butona tiklandiginda http://sengamze.blogspot.com/2019/04/android-resim-ekleme.html
bu linkte yer alan yazimin basligini ekrana yazdirsin.

package gykizmir.com.jsoupexample;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;


public class MainActivity extends AppCompatActivity {

    Button learnTitleBtn;
    TextView titleOfBlog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        titleOfBlog = (TextView) findViewById(R.id.learnTitle);

        learnTitleBtn = (Button) findViewById(R.id.learnTitle);

        learnTitleBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Title().execute();
            }
        });


    }

    private class Title extends AsyncTask<Void, Void, Void>{

        String url = "http://sengamze.blogspot.com/2019/04/android-resim-ekleme.html";
        String title;
        ProgressDialog progressDialog;

        @Override
        protected void onPreExecute(){
            super.onPreExecute();
            progressDialog = new ProgressDialog(MainActivity.this);
            progressDialog.setTitle("Jsoup Example");
            progressDialog.setMessage("Title is retrieving");
            progressDialog.setIndeterminate(false);
            progressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                Document document = Jsoup.connect(url).get();
                title = document.title();
            } catch (IOException ex){
                ex.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void avoid){
            titleOfBlog.setText(title);
            progressDialog.dismiss();
        }
    }

}




layoutumuz ise asagidaki gibi olmali.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="gykizmir.com.jsoupexample.MainActivity">

    <Button
        android:id="@+id/learnTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Learn Title"/>


    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="Title" />


</LinearLayout>




Calistirdigimizda ise ekran goruntusu asagidaki gibidir.

          

23 Mart 2019 Cumartesi

ANDROID - FINE LOCATION VE COARSE LOCATION FARKI

Android de uygulamamiz eger konuma erisme ihtiyaci duyuyorsa o zaman AndroidManifest ten konum erisimine izin vermemiz gerekir.

2 izin tipinin farkindan bahsedecegim:


1. The Fine location provides better and accurate locations.

Requires permission,

ACCESS_FINE_LOCATION

<uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION” />

It gives permission for using both GPS_PROVIDER and NETWORK_PROVIDER

or  GPS_PROVIDER only for determining the position.

2. The Coarse location provides less accurate locations.

Requires permission,

ACCESS_COARSE_LOCATION

<uses-permission android:name=”android.permission.ACCESS_COARSE_LOCATION” />

It gives permission for using both NETWORK_PROVIDER only for determining the position.




13 Ocak 2019 Pazar

Genymotion'a Play Store Yukleme

Merhaba,

Bu yazimda Genymotion a Google Play Store nasil yuklenir bunu gosterecegim.

Bunun icin oncelikle emulatorle uyumlu zip dosyasini buradan indirelim.

Daha sonra bu zipi cikartmadan Genymotion device miza surukle birak yapalim.

Ekrana gelen uyariya OK diyelim.

Daha sonra islem tamamlaninca device i yeniden baslatmamizi isteyecek. Yeniden baslatalim.

Cihaz acildiginda herhangi bir google service ine tiklayarak login olalim.

Ben Gmail uzerinden login oldum.

Verilen hatalari simdilik onemsemeyelim. Cunku basarili bir sekilde login olunduktan sonra google play icin update etmemizi isteyecek ve hatalarimiz orada cozulecek.

 Login olunduktan sonra Google service lerini Play Store uzerinden update edelim.

Sorunumuz cozulmus olacaktir.

Iyi calismalar.

Kaynak : https://medium.com/@eferhatg/genymotiona-google-play-store-yukleme-2-cab6b2ee65a2

9 Aralık 2018 Pazar

Android Uygulamalara Dil Secenegi Ekleme

Merhaba bu yazimda android projelerine dil destegi eklemeyi anlatacagim. Diyelim bir uygulamamiz var ve bu uygulamanin baska dil secili telefonlarda o dilde calismasini istiyoruz. Burada yapmamiz gereken uygulamamizdaki her kelimenin diger dildeki(uygulamanin calistigi telefon dilinde) karsiligini yazacagimiz bir dosya olusturmak.

Bunun icin res klasorune sag tiklayip New -> Android resource directory -> Karsimiza cikan ekrandan Locale secip -> Gelen listeden istedigimiz dili secmektir.

Ornegin Ingilizce icin bu sekilde bir secim yaptigimizda values-en adinda, Almanca icin ise values-de adinda bir klasor olusturacaktir. Simdi ise yapmamiz gereken her values klasorunun altina strings.xml adinda bir resource file olusturmak. (Bu arada gorunumu Project olarak degistirelim. Ben Android gorunumundeyken olusturdugum klasorleri gorememistim)

Dosyalarin nasil gorundugune alttaki resimden bakabilirsiniz.



















Simdi ise ingilizce karsiligi olmasi gereken kelimeleri strings.xml den kopyalamak ve values-en e altindaki strings.xml e yapistirmak. Orada ingilizce karsiliklarinii yazmak. Asagida bir ornek yapacagim.

Alttaki turkcedeki strings.xml

<resources>
    <string name="app_name">CheckBoxExample</string>
    <string name="btnName1">GONDER</string>
    <string name="text1"> Cinsiyetinizi secin</string>
</resources>





Alttaki ise values-en alttaki strings.xml

<?xml version="1.0" encoding="utf-8"?><resources>
    <string name="app_name">Ornek Uygulama</string>
    <string name="btnName1">SEND</string>
    <string name="text1">Choose your gender</string>
</resources>

Ancak bu sekilde ayarlama yaptiktan sonra ekranda gosterecegimiz mesajlarin

statik degil dinamik olmasi gerekir. Ornegin bir buton icin :

<Button    
  android:id="@+id/sec"
  android:text="@string/btnName1"    
  android:gravity="center"  
  android:layout_width="wrap_content"    
android:layout_height="wrap_content" />

Uygulamanin calistigi telefondaki dil Turkce ise turkce , ingilizce ise ingilizce 
karsiliklari yazar. 
Iyi calismalar

7 Ekim 2017 Cumartesi

JAVA JDBC Examples

Oncelikle JDBC i kullanmak icin https://www.oracle.com/technetwork/apps-tech/jdbc-112010-090769.html linkinden ojdbc6.jar i indiriyoruz.

Ve eclipse de yeni bir java projesi olusturup icinde libs adli bir folder olusturuyoruz. Indirdigimiz jar i oraya yapistiriyoruz. Ama bu sekilde yapistirmamiz o jar i kullanmamiza yetmez o yuzden jar a sag tiklayip Build Path -> Add to Build Path secenegine tikliyoruz. Bu sekilde referenced library e jar imiz eklenmis oldu. Artik kullanabiliriz.

JDBC i kullanmak icin temel olarak yapmamiz gerekenler

Connection olustur => Statement olustur => Execute Et => Resultset ile cek.

Statement

Statement icin temelde 2 tip var.

ResultSet executeQuery(String sql) => gordugumuz gibi result set dondurur. select islemleri icin bunu kullaniriz.

int executeUpdate(String sql) => bunu ise insert, update, delete gibi islemlerde kullaniriz ve sonuc olarak islemlerden etkilenen row countu dondurur.


* Ayrica yazdigimiz tum connection, statement ve resultset in kapatilmasi gerekir. bunu tek tek kapatmak yerine try icinde hepsini tamamlarsak otomatik olarak kullanmadiginda kapatilir.

ResultSet Types

3 tip vardir.

Type_Forward_Only : ornegin bir islemde ilk basta 1. rowdayiz ve bunu kullanarak 5. row a gecebiliriz. Ama 5. rowdan 3 e gecemeyiz.Sadece ileri dogru gidebiliriz.

Type_Scroll_Insensitive : bununla hem forward hem backward ilerleyebiliriz. Ama Insensitive oldg icin result olustuktan sonraki degisikliklere duyarsizdir.

Type_Scroll_Sensitive :  bununla hem forward hem backward ilerleyebiliriz. Sensitive oldg icin result olustuktan sonraki degisikliklere duyarlidir.

* hic birini yazmazsak defaultu Type_Forward_Only dir.

ResultSet Concur Types

2 tip vardir.

Concur_Read_Only 

Concur_Updatable 

* defaultu Concur_Read_Only dir.

Asagida hem update hem insert yaptigimiz bir ornek yer almaktadir.



import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class UpdatableRecords {

 public static void main(String[] args) {
  try (Connection conn = DBUtil.getConnection(DBType.ORADB);
    Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    ResultSet rs = stmt.executeQuery("select department_id, department_name, manager_id, location_id from departments");
    ) {
   rs.absolute(6);
   rs.updateString("department_name", "Information Technology");
   rs.updateRow();
   
   System.out.println("Record updated successfuly");
   
   rs.moveToInsertRow();
   rs.updateInt("department_id", 999);
   rs.updateString("department_name", "Training");
   rs.updateInt("manager_id", 200);
   rs.updateInt("location_id", 2000);
   rs.insertRow();
   System.out.println("Record inserted succesfully");
   
  } catch(SQLException e){
   DBUtil.showErrorMsg(e);
  }

 }

}



Degisiklikleri sqlplus tan goruntuleyebiliriz.



Simdi de PreparedStatement kullanimina bakalim. Statement in bir alt sinifidir ve sorguya parametre girilecegi zaman kullanilir.

Asagida ornek bir yer almaktadir.



import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class PreparedStatementEx01 {

 public static void main(String[] args) {
  
  Connection conn = null;
  PreparedStatement pstmt = null;
  ResultSet rs = null;
  try {
   String sql = "select * from Employees where SALARY < ? and Department_Id=?";
   
   conn = DBUtil.getConnection(DBType.ORADB);
   pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
   
   preparedStatement(pstmt, 10000, 50);
   System.out.println("---------------------------");
   
   preparedStatement(pstmt, 3000, 50);
   
   
  } catch(SQLException e){
   DBUtil.showErrorMsg(e);
  }
 }

 private static void preparedStatement(PreparedStatement pstmt, double salary, int department_id) throws SQLException {
  ResultSet rs;
  pstmt.setDouble(1, salary);
  pstmt.setInt(2, department_id);
  rs = pstmt.executeQuery();
  String format = "%-4s%-20s%-25s%-10f\n";
  
  while(rs.next()){
   System.out.format(format, rs.getString("Employee_ID"), rs.getString("First_Name"),
     rs.getString("Last_Name"), rs.getFloat("Salary"));
  }
  rs.last();
  System.out.println("Total num of rows: "+ rs.getRow());
 }
}



INSERT RECORD



import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class InsertRecord {

 public static void main(String[] args) throws SQLException {
  Connection conn = DBUtil.getConnection(DBType.ORADB);
  PreparedStatement pstmt = null;
  
  String empname;
  int salary, empid;
  Date hiredate;
  
  Scanner scan = new Scanner(System.in);
  
  System.out.print("Enter emp id: ");
  empid = Integer.parseInt(scan.nextLine());
  
  System.out.print("Enter emp name: ");
  empname = scan.nextLine();
  
  System.out.println("Enter salary: ");
  salary = Integer.parseInt(scan.nextLine());
  
  System.out.println("Enter hire date: ");
  hiredate = java.sql.Date.valueOf(scan.nextLine());
  
  String sql = "insert into newemp values(?,?,?,?)";
  
  pstmt = conn.prepareStatement(sql);
  
  pstmt.setInt(1, empid);
  pstmt.setString(2, empname);
  pstmt.setInt(3, salary);
  pstmt.setDate(4, hiredate);
  
  int result = pstmt.executeUpdate();
  
  if(result == 1){
   System.out.println("Record inserted");
  } else{
   System.err.println("Error occured when insert.");
  }
  
  scan.close();
  pstmt.close();
  conn.close();
 }

}


UPDATE RECORD


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class UpdateRecord01 {
 public static void main(String[] args) throws SQLException{
  Connection conn = DBUtil.getConnection(DBType.ORADB);
  String sql = "update newemp set empsalary = ? where empid=20";
  
  Scanner scan = new Scanner(System.in);
  System.out.println("Enter new salary : ");
  int salary = scan.nextInt();
  PreparedStatement pstmt  = conn.prepareStatement(sql);
  pstmt.setInt(1, salary);
    
  int result  = pstmt.executeUpdate();
  if(result == 1){
   System.out.println("Succesfully updated");
  } else{
   System.err.println("Error occured");
  }
  scan.close();
  pstmt.close();
  conn.close();
 }
}


DELETE RECORD


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class DeleteRecord01 {

 public static void main(String[] args) throws SQLException {
  Connection conn = DBUtil.getConnection(DBType.ORADB);
  String sql = "Delete from newemp where empid=?";
  
  Scanner scan = new Scanner(System.in);
  System.out.println("Enter id of emp to delete:");
  int empid = scan.nextInt();
  
  PreparedStatement pstmt = conn.prepareStatement(sql);
  pstmt.setInt(1, empid);
  
  int result = pstmt.executeUpdate();
  if(result == 1){
   System.out.println("Succesfully deleted");
  } else{
   System.err.println("Error occured.");
  }
  scan.close();
  pstmt.close();
  conn.close();
 }

}



CALLABLE STATEMENT

Callable Statement ile Stored Procedure e parametre gonderebiliriz.
Bunun icin oncelikle bir stored procedure olusturalim.
SqlPlus i acalim. Ve daha once elimizdeki newemp tablosuna kayit eklememizi saglayacak bir procedure yazalim.

create or replace Procedure AddEmployee
(
eid in NEWEMP.EMPID%TYPE,
ename in NEWEMP.EMPNAME%TYPE,
sal in NEWEMP.EMPSALARY%TYPE,
hdate in NEWEMP.HIREDATE%TYPE
)
is
begin
    insert into NEWEMP values (eid, ename, sal, hdate);
commit;
end;
/

Procedure yukaridaki gibi olmalidir.

Simdi eclipse e gecip kodumuzu yazalim.


import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;
import java.util.Scanner;

public class CallableStatementEx01 {

 public static void main(String[] args) {
  try (Connection conn = DBUtil.getConnection(DBType.ORADB);
    CallableStatement cstmt = conn.prepareCall("{call AddEmployee (?,?,?,?)}"); 
    Scanner scan = new Scanner(System.in); ) {
   
   
   System.out.println("Enter empid: ");
   int empid = Integer.parseInt(scan.nextLine());
   System.out.println("Enter empname: ");
   String empname = scan.nextLine();
   System.out.println("Enter empsalary: ");
   int salary = Integer.parseInt(scan.nextLine());
   System.out.println("Enter hiredate: ");
   Date hdate = java.sql.Date.valueOf(scan.nextLine());
   
   cstmt.setInt(1, empid);
   cstmt.setString(2, empname);
   cstmt.setInt(3, salary);
   cstmt.setDate(4, hdate);
   
   cstmt.execute();
   System.out.println("Added succesfully");
   
  } catch(SQLException ex){
   DBUtil.showErrorMsg(ex);
  }
 }

}


INSERTING MULTIPLE RECORDS

Yukarida yazdigimiz kod ile bir kez insert islemi yapabiliyoruz. Eger 10 kez insert yapmak istesek her bir insert isleminde database e baglanip islem yapmamiz gerekecek ve bu da network trafigini arttiracak. Bu yuzden 10 kez insert yapip bir kez database e baglanmamiz iyi bir yontemdir.



import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;
import java.util.Scanner;

public class InsertMultipleRecords01 {

 public static void main(String[] args) {
  try (Connection conn = DBUtil.getConnection(DBType.ORADB);
    CallableStatement cstmt = conn.prepareCall("{call AddEmployee(?,?,?,?)}");
    Scanner scan = new Scanner(System.in); ) {
   String option;
   do {
   System.out.println("Enter eid: ");
   int eid = Integer.parseInt(scan.nextLine());
   System.out.println("Enter ename: ");
   String ename = scan.nextLine();
   System.out.println("Enter salary: ");
   int sal = Integer.parseInt(scan.nextLine());
   System.out.println("Enter hire date: ");
   Date hdate = java.sql.Date.valueOf(scan.nextLine());
   
   cstmt.setInt(1, eid);
   cstmt.setString(2, ename);
   cstmt.setInt(3, sal);
   cstmt.setDate(4, hdate);
   
   cstmt.addBatch();
   System.out.println("Do you want to add one more record ? yes/no:");
   option = scan.nextLine();
   } while (option.equals("yes"));
   
   int[] updatedRecords = cstmt.executeBatch();
   System.out.println("Total num of updated records: " + updatedRecords.length);
  } catch(SQLException e){
   DBUtil.showErrorMsg(e);
  }

 }

}


Kayitlarin eklenip eklenmedigini kontrol etmek icin SqlPlus ta su query i calistirabiliriz.

select * from newemp where empid in (33, 44, 55);

Bu sekilde eklemis oldugumuz kayitlari gorebiliriz.

STORED PROCEDURE

Stored procedure lar ayni zamanda bir deger de dondurebilir. Bu durumu gorebilecegimiz bir ornek yapalim.
Kullanicidan alacagimiz department id deki calisan sayisni dondurmek isteyelim. Oncelikle bunun icin gerekli stored procedure i yazalim.

create or replace procedure shownum (
dept_id in Employees.Department_Id%Type,
empCount out number
)
as
begin
select count(*) into empCount from Employees
where Department_Id = dept_id;
end;
/



import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Scanner;

public class OutSpEx01 {

 public static void main(String[] args) {
  try (Connection conn = DBUtil.getConnection(DBType.ORADB);
    CallableStatement cstmt = conn.prepareCall("{call shownum (?,?)}");
    Scanner scan = new Scanner(System.in);  ) {
   
   System.err.println("Enter department id: ");
   int deptid = scan.nextInt();
   cstmt.setInt(1, deptid);
   cstmt.registerOutParameter(2, Types.INTEGER);
   cstmt.execute();
   
   int totalCount = cstmt.getInt(2);
   System.out.println("Total number of employees work in department "+ deptid + " is "+ totalCount);
   
  } catch(SQLException e){
   DBUtil.showErrorMsg(e);
  }
 }

}


RETURN MULTIPLE ROWS FROM STORED PROCEDURE

Stored procedure dan multiple row dondurmek istedigimizde data type olarak SYS_REFCURSOR kullanmaliyiz.

Verilen department id de calisanlarin bilgilerini dondurecek bir sp yazalim.

Create or replace procedure GETEMPLOYEES
(
p_deptid in employees.department_id%type,
p_persons out SYS_REFCURSOR
)
as
begin
open p_persons for
select employee_id, first_name || last_name as ename,
email, salary from employees
where department_id = p_deptid
order by employee_id;
end;
/

Simdi ise gerekli kodumuzu yazalim.


import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import oracle.jdbc.internal.OracleTypes;

public class ReturnMultipleRowsSp01 {
 public static void main(String[] args){
  
  try (Connection conn = DBUtil.getConnection(DBType.ORADB);
    CallableStatement cstmt = conn.prepareCall("{call getemployees(?,?)}");
    Scanner scan = new Scanner(System.in); ) {
   
   System.out.println("Enter deparment id :");
   int deptid = scan.nextInt();
   
   cstmt.setInt(1, deptid);
   cstmt.registerOutParameter(2, OracleTypes.CURSOR);
   cstmt.execute();
   ResultSet rs = ((oracle.jdbc.internal.OracleCallableStatement)cstmt).getCursor(2);
   String format = "%-4s%-20s%-25s%-10f\n";
   while(rs.next()){
    System.out.format(format, rs.getInt("employee_id"), rs.getString("ename"), rs.getString("email"), rs.getDouble("salary"));
   }   
  } catch(SQLException e){
   DBUtil.showErrorMsg(e);
  }
 }
}


1 Ekim 2017 Pazar

Hibernate with H2 Database / H2 Veritabani Hibernate Ornek

Bu yazimda Hibernate ve H2 database kullanarak kullanici ekleme, silme islemlerini anlatacagim.
Bunun icin eclipse de Dynamic Web Project olusturuyoruz.


Ayarlari bu sekilde yaptiktan sonra Configuration kismi icin Modify diyoruz. Ve gelen ekrandan Java Server Faces kismini secili hale getiriyoruz.



Daha sonra Next diyerek devam ediyoruz. Gelen ekrandan Generate web.xml kismini da secili hale getiriyoruz.

Next kismindan User Library ekle diyerek majorra adinda bir library olusturup icine gerekli jarlarimizi ekliyoruz.



Ve Finish diyerek projemizi olusturmus oluyoruz.

H2 database de Person adinda bir tablo olusturuyoruz. Bunun icin su query i kullanalim:

CREATE TABLE Person ( personid int NOT NULL, name varchar(100) NOT NULL, lastname varchar(100) NOT NULL, age int NOT NULL, nationality varchar(100) NOT NULL, PRIMARY KEY(personid))

Burada ise proje structure yer aliyor.

Projem calistiginda ekranim ise su sekilde oluyor.


Projenin kodlari burada yer almaktadir. https://github.com/geallen/javaHibernate

18 Ağustos 2017 Cuma

Php sonuclarini html de gosterme

Mysql ile olusturdugum veritabanindaki kayitlari php cekiyorum. Bunlari android de kullanacagim. Hem bu verileri debug etmek hem de denemek amaciyla sonuclari html de gostermek istedim.

Wamp serverimin www klasorunde loginform01 diye bir klasor olusturdum ve gerekli dosyalari oraya koydum. Simdi ise bana gerekli olan iki dosyayi gosterecegim. ilki init.php. burada veritabani baglantisini olusturuyoruz. Digeri ise xx.php burda da veritabanindaki kayitlari sirasiyla cekiyorum.

init.php

<?php
$host = "localhost";
$db_user = "root";
$db_password = "";
$db_name = "example_test";

$con  = mysqli_connect($host, $db_user, $db_password, $db_name);

if($con){
echo "Connection success ...";
}else{
echo "Connection failed ...";
}

?>


xx.php

<?php
require "init.php";
$sql = "select uname from user";
$result = mysqli_query($con, $sql);
    while ($row = mysqli_fetch_array($result)) {
        ?>
            <div>
 
<p><?php echo $row['fcm_token'] ?></p>
            </div>
        <?php
    }
?>


Bu sekilde veritabanindaki kayitlari ekranda paragraf olarak gostermis oluyoruz.

8 Ağustos 2017 Salı

ANDROID - FIREBASE UPDATE OPERATION

I want to update my record in my firebase database table. I will update order cost as 10 which has primary key as: "20170807192734".




Here is the query I should write to update:



final FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference dbRef = firebaseDatabase.getReference("orders");
String primaryKey = "20170807192734";
dbRef.child(primaryKey).child("cost").setValue("10");


Firebase veritabanimdaki orders tablosundaki "20170807192734" primary key e sahip olan kayitin costunu 10 olarak guncellemek istersem yazmam gereken kodlar yukaridaki gibi olmalidir.

6 Ağustos 2017 Pazar

ANDROID - FIREBASE KULLANIMI

Android uygulamalarimizda veritabani islemleri icin ve bircok islem icin (ornegin bildirim) Firebase kullanabiliriz.

bu uygulamada firebase i uygulamama ekledim. Veritabanina iki tane tablo ekledim. Users ve siparis olmak uzere 2 tablo. bu iki tabloya kayit ekleme ve user tablosundaki kayitlari cekerek list view de gosterme isini yaptim. kodlar github hesabimda yer almaktadir.


20 Temmuz 2017 Perşembe

JAVA VERİTABANI BAĞLANTISI - SQL SERVER

Java ile veritabanindan veri listeleme islemi yapacagiz. Bunun icin oncelikle JDBC drivera ihtiyacimiz var. Buradan indirebilirsiniz. .exe uzantili olan linki indirip unzipliyoruz. Daha sonra uygun jar file i kullanabiliriz. Ben sqljdbc4.jar i kullandim.

Eclipse de yeni bir proje olusturup sag tiklayarak -> Properties -> Java Build Path kisminda add external jar diyerek indirdigimiz jar i projemize dahil ediyoruz.

Simdi classimizi olusturup kod kismina gecelim.


import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

public class Dbop {

 public static void main(String args[]){
  try{
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
   System.out.println("Driver loaded");
   
   String server= "localhost\\sqlexpress";
   int port = 1433;
   String user= "TestUser";
   String pass = "123456";
   String db = "ExampleDb";
   
   String jbcUrl = "jdbc:sqlserver://"+ server+ ":"+port+";user="+user+"; password="+pass +"; databaseName="+db+"";
   
   Connection con = DriverManager.getConnection(jbcUrl);
   System.out.println("connection obtained");
   
   Statement stmt = con.createStatement();
   System.out.println("Statement created");
   
   ResultSet rs = stmt.executeQuery("Select Username, Phone from [User]");
   System.out.println("Query executed");
   
   while(rs.next()){
    System.out.println("Username "+ rs.getString(1) + " Phone "+ rs.getString(2));
   }
   rs.close();
   stmt.close();
   con.close();
   
   System.out.println("Resource released");
   
  }catch(Exception ex){
   System.out.println("Error: " + ex);
  }
  
 }
}



ResultSet sonuclari indeks 1 den baslar. O yuzden Username i gostermek icin getString(1) i kullandik. Istersek indeks yerine sutun adini da yazarak verilere ulasabiliriz.

rs.getString("Username") seklinde.

Outputum su sekilde olacak:


Driver loaded
connection obtained
Statement created
Query executed
Username Mary Phone 05348784250
Username John Phone 05987545123
Username Joe Phone 23654178925
Username Peter Phone 78963254101
Resource released



Yararlandigim kaynak burdadir.