Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions .idea/jarRepositories.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

43 changes: 34 additions & 9 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,40 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.zipcoder.lab</groupId>
<artifactId>jdbcdao</artifactId>
<groupId>org.example</groupId>
<artifactId>intro-to-jdbc</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
44 changes: 44 additions & 0 deletions src/main/java/MainApplication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import com.mysql.cj.jdbc.Driver;
import daos.Engine;
import daos.PhoneRepository;
import models.Phone;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.StringJoiner;

/**
* @author git-leon
* @version 1.0.0
* @date 8/2/21 9:49 AM
*/
public class MainApplication {

public static void main(String[] args) {
Engine engine = new Engine();
engine.registerJDBCDriver();
Connection mysqlDbConnection = engine.getConnection("mysql");
PhoneRepository phoneRepository = new PhoneRepository(mysqlDbConnection);
engine.executeStatement(mysqlDbConnection, "DROP DATABASE IF EXISTS walmart;");
engine.executeStatement(mysqlDbConnection, "CREATE DATABASE IF NOT EXISTS walmart;");
engine.executeStatement(mysqlDbConnection, "USE walmart;");
engine.executeStatement(mysqlDbConnection, new StringBuilder()
.append("CREATE TABLE IF NOT EXISTS walmart.phone(")
.append("id int auto_increment primary key,")
.append("name text not null,")
.append("color varchar(30) not null,")
.append("carrier varchar(30),")
.append("cameras int,")
.append("price int not null);")
.toString());

phoneRepository.create(new Phone(20, "ePhone", "'blue'", "'sprint'",3, 425.0));
phoneRepository.create(new Phone(21, "strawberry", "'red'", "'tmobile'", 3, 599.0));
System.out.println(phoneRepository.readAll());

}
}
89 changes: 89 additions & 0 deletions src/main/java/daos/Engine.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package daos;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;
import java.util.StringJoiner;

public class Engine {

public Engine() {
}

public void registerJDBCDriver() {
// Attempt to register JDBC Driver
try {
DriverManager.registerDriver(Driver.class.newInstance());
} catch (InstantiationException | IllegalAccessException | SQLException e1) {
throw new RuntimeException(e1);
}
}

public Connection getConnection(String dbVendor) {
String username = "nathan";
String password = "greenLeaf1";
String url = new StringBuilder()
.append("jdbc:")
.append(dbVendor)
.append("://127.0.0.1/")
.append("?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC")
.toString();
try {
return DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
throw new Error(e);
}
}

static Statement getScrollableStatement(Connection connection) {
int resultSetType = ResultSet.TYPE_SCROLL_INSENSITIVE;
int resultSetConcurrency = ResultSet.CONCUR_READ_ONLY;
try { // scrollable statements can be iterated more than once without closing
return connection.createStatement(resultSetType, resultSetConcurrency);
} catch (SQLException e) {
throw new Error(e);
}
}

public void executeStatement(Connection connection, String sqlStatement) {
try {
Statement statement = getScrollableStatement(connection);
statement.execute(sqlStatement);
} catch (SQLException e) {
throw new Error(e);
}
}

static void printResults(ResultSet resultSet) {
try {
for (int rowNumber = 0; resultSet.next(); rowNumber++) {
String firstColumnData = resultSet.getString(1);
String secondColumnData = resultSet.getString(2);
String thirdColumnData = resultSet.getString(3);
String forthColumnData = resultSet.getString(4);
String fifthColumnData = resultSet.getString(5);
String sixthColumnData = resultSet.getString(6);
System.out.println(new StringJoiner("\n")
.add("Row number = " + rowNumber)
.add("First Column = " + firstColumnData)
.add("Second Column = " + secondColumnData)
.add("Third column = " + thirdColumnData)
.add("Forth column = " + forthColumnData)
.add("Fifth column = " + fifthColumnData)
.add("Sixth column = " + sixthColumnData));
}
} catch (SQLException e) {
throw new Error(e);
}
}

public ResultSet executeQuery(Connection connection, String sqlQuery) {
try {
Statement statement = getScrollableStatement(connection);
return statement.executeQuery(sqlQuery);
} catch (SQLException e) {
throw new Error(e);
}
}

}
96 changes: 96 additions & 0 deletions src/main/java/daos/PhoneRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package daos;

import models.Phone;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
* @author git-leon
* @version 1.0.0
* @date 8/4/21 3:05 PM
*/
public class PhoneRepository implements Repo {
private Connection connection;

public PhoneRepository(Connection connection) {
this.connection = connection;
}

@Override
public Connection getConnection() {
return connection;
}

public void create(Phone phone) {
executeStatement(String.format(new StringBuilder()
.append("INSERT INTO walmart.phone(")
.append("id, name, color, carrier, cameras, price)")
.append("VALUES (%s, '%s', %s, %s, %s, %s);")
.toString(),
phone.getId(),
phone.getName(),
phone.getColor(),
phone.getCarrier(),
phone.getCameras(),
phone.getPrice()));
}

public List<Phone> readAll() {
ResultSet resultSet = executeQuery("SELECT * FROM walmart.phone;");
List<Phone> list = new ArrayList<>();
try {
while (resultSet.next()) {
String id = resultSet.getString(1);
String name = resultSet.getString(2);
String color = resultSet.getString(3);
String carrier = resultSet.getString(4);
Integer cameras = resultSet.getInt(5);
Double price = resultSet.getDouble(6);
list.add(new Phone(
Integer.parseInt(id),
name,
color,
carrier,
cameras,
price));
}
} catch (SQLException throwables) {
throw new RuntimeException(throwables);
}
return list;
}

public Phone read(Integer phoneId) {
return readAll()
.stream()
.filter(phone -> phone.getId() == phoneId)
.findAny()
.get();
}

public void update(Integer id, Phone newPhone) {
executeStatement(new StringBuilder()
.append("UPDATE phone SET ")
.append("name = '" + newPhone.getName() + "'")
.append(", color = " + newPhone.getColor())
.append(", carrier = " + newPhone.getCarrier())
.append(", cameras = " + newPhone.getCameras().toString())
.append(", price = " + newPhone.getPrice().toString())
.append("WHERE id =" + id.toString()).toString());
}

public void delete(Integer id) {
executeStatement("DELETE FROM phone WHERE id = " + id.toString());
}

public void delete(Phone phone) {
executeStatement("DELETE FROM phone WHERE id = " + phone.getId().toString());
}



}
45 changes: 45 additions & 0 deletions src/main/java/daos/Repo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package daos;

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

/**
* @author git-leon
* @version 1.0.0
* @date 8/4/21 3:15 PM
*/
public interface Repo {
default void executeStatement(String sqlStatement) {
try {
Statement statement = getScrollableStatement();
statement.execute(sqlStatement);
} catch (SQLException e) {
throw new Error(e);
}
}

default Statement getScrollableStatement() {
int resultSetType = ResultSet.TYPE_SCROLL_INSENSITIVE;
int resultSetConcurrency = ResultSet.CONCUR_READ_ONLY;
try { // scrollable statements can be iterated more than once without closing
return getConnection().createStatement(resultSetType, resultSetConcurrency);
} catch (SQLException e) {
throw new Error(e);
}
}

default ResultSet executeQuery(String sqlQuery) {
try {
Statement statement = getScrollableStatement();
return statement.executeQuery(sqlQuery);
} catch (SQLException e) {
throw new Error(e);
}
}

Connection getConnection();
}


Loading