1-)Kodumuzu geliştirmeye başlamadan sql server configuration managera gelerek tcp/ip ve tcpport ayarlarımızı kontrol ediyoruz.Ayarlarda bir değişiklik yaptık isek geçerli olması için sql serverın servisini stop start etmemiz gerekiyor.
2-)Microsoft Sql servera maven central üstünden dependency olarak mssql-jdbcyi eklemek için pom.xmlemize aşağıdaki satırları ekliyoruz
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.2.1.jre11</version>
</dependency>
3-)String connectionUrl =“jdbc:sqlserver://DESKTOP-myinstance\\SQLEXPRESS;databaseName=AddressBook;integratedSecurity=true;portNumber=1433″; integratedSecurity şeklinde bir bağlantı yapmak isterseniz aşağıdaki ayarları yapmamız gerekmektedir aksi takdirde driver konfigürasyonu yok hatası alırsınız
This driver is not configured for integrated authentication. ClientConnectionId:3070320f-113f-4ffc-a526-444abeba90a2
https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017 sitesinden kullandığınız jreye göre driverı download edin indirdiğiniz zipin içindeki sqljdbc_auth.dll bu dlli uygulamanızın calıştıgı java pathindeki C:\java\jdk-11.0.2\bin jrenin bini içine kopyalayın(64 bit veya 32 bit olarak calısma mantığına göre ilgili dlli bin altına kopyalamanız gerekecektir.)
4-)Eğer springboot kullanıyorsak applicationproperties tanımlarında default olarak belirteceksek aşağıdaki örnekteki gibi driverClassName ve urli ayrıca verebiliyoruz.
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://DESKTOP-myinstance\SQLEXPRESS;databaseName=AddressBook;integratedSecurity=true;portNumber=1433
5-)Temel olarak connectionı yarattıktan sonra ExecuteQuery diyerek sorgumuzu çalıştırıp dönen değeri bir resulsete alıyoruz.Aşağıdaki örnek java ile sadece jdbc kullanarak sqlservera bağlanıp sonuçları ceken örnek bir kod bloğudur.
public static void ConnectSqlServerWithPureJDBC()
{
String connectionUrl =“jdbc:sqlserver://DESKTOP-myinstance\\SQLEXPRESS;databaseName=AddressBook;integratedSecurity=true;portNumber=1433″;
try (Connection connection = DriverManager.getConnection(connectionUrl);) {
Statement stmt = connection.createStatement();
String SQL = “SELECT * FROM PersonTable”;
ResultSet rs = stmt.executeQuery(SQL);
while (rs.next()) {
System.out.println(rs.getString(“Name”) + ” ” + rs.getString(“Surname”));
}
// Code here.
String a=“”;
}
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
}
}
6-)Peki Spring JDBC nedir?Temel olarak jdbc kullanan ama üstüne bir katman daha eklenerek jdbcde kodla yapılan pek cok işlemi soyutlaştırarak bize daha az kod ile daha cok iş yapabileceğimiz ,ayrıca veritabanı işlemlerimizi daha kolay ve nesneye dayalı proglama şeklinde yapmamızı olanak sağlayan bir frameworktür
https://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/jdbc.html
SpringJDBCnin bizim için temel olarka yapabildiği işlemler örneği
7-)öncelikle pom.xmlimize spring-jdbc yide dependecy olarak ekleyelim
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>LATEST</version>
</dependency>
Select işlemlerimiz için JdbcTemplate bloğunu kullanabiliriz burada RowMapper mantığı yardımı ile işlemlerimizi nesneye dayalaı modelleme şeklinde getirebiliriz
public static void ConnectandSelectSpringJDBC()
{
String connectionUrl =“jdbc:sqlserver://DESKTOP-myinstance\\SQLEXPRESS;databaseName=AddressBook;integratedSecurity=true;portNumber=1433″;
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
dataSource.setUrl(connectionUrl);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String query = “SELECT * FROM PersonTable WHERE ID = ?”;
Person person = jdbcTemplate.queryForObject(
query,new Object[] { 1 }, new PersonRowMapper());
System.out.println(person.getName());
}
public class PersonRowMapper implements RowMapper<Person> {
@Override
public Person mapRow(ResultSet resultSet, int i) throws SQLException {
Person p = new Person();
p.setID(resultSet.getInt(“ID”));
p.setName(resultSet.getString(“Name”));
p.setSurname(resultSet.getString(“Surname”));
return p;
}
}
SimpleJdbcInsert ile insert işlemlerizi kolayca yapabiliyoruz ,eğer ID alanı otomatik artan bir değer ise dönüş değerinide usingGeneratedKeyColumns(“ID”); işaretleyerek simpleJdbcInsert.executeAndReturnKey kolayca alabiliyoruz
public static void InsertSpringJDBC()
{
String connectionUrl =“jdbc:sqlserver://DESKTOP-myinstance\\SQLEXPRESS;databaseName=AddressBook;integratedSecurity=true;portNumber=1433″;
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
dataSource.setUrl(connectionUrl);
SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(dataSource)
.withTableName(“PersonTable”)
.usingGeneratedKeyColumns(“ID”);
Map<String, Object> parameters = new HashMap<String, Object>();
// parameters.put(“ID”, 5);
parameters.put(“Name”, “Ali”);
parameters.put(“Surname”, “Güven”);
Number id = simpleJdbcInsert.executeAndReturnKey(parameters);
System.out.println(“Generated id – ” + id.longValue());
}
9-)SimpleJdbcCall ile de storedprocedure örneklerini springjdbc metolodojisinde kullanabiliyoruz
10-)update işlemleri için ise JdbcTemplatein update özelliğini kullanabiliriz
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update(“update PersonTable set name = ? where ID = ?”,
new Object[] {“Ali Veli “, 1002});
11-)delete işlemleri için yine jdbctemplatein update fonksiyonelitisi kullanabiliyoruz
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update(“delete PersonTable where ID = ?”,
1002);
12-) NamedParameterJdbcTemplate ile parametre isimlerinide belirleyerek daha kontrollü sorgularda oluşturabiliriz,dikkat edilmesi gereken nokta sorgu parametreleri : nokta ile belirtmektir.
String connectionUrl =“jdbc:sqlserver://DESKTOP-myinstance\\SQLEXPRESS;databaseName=AddressBook;integratedSecurity=true;portNumber=1433″;
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
dataSource.setUrl(connectionUrl);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
// jdbcTemplate.update(“delete PersonTable where ID = ?”,1002);
NamedParameterJdbcTemplate namedTemplate=new NamedParameterJdbcTemplate(jdbcTemplate);
Map namedParameters = new HashMap();
namedParameters.put(“ID”, 1003);
namedTemplate.update(“delete PersonTable where ID = :ID”,namedParameters);