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.

42 changes: 33 additions & 9 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,39 @@
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>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
<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>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.0-rc1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0-rc1</version>
</dependency>
</dependencies>
</project>
106 changes: 106 additions & 0 deletions src/main/java/daos/CarRepo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package daos;

import models.Car;

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 CarRepo implements Repo {
private Connection connection;

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

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

public void create(Car car) {
executeStatement(String.format(new StringBuilder()
.append("INSERT INTO daolab.vehicle(")
.append("primaryId, make, model, color, vtype, mpg) ")
.append("VALUES (%s, '%s', '%s', '%s', '%s', %s);")
.toString(),
car.getId(),
car.getMake(),
car.getModel(),
car.getColor(),
car.getvType(),
car.getMpg()));
}

public List<Car> readAll() {
ResultSet resultSet = executeQuery("SELECT * FROM daolab.vehicle;");
List<Car> list = new ArrayList<>();
try {
while (resultSet.next()) {
String id = resultSet.getString(1);
String make = resultSet.getString(2);
String model = resultSet.getString(3);
String color = resultSet.getString(4);
String vtype = resultSet.getString(5);
String mpg = resultSet.getString(6);
list.add(new Car(
Long.parseLong(id),
make,
model,
color,
vtype,
Integer.parseInt(mpg)));
}
} catch (SQLException throwables) {
throw new RuntimeException(throwables);
}
return list;
}

public Car read(Long primaryId) {
return readAll()
.stream()
.filter(car -> car.getId().equals(primaryId))
.findAny()
.get();
}

public void update(Long id, Car newCarData) {
executeStatement(String.format(new StringBuilder()
.append("UPDATE vehicle SET make= '%s',")
.append("model = '%s',")
.append("color = '%s',")
.append("vtype = '%s',")
.append("mpg = %s ")
.append("WHERE primaryId = %s;")
.toString(),

newCarData.getMake(),
newCarData.getModel(),
newCarData.getColor(),
newCarData.getvType(),
newCarData.getMpg(),
id));
}

public void delete(Long id) {
executeStatement(String.format(new StringBuilder()
.append("DELETE FROM vehicle ")
.append("WHERE primaryId = %s;")
.toString(),
id
));
}

public void delete(Car car) {
delete(car.getId());
}

}
Empty file removed src/main/java/daos/DELETEME.txt
Empty file.
116 changes: 116 additions & 0 deletions src/main/java/daos/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package daos;

import com.mysql.cj.jdbc.Driver;
import models.Car;

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
*/
class MainApplication {

public static void main(String[] args) {
registerJDBCDriver();
Connection mysqlDbConnection = getConnection("mysql");
CarRepo carRepo = new CarRepo(mysqlDbConnection);
executeStatement(mysqlDbConnection, "DROP DATABASE IF EXISTS daolab;");
executeStatement(mysqlDbConnection, "CREATE DATABASE IF NOT EXISTS daolab;");
executeStatement(mysqlDbConnection, "USE daolab;");
executeStatement(mysqlDbConnection, new StringBuilder()
.append("CREATE TABLE IF NOT EXISTS daolab.vehicle(")
.append("primaryId int auto_increment primary key,")
.append("make text not null,")
.append("model text not null,")
.append("color text not null,")
.append("vtype text not null,")
.append("mpg int not null);")
.toString());

Car car = new Car(12L, "Nissan", "Maxima", "Charcoal", "Car", 40 );
carRepo.create(car);
carRepo.create(new Car(13L, "Ford", "F150", "Blue", "Truck", 22 ));
carRepo.update(12L, new Car("Ford", "F150", "Blue", "Truck", 10 ));
carRepo.delete(car);
System.out.println(carRepo.readAll());

}

static ResultSet executeQuery(Connection connection, String sqlQuery) {
try {
Statement statement = getScrollableStatement(connection);
return statement.executeQuery(sqlQuery);
} 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);
System.out.println(new StringJoiner("\n")
.add("Row number = " + rowNumber)
.add("First Column = " + firstColumnData)
.add("Second Column = " + secondColumnData)
.add("Third column = " + thirdColumnData));
}
} catch (SQLException e) {
throw new Error(e);
}
}

static void executeStatement(Connection connection, String sqlStatement) {
try {
Statement statement = getScrollableStatement(connection);
statement.execute(sqlStatement);
} 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);
}
}

static Connection getConnection(String dbVendor) {
String username = "carl";
String password = "carlpass";
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 void registerJDBCDriver() {
// Attempt to register JDBC Driver
try {
DriverManager.registerDriver(Driver.class.newInstance());
} catch (InstantiationException | IllegalAccessException | SQLException e1) {
throw new RuntimeException(e1);
}
}

}
43 changes: 43 additions & 0 deletions src/main/java/daos/Repo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
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