SlideShare a Scribd company logo
Create a JAVA program that performs file IO and database interaction via SQL. The program
needs to read data from the provided file: "Project.csv" and insert the data into a database. Then
the program needs to create a report from the database sorted by price descending. The report
should be in the format demonstrated below.
id (primary key - generated by the database)
cpuname
performance
price
Project.csv contents:CPU NamePerformancePrice (USD)Intel Core i7-3770K @
3.50GHz9,556$560.50Intel Core i7-3770 @ 3.40GHz9,327$335.55Intel Core i7-3820 @
3.60GHz8,990$404.38AMD FX-8350 Eight-Core8,940$149.99Intel Core i7-2600K @
3.40GHz8,501$379.97Intel Core i7-2600 @ 3.40GHz8,242$214.99Intel Core i7-4720HQ @
2.60GHz8,046NAAMD FX-8320 Eight-Core8,008$145.99Intel Core i7-6700HQ @
2.60GHz7,997$1509Intel Core i7-4710HQ @ 2.50GHz7,826NAIntel Core i5-6600K @
3.50GHz7,762$239.99Intel Core i7-4700HQ @ 2.40GHz7,754$383.00Intel Core i7-4700MQ
@ 2.40GHz7,736$467.40Intel Core i5-4690K @ 3.50GHz7,690$239.99AMD FX-8150 Eight-
Core7,619$165.99Intel Core i7-3630QM @ 2.40GHz7,604$304.49Intel Core i5-4670K @
3.40GHz7,598$249.99Intel Core i5-4690 @ 3.50GHz7,542$224.99Intel Core i7-3610QM @
2.30GHz7,460$399.99Intel Core i5-4670 @ 3.40GHz7,342$226.99Intel Core i5-4590 @
3.30GHz7,174$199.99Intel Core i7-4702MQ @ 2.20GHz7,146NAIntel Core i5-3570K @
3.40GHz7,130$477.23
Solution
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
public class Main
{
/**
* This the main function that runs at the start
* param args - input arguments from the command line
*/
static public void main(String[] args)
{
CPUList cpuList = new CPUList(); //The CPUList used to retrieve data from the
fiile and store in the db
CPUList cpuListRetrieved = new CPUList(); //The CPUList used to retrieve data from the
database
CpuDb cpuDb = new CpuDb(); //The database object used to move data to and
from the CPU Lists
try
{
//Read in the file and store each line into the CPU objects in a list
Files.lines(Paths.get("Project04Data.csv"))
.map(line -> line.split("  ")) // Stream
.flatMap(Arrays::stream) // Stream
.forEach(line -> cpuList.AddCpu(line));
//Clear the list table for the new listing
cpuDb.Clear();
//Insert the Cpu List into the database
cpuDb.SetCpuList(cpuList);
//Retrieve the Cpu List into a different CPU List object from the database
cpuDb.GetCpuList(cpuListRetrieved);
//Show the report from the new list that was retrieved from the database
cpuListRetrieved.ShowReport();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
CPUList.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
public class CPUList
{
ArrayList theList = new ArrayList<>();
/**
* Default constructor for the CPU
*/
public void CPUList()
{
}
/**
* param strInputLine Input line to be used in creating the CPU object
*/
public void AddCpu(String strInputLine)
{
theList.add(new CPU(strInputLine));
}
/**
* param tempCPU - A CPU object to add to the list
*/
public void AddCpu(CPU tempCPU)
{
theList.add(tempCPU);
}
/**
* return the combined string showing the CPU list
*/
public String toString()
{
String strString = "";
for (CPU cpu : theList)
{
strString += cpu;
}
return(strString);
}
/**
* Print the CPU List Statistics
* average price of CPU's
* highest priced CPU
* lowest priced CPU
* best value CPU (performance / price )*
*/
public void PrintStatistics()
{
System.out.printf("average price CPU: %5.2f ",
theList.stream().mapToDouble(CPU::getPrice).average().getAsDouble());
System.out.printf("highest price CPU: %5.2f ",
theList.stream().mapToDouble(CPU::getPrice).max().getAsDouble());
System.out.printf("lowest price CPU: %5.2f ",
theList.stream().mapToDouble(CPU::getPrice).min().getAsDouble());
System.out.println("Best Value CPU: " + Collections.max( theList, new
CpuComparator() ).getCpuName());
}
/**
*Create the report from the database table with the following format
*
* Intel Core i7-6700HQ 2.60GHz: $1,509.00
* Intel Core i7-3770K 3.50GHz: $560.50
* Intel Core i5-3570K 3.40GHz: $477.23
* Intel Core i7-4700MQ 2.40GHz: $467.40
*/
public void ShowReport()
{
for(CPU objCpu : theList)
{
System.out.printf("%s: %5.2f ", objCpu.getCpuName(), objCpu.getPrice());
}
}
/**
* Remove the CPU objects that do not have all of the required values parsed out of the line
*/
public void CleanCpuList()
{
Iterator it = theList.iterator();
while( it.hasNext() )
{
CPU objCpu = it.next();
if(objCpu.getValid() == false)
{
it.remove();
}
}
}
}
CPU.java
public class CPU
{
private boolean m_bValid;
private String m_strCPULine;
private String m_strCPUName;
private double m_dPerformance;
private double m_dPrice;
private double m_dValue; //Performance / Price
private static final double NA_VALUE = 9999.99;
/**
* param strCPULine is the CPU line from the file
*/
public CPU(String strCPULine)
{
m_strCPULine = strCPULine;
m_bValid = ParseCPULine(strCPULine);
}
/**
* Constructor to be used when the fields are already known
* param strCPUName - name of the CPU
* param iPerformance - performance factor of the CPU
* param dPrice - price of the CPU
*/
public CPU(String strCPUName, int iPerformance, double dPrice)
{
m_strCPUName = strCPUName;
m_dPerformance = (double)iPerformance;
m_dPrice = dPrice;
m_dValue = m_dPerformance / m_dPrice; //Performance / Price
m_bValid = true;
}
/**
* param m_strCPULine - the input file line to be parsed
* return Indicate if the ParseCPULin succeeded or not
*/
private boolean ParseCPULine(String m_strCPULine)
{
boolean bRetValue = true;
String strTemp;
String strNumeric;
//Use a regular expression to parse the line into the individual members
//TODO - Figure out why regex not working for 1,509.00
//messes up on the comma in the value
String[] tokens = m_strCPULine.split(",(?=([^"]*"[^"]*")*[^"]*$)");
//http://rubular.com/ is helpful for regex
//Do we have the correct number of tokens from the split. If not then mark as invalid
if(tokens.length != 3)
{
bRetValue = false;
}
m_strCPUName = tokens[0];
//Get the performance
try
{
strTemp = tokens[1];
strNumeric = strTemp.replaceAll("[^0-9.]+", ""); //Get rid of non digit characters
m_dPerformance = Double.parseDouble(strNumeric);
}
catch(NumberFormatException ex)
{
m_dPerformance = NA_VALUE;
bRetValue = false;
}
//Get the price
try
{
strTemp = tokens[2];
strNumeric = strTemp.replaceAll("[^0-9.]+", ""); //Get rid of non digit characters
m_dPrice = Double.parseDouble(strNumeric);
}
catch(NumberFormatException ex)
{
m_dPrice = NA_VALUE; //Bogus Value
bRetValue = false;
}
//If we have valid Performance and Price values then return the calculated value otherwise
set to zero
if(bRetValue)
{
m_dValue = m_dPerformance / m_dPrice;
}
else
{
m_dValue = 0.0;
}
// for(String strTemp1 : tokens)
// {
// System.out.printf("%st", strTemp1);
// }
//
// System.out.printf(" ");
return bRetValue;
}
/**
* return A string representing the CPU
*/
public String toString()
{
return String.format("[%b]t%stt[%5.2f]t[%5.2f] ", m_bValid, m_strCPUName,
m_dPerformance, m_dPrice);
//return String.format("%s ", m_strCPULine); //Just return the original line
}
/**
* Getter
* return the performance as an double
*/
public double getPerformance(){return(m_dPerformance);};
/**
* Getter
* return the price as a double
*/
public double getPrice(){return(m_dPrice);};
/**
* Getter
* return the value as a double
*/
public double getValue(){return(m_dValue);};
/**
* Getter
* return the CPU Name
*/
public String getCpuName(){return(m_strCPUName);};
/**
* return if the cpu's line was parsed with all valid values for the fields or not
*/
public boolean getValid(){return(m_bValid);};
}
CPUDb.java
import java.sql.*;
public class CpuDb
{
//SQL objects
Connection c = null;
boolean bConnected = false;
/**
* Default constructor
*/
public CpuDb()
{
bConnected = Connect("cpudb", "tcc2016", "tcc2016");
}
/**
* param strTable - table for which the column names will be shown
*/
public void ShowColumns(String strTable)
{
Statement s = null;
ResultSet r = null;
try
{
s = c.createStatement();
r = s.executeQuery("SELECT * from " + strTable);
ResultSetMetaData m = r.getMetaData();
int col = m.getColumnCount();
for (int i = 1; i <= col; i++)
{
System.out.printf("%stt", m.getColumnName(i));
}
System.out.println();
}
catch ( SQLException e)
{
e.printStackTrace();
}
}
/**
* Connect to the database
* param strDatabase - database name
* param strUser - database user
* param strPassword - user password
* return true if the connection is made
*/
private boolean Connect(String strDatabase, String strUser, String strPassword)
{
boolean bConnectStatus = false;
try
{
//Had to suppress a SSL warning message that kept popping up
c = DriverManager.getConnection("jdbc:mysql://localhost/" + strDatabase +
"?autoReconnect=true&useSSL=false", strUser, strPassword);
System.out.println("Database connection made ");
bConnectStatus = true;
}
catch ( SQLException e)
{
e.printStackTrace();
}
return(bConnectStatus);
}
/**
* Provide the insert into the database of the CPU list
* param lstCpu - list of CPUs to insert
* return true if the setting of the db via inserts succeeded
*/
public boolean SetCpuList(CPUList lstCpu)
{
boolean retValue = false;
Statement s = null;
String strSql;
ResultSet r = null;
try
{
s = c.createStatement();
//"insert into cputable( cpuname, performance, price) values( 'CPU1', 123, 55.66)"
for(CPU objCPU : lstCpu.theList)
{
//Only insert if valid
if(objCPU.getValid() == true)
{
//Create the CPU
strSql = "insert into cputable( cpuname, performance, price) values('"
+ objCPU.getCpuName() + "',"
+ objCPU.getPerformance() + ","
+ objCPU.getPrice() + ")";
//System.out.println(strSql);
s.execute(strSql);
}
}
}
catch ( SQLException e)
{
e.printStackTrace();
}
return (retValue);
}
/**
* Get the CPU list from the the database and return the list
* param lstCpu - list of CPUs in the database
* return indicates if the loading of the cpu list from the database succeeded or not
*/
public boolean GetCpuList(CPUList lstCpu)
{
boolean retValue = false;
Statement s = null;
ResultSet r = null;
try
{
//Get the statement object connected to the database
s = c.createStatement();
//Get all of the fields from the cpu table
r = s.executeQuery("SELECT * from cputable order by price DESC");
//Get the results set for the query
ResultSetMetaData m = r.getMetaData();
//Iterate through the record set and add to the CPU list
while( r.next() ){
lstCpu.AddCpu(new CPU(r.getString( "cpuname" ),r.getInt( "performance"
),r.getFloat( "price" )));
}
// //How many columns do we have
// int col = m.getColumnCount();
//
// //Show all of the data in the results set
// while( r.next() ){
// for( int i = 1; i <= col; i++ ){
// int t = m.getColumnType( i );
// switch( t ){
// case Types.INTEGER:
// System.out.print( r.getInt( i ) );
// break;
// case Types.VARCHAR:
// System.out.print( r.getString( i ) );
// break;
// case Types.DATE:
// System.out.print( r.getDate( i ) );
// break;
// case Types.FLOAT:
// System.out.print( r.getFloat( i ) );
// break;
// default:
// System.out.print("Unk("+ r.getType() + ")");
// break;
// }
// System.out.print( ";" );
// }
// System.out.println();
// }
retValue = true;
}
catch ( SQLException e)
{
e.printStackTrace();
}
return (retValue);
}
/**
* Clear the data out of the database
* return if the table was cleared or not
*/
public boolean Clear()
{
boolean retValue = false;
Statement s = null;
ResultSet r = null;
try
{
//Get the statement object connected to the database
s = c.createStatement();
//Get all of the fields from the cpu table
s.execute("delete from cputable");
}
catch ( SQLException e)
{
e.printStackTrace();
}
return (retValue);
}
}
Project04Data.csv
CPU Name,Performance,Price (USD)
Intel Core i7-3770K @ 3.50GHz,"9,556",$560.50
Intel Core i7-3770 @ 3.40GHz,"9,327",$335.55
Intel Core i7-3820 @ 3.60GHz,"8,990",$404.38
AMD FX-8350 Eight-Core,"8,940",$149.99
Intel Core i7-2600K @ 3.40GHz,"8,501",$379.97
Intel Core i7-2600 @ 3.40GHz,"8,242",$214.99
Intel Core i7-4720HQ @ 2.60GHz,"8,046",NA
AMD FX-8320 Eight-Core,"8,008",$145.99
Intel Core i7-6700HQ @ 2.60GHz,"7,997",$1,509.00
Intel Core i7-4710HQ @ 2.50GHz,"7,826",NA
Intel Core i5-6600K @ 3.50GHz,"7,762",$239.99
Intel Core i7-4700HQ @ 2.40GHz,"7,754",$383.00
Intel Core i7-4700MQ @ 2.40GHz,"7,736",$467.40
Intel Core i5-4690K @ 3.50GHz,"7,690",$239.99
AMD FX-8150 Eight-Core,"7,619",$165.99
Intel Core i7-3630QM @ 2.40GHz,"7,604",$304.49
Intel Core i5-4670K @ 3.40GHz,"7,598",$249.99
Intel Core i5-4690 @ 3.50GHz,"7,542",$224.99
Intel Core i7-3610QM @ 2.30GHz,"7,460",$399.99
Intel Core i5-4670 @ 3.40GHz,"7,342",$226.99
Intel Core i5-4590 @ 3.30GHz,"7,174",$199.99
Intel Core i7-4702MQ @ 2.20GHz,"7,146",NA
Intel Core i5-3570K @ 3.40GHz,"7,130",$477.23
CpuComparator.java
import java.util.Comparator;
public class CpuComparator implements Comparator< CPU >
{
/**
* Compare function to return which cpu has better performance
* @param c1 - first cpu object
* @param c2 - second cpu object
* @return
*/
public int compare(CPU c1, CPU c2 )
{
double c1Value = c1.getValue();
double c2Value = c2.getValue();
return (int)(c1Value - c2Value);
}
}

More Related Content

Similar to Create a JAVA program that performs file IO and database interaction.pdf (20)

PPT
flash-backedVMDB
sushanth tiruvaipati
 
PDF
Column and hadoop
Alex Jiang
 
PPTX
HBase_-_data_operaet le opérations de calciletions_final.pptx
HmadSADAQ2
 
PDF
This is the official tutorial from Oracle.httpdocs.oracle.comj.pdf
jillisacebi75827
 
DOC
Ip project
Jasmeet Singh
 
PDF
High Performance With Java
malduarte
 
DOCX
VISUALIZAR REGISTROS EN UN JTABLE
Darwin Durand
 
PDF
ARabia hossain project report.pdf
ArabiaHossain
 
PPTX
H base programming
Muthusamy Manigandan
 
DOCX
Db examples
ABDUmomo
 
PDF
Jdbc
Praveen Jaipur
 
PPTX
Hadoop Summit 2014: Query Optimization and JIT-based Vectorized Execution in ...
Gruter
 
PPTX
Apache Tajo: Query Optimization Techniques and JIT-based Vectorized Engine
DataWorks Summit
 
PDF
Hw09 Sqoop Database Import For Hadoop
Cloudera, Inc.
 
PDF
Modify this code to change the underlying data structure to .pdf
adityaenterprise32
 
PDF
Modify the project so tat records are inserted into the random acess.pdf
fcaindore
 
PDF
spring-tutorial
Arjun Shanka
 
PDF
For this lab, you will write the following filesAbstractDataCalc.pdf
alokindustries1
 
PPTX
Sql sever engine batch mode and cpu architectures
Chris Adkin
 
PPT
Chapter 2 Architecture and Classification of DBMS.ppt
ChardaneLabiste
 
flash-backedVMDB
sushanth tiruvaipati
 
Column and hadoop
Alex Jiang
 
HBase_-_data_operaet le opérations de calciletions_final.pptx
HmadSADAQ2
 
This is the official tutorial from Oracle.httpdocs.oracle.comj.pdf
jillisacebi75827
 
Ip project
Jasmeet Singh
 
High Performance With Java
malduarte
 
VISUALIZAR REGISTROS EN UN JTABLE
Darwin Durand
 
ARabia hossain project report.pdf
ArabiaHossain
 
H base programming
Muthusamy Manigandan
 
Db examples
ABDUmomo
 
Hadoop Summit 2014: Query Optimization and JIT-based Vectorized Execution in ...
Gruter
 
Apache Tajo: Query Optimization Techniques and JIT-based Vectorized Engine
DataWorks Summit
 
Hw09 Sqoop Database Import For Hadoop
Cloudera, Inc.
 
Modify this code to change the underlying data structure to .pdf
adityaenterprise32
 
Modify the project so tat records are inserted into the random acess.pdf
fcaindore
 
spring-tutorial
Arjun Shanka
 
For this lab, you will write the following filesAbstractDataCalc.pdf
alokindustries1
 
Sql sever engine batch mode and cpu architectures
Chris Adkin
 
Chapter 2 Architecture and Classification of DBMS.ppt
ChardaneLabiste
 

More from malavshah9013 (20)

PDF
gen diffuses Oxygen enters a from the blood to red blood cell. the bo.pdf
malavshah9013
 
PDF
Fill in parameters Public New Hash table (int initial Capacity, floa.pdf
malavshah9013
 
PDF
For Phantom Limb Syndrome, please describe the symptoms and the part .pdf
malavshah9013
 
PDF
Explain why the organisms that were studied by Sergei Winogradsky co.pdf
malavshah9013
 
PDF
Electron transport powers the first steps of photosynthesis. The fo.pdf
malavshah9013
 
PDF
Describe 5 key traits the lung cancer cells within the primary tumor.pdf
malavshah9013
 
PDF
Complete the ANOVA tableSourceDFSSMSBetween Groups35.pdf
malavshah9013
 
PDF
English Composition II - mutiple questions on researchQuestion 1 o.pdf
malavshah9013
 
PDF
Customers arrive at a bank tellers booth at a rate of 2 per minute.pdf
malavshah9013
 
PDF
Wolves were hunted and poisoned to extinction in Sweden and Norway b.pdf
malavshah9013
 
PDF
Describe the differences between OpenPGP, PGP and GPG.Solution.pdf
malavshah9013
 
PDF
Declaring a PointerTo define a pointer, use an asterisk, (), in t.pdf
malavshah9013
 
PDF
Who identified three key economic “advantages” that firms should hav.pdf
malavshah9013
 
PDF
Which of these is the largesta. The surface zoneb. The mixed la.pdf
malavshah9013
 
PDF
Which of the following concepts is exemplified by the story of Parus .pdf
malavshah9013
 
PDF
You will be implementing the following functions. You may modify the.pdf
malavshah9013
 
PDF
When Elvis swims with the current, he swims 18km in 2 hours. Against.pdf
malavshah9013
 
PDF
What tarsal is lateral to the medial cuneiform What tarsal is .pdf
malavshah9013
 
PDF
What is the definition of memory access timeA. The difference bet.pdf
malavshah9013
 
PDF
What are the main challenges to be dealt within a distributed operat.pdf
malavshah9013
 
gen diffuses Oxygen enters a from the blood to red blood cell. the bo.pdf
malavshah9013
 
Fill in parameters Public New Hash table (int initial Capacity, floa.pdf
malavshah9013
 
For Phantom Limb Syndrome, please describe the symptoms and the part .pdf
malavshah9013
 
Explain why the organisms that were studied by Sergei Winogradsky co.pdf
malavshah9013
 
Electron transport powers the first steps of photosynthesis. The fo.pdf
malavshah9013
 
Describe 5 key traits the lung cancer cells within the primary tumor.pdf
malavshah9013
 
Complete the ANOVA tableSourceDFSSMSBetween Groups35.pdf
malavshah9013
 
English Composition II - mutiple questions on researchQuestion 1 o.pdf
malavshah9013
 
Customers arrive at a bank tellers booth at a rate of 2 per minute.pdf
malavshah9013
 
Wolves were hunted and poisoned to extinction in Sweden and Norway b.pdf
malavshah9013
 
Describe the differences between OpenPGP, PGP and GPG.Solution.pdf
malavshah9013
 
Declaring a PointerTo define a pointer, use an asterisk, (), in t.pdf
malavshah9013
 
Who identified three key economic “advantages” that firms should hav.pdf
malavshah9013
 
Which of these is the largesta. The surface zoneb. The mixed la.pdf
malavshah9013
 
Which of the following concepts is exemplified by the story of Parus .pdf
malavshah9013
 
You will be implementing the following functions. You may modify the.pdf
malavshah9013
 
When Elvis swims with the current, he swims 18km in 2 hours. Against.pdf
malavshah9013
 
What tarsal is lateral to the medial cuneiform What tarsal is .pdf
malavshah9013
 
What is the definition of memory access timeA. The difference bet.pdf
malavshah9013
 
What are the main challenges to be dealt within a distributed operat.pdf
malavshah9013
 
Ad

Recently uploaded (20)

PDF
The Constitution Review Committee (CRC) has released an updated schedule for ...
nservice241
 
PDF
CONCURSO DE POESIA “POETUFAS – PASSOS SUAVES PELO VERSO.pdf
Colégio Santa Teresinha
 
PDF
Exploring the Different Types of Experimental Research
Thelma Villaflores
 
PPTX
SPINA BIFIDA: NURSING MANAGEMENT .pptx
PRADEEP ABOTHU
 
PPTX
Universal immunization Programme (UIP).pptx
Vishal Chanalia
 
PDF
LAW OF CONTRACT ( 5 YEAR LLB & UNITARY LLB)- MODULE-3 - LEARN THROUGH PICTURE
APARNA T SHAIL KUMAR
 
PPTX
How to Handle Salesperson Commision in Odoo 18 Sales
Celine George
 
PDF
Knee Extensor Mechanism Injuries - Orthopedic Radiologic Imaging
Sean M. Fox
 
PPTX
CATEGORIES OF NURSING PERSONNEL: HOSPITAL & COLLEGE
PRADEEP ABOTHU
 
PPT
Talk on Critical Theory, Part II, Philosophy of Social Sciences
Soraj Hongladarom
 
PDF
Stokey: A Jewish Village by Rachel Kolsky
History of Stoke Newington
 
PDF
community health nursing question paper 2.pdf
Prince kumar
 
PDF
Reconstruct, Restore, Reimagine: New Perspectives on Stoke Newington’s Histor...
History of Stoke Newington
 
PDF
ARAL-Orientation_Morning-Session_Day-11.pdf
JoelVilloso1
 
PPTX
A PPT on Alfred Lord Tennyson's Ulysses.
Beena E S
 
PDF
Generative AI: it's STILL not a robot (CIJ Summer 2025)
Paul Bradshaw
 
PDF
The-Ever-Evolving-World-of-Science (1).pdf/7TH CLASS CURIOSITY /1ST CHAPTER/B...
Sandeep Swamy
 
PPTX
How to Set Maximum Difference Odoo 18 POS
Celine George
 
PPTX
How to Create a PDF Report in Odoo 18 - Odoo Slides
Celine George
 
PPTX
Stereochemistry-Optical Isomerism in organic compoundsptx
Tarannum Nadaf-Mansuri
 
The Constitution Review Committee (CRC) has released an updated schedule for ...
nservice241
 
CONCURSO DE POESIA “POETUFAS – PASSOS SUAVES PELO VERSO.pdf
Colégio Santa Teresinha
 
Exploring the Different Types of Experimental Research
Thelma Villaflores
 
SPINA BIFIDA: NURSING MANAGEMENT .pptx
PRADEEP ABOTHU
 
Universal immunization Programme (UIP).pptx
Vishal Chanalia
 
LAW OF CONTRACT ( 5 YEAR LLB & UNITARY LLB)- MODULE-3 - LEARN THROUGH PICTURE
APARNA T SHAIL KUMAR
 
How to Handle Salesperson Commision in Odoo 18 Sales
Celine George
 
Knee Extensor Mechanism Injuries - Orthopedic Radiologic Imaging
Sean M. Fox
 
CATEGORIES OF NURSING PERSONNEL: HOSPITAL & COLLEGE
PRADEEP ABOTHU
 
Talk on Critical Theory, Part II, Philosophy of Social Sciences
Soraj Hongladarom
 
Stokey: A Jewish Village by Rachel Kolsky
History of Stoke Newington
 
community health nursing question paper 2.pdf
Prince kumar
 
Reconstruct, Restore, Reimagine: New Perspectives on Stoke Newington’s Histor...
History of Stoke Newington
 
ARAL-Orientation_Morning-Session_Day-11.pdf
JoelVilloso1
 
A PPT on Alfred Lord Tennyson's Ulysses.
Beena E S
 
Generative AI: it's STILL not a robot (CIJ Summer 2025)
Paul Bradshaw
 
The-Ever-Evolving-World-of-Science (1).pdf/7TH CLASS CURIOSITY /1ST CHAPTER/B...
Sandeep Swamy
 
How to Set Maximum Difference Odoo 18 POS
Celine George
 
How to Create a PDF Report in Odoo 18 - Odoo Slides
Celine George
 
Stereochemistry-Optical Isomerism in organic compoundsptx
Tarannum Nadaf-Mansuri
 
Ad

Create a JAVA program that performs file IO and database interaction.pdf

  • 1. Create a JAVA program that performs file IO and database interaction via SQL. The program needs to read data from the provided file: "Project.csv" and insert the data into a database. Then the program needs to create a report from the database sorted by price descending. The report should be in the format demonstrated below. id (primary key - generated by the database) cpuname performance price Project.csv contents:CPU NamePerformancePrice (USD)Intel Core i7-3770K @ 3.50GHz9,556$560.50Intel Core i7-3770 @ 3.40GHz9,327$335.55Intel Core i7-3820 @ 3.60GHz8,990$404.38AMD FX-8350 Eight-Core8,940$149.99Intel Core i7-2600K @ 3.40GHz8,501$379.97Intel Core i7-2600 @ 3.40GHz8,242$214.99Intel Core i7-4720HQ @ 2.60GHz8,046NAAMD FX-8320 Eight-Core8,008$145.99Intel Core i7-6700HQ @ 2.60GHz7,997$1509Intel Core i7-4710HQ @ 2.50GHz7,826NAIntel Core i5-6600K @ 3.50GHz7,762$239.99Intel Core i7-4700HQ @ 2.40GHz7,754$383.00Intel Core i7-4700MQ @ 2.40GHz7,736$467.40Intel Core i5-4690K @ 3.50GHz7,690$239.99AMD FX-8150 Eight- Core7,619$165.99Intel Core i7-3630QM @ 2.40GHz7,604$304.49Intel Core i5-4670K @ 3.40GHz7,598$249.99Intel Core i5-4690 @ 3.50GHz7,542$224.99Intel Core i7-3610QM @ 2.30GHz7,460$399.99Intel Core i5-4670 @ 3.40GHz7,342$226.99Intel Core i5-4590 @ 3.30GHz7,174$199.99Intel Core i7-4702MQ @ 2.20GHz7,146NAIntel Core i5-3570K @ 3.40GHz7,130$477.23 Solution import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Arrays; public class Main { /** * This the main function that runs at the start * param args - input arguments from the command line */ static public void main(String[] args)
  • 2. { CPUList cpuList = new CPUList(); //The CPUList used to retrieve data from the fiile and store in the db CPUList cpuListRetrieved = new CPUList(); //The CPUList used to retrieve data from the database CpuDb cpuDb = new CpuDb(); //The database object used to move data to and from the CPU Lists try { //Read in the file and store each line into the CPU objects in a list Files.lines(Paths.get("Project04Data.csv")) .map(line -> line.split(" ")) // Stream .flatMap(Arrays::stream) // Stream .forEach(line -> cpuList.AddCpu(line)); //Clear the list table for the new listing cpuDb.Clear(); //Insert the Cpu List into the database cpuDb.SetCpuList(cpuList); //Retrieve the Cpu List into a different CPU List object from the database cpuDb.GetCpuList(cpuListRetrieved); //Show the report from the new list that was retrieved from the database cpuListRetrieved.ShowReport(); } catch (IOException e) { e.printStackTrace(); } } } CPUList.java import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; public class CPUList {
  • 3. ArrayList theList = new ArrayList<>(); /** * Default constructor for the CPU */ public void CPUList() { } /** * param strInputLine Input line to be used in creating the CPU object */ public void AddCpu(String strInputLine) { theList.add(new CPU(strInputLine)); } /** * param tempCPU - A CPU object to add to the list */ public void AddCpu(CPU tempCPU) { theList.add(tempCPU); } /** * return the combined string showing the CPU list */ public String toString() { String strString = ""; for (CPU cpu : theList) { strString += cpu; } return(strString); } /** * Print the CPU List Statistics * average price of CPU's
  • 4. * highest priced CPU * lowest priced CPU * best value CPU (performance / price )* */ public void PrintStatistics() { System.out.printf("average price CPU: %5.2f ", theList.stream().mapToDouble(CPU::getPrice).average().getAsDouble()); System.out.printf("highest price CPU: %5.2f ", theList.stream().mapToDouble(CPU::getPrice).max().getAsDouble()); System.out.printf("lowest price CPU: %5.2f ", theList.stream().mapToDouble(CPU::getPrice).min().getAsDouble()); System.out.println("Best Value CPU: " + Collections.max( theList, new CpuComparator() ).getCpuName()); } /** *Create the report from the database table with the following format * * Intel Core i7-6700HQ 2.60GHz: $1,509.00 * Intel Core i7-3770K 3.50GHz: $560.50 * Intel Core i5-3570K 3.40GHz: $477.23 * Intel Core i7-4700MQ 2.40GHz: $467.40 */ public void ShowReport() { for(CPU objCpu : theList) { System.out.printf("%s: %5.2f ", objCpu.getCpuName(), objCpu.getPrice()); } } /** * Remove the CPU objects that do not have all of the required values parsed out of the line */ public void CleanCpuList() {
  • 5. Iterator it = theList.iterator(); while( it.hasNext() ) { CPU objCpu = it.next(); if(objCpu.getValid() == false) { it.remove(); } } } } CPU.java public class CPU { private boolean m_bValid; private String m_strCPULine; private String m_strCPUName; private double m_dPerformance; private double m_dPrice; private double m_dValue; //Performance / Price private static final double NA_VALUE = 9999.99; /** * param strCPULine is the CPU line from the file */ public CPU(String strCPULine) { m_strCPULine = strCPULine; m_bValid = ParseCPULine(strCPULine); } /** * Constructor to be used when the fields are already known * param strCPUName - name of the CPU * param iPerformance - performance factor of the CPU
  • 6. * param dPrice - price of the CPU */ public CPU(String strCPUName, int iPerformance, double dPrice) { m_strCPUName = strCPUName; m_dPerformance = (double)iPerformance; m_dPrice = dPrice; m_dValue = m_dPerformance / m_dPrice; //Performance / Price m_bValid = true; } /** * param m_strCPULine - the input file line to be parsed * return Indicate if the ParseCPULin succeeded or not */ private boolean ParseCPULine(String m_strCPULine) { boolean bRetValue = true; String strTemp; String strNumeric; //Use a regular expression to parse the line into the individual members //TODO - Figure out why regex not working for 1,509.00 //messes up on the comma in the value String[] tokens = m_strCPULine.split(",(?=([^"]*"[^"]*")*[^"]*$)"); //http://rubular.com/ is helpful for regex //Do we have the correct number of tokens from the split. If not then mark as invalid if(tokens.length != 3) { bRetValue = false; } m_strCPUName = tokens[0]; //Get the performance try { strTemp = tokens[1]; strNumeric = strTemp.replaceAll("[^0-9.]+", ""); //Get rid of non digit characters m_dPerformance = Double.parseDouble(strNumeric);
  • 7. } catch(NumberFormatException ex) { m_dPerformance = NA_VALUE; bRetValue = false; } //Get the price try { strTemp = tokens[2]; strNumeric = strTemp.replaceAll("[^0-9.]+", ""); //Get rid of non digit characters m_dPrice = Double.parseDouble(strNumeric); } catch(NumberFormatException ex) { m_dPrice = NA_VALUE; //Bogus Value bRetValue = false; } //If we have valid Performance and Price values then return the calculated value otherwise set to zero if(bRetValue) { m_dValue = m_dPerformance / m_dPrice; } else { m_dValue = 0.0; } // for(String strTemp1 : tokens) // { // System.out.printf("%st", strTemp1); // } // // System.out.printf(" "); return bRetValue; }
  • 8. /** * return A string representing the CPU */ public String toString() { return String.format("[%b]t%stt[%5.2f]t[%5.2f] ", m_bValid, m_strCPUName, m_dPerformance, m_dPrice); //return String.format("%s ", m_strCPULine); //Just return the original line } /** * Getter * return the performance as an double */ public double getPerformance(){return(m_dPerformance);}; /** * Getter * return the price as a double */ public double getPrice(){return(m_dPrice);}; /** * Getter * return the value as a double */ public double getValue(){return(m_dValue);}; /** * Getter * return the CPU Name */ public String getCpuName(){return(m_strCPUName);}; /** * return if the cpu's line was parsed with all valid values for the fields or not */ public boolean getValid(){return(m_bValid);}; }
  • 9. CPUDb.java import java.sql.*; public class CpuDb { //SQL objects Connection c = null; boolean bConnected = false; /** * Default constructor */ public CpuDb() { bConnected = Connect("cpudb", "tcc2016", "tcc2016"); } /** * param strTable - table for which the column names will be shown */ public void ShowColumns(String strTable) { Statement s = null; ResultSet r = null; try { s = c.createStatement(); r = s.executeQuery("SELECT * from " + strTable); ResultSetMetaData m = r.getMetaData(); int col = m.getColumnCount(); for (int i = 1; i <= col; i++) { System.out.printf("%stt", m.getColumnName(i)); } System.out.println(); } catch ( SQLException e) { e.printStackTrace();
  • 10. } } /** * Connect to the database * param strDatabase - database name * param strUser - database user * param strPassword - user password * return true if the connection is made */ private boolean Connect(String strDatabase, String strUser, String strPassword) { boolean bConnectStatus = false; try { //Had to suppress a SSL warning message that kept popping up c = DriverManager.getConnection("jdbc:mysql://localhost/" + strDatabase + "?autoReconnect=true&useSSL=false", strUser, strPassword); System.out.println("Database connection made "); bConnectStatus = true; } catch ( SQLException e) { e.printStackTrace(); } return(bConnectStatus); } /** * Provide the insert into the database of the CPU list * param lstCpu - list of CPUs to insert * return true if the setting of the db via inserts succeeded */ public boolean SetCpuList(CPUList lstCpu) { boolean retValue = false; Statement s = null;
  • 11. String strSql; ResultSet r = null; try { s = c.createStatement(); //"insert into cputable( cpuname, performance, price) values( 'CPU1', 123, 55.66)" for(CPU objCPU : lstCpu.theList) { //Only insert if valid if(objCPU.getValid() == true) { //Create the CPU strSql = "insert into cputable( cpuname, performance, price) values('" + objCPU.getCpuName() + "'," + objCPU.getPerformance() + "," + objCPU.getPrice() + ")"; //System.out.println(strSql); s.execute(strSql); } } } catch ( SQLException e) { e.printStackTrace(); } return (retValue); } /** * Get the CPU list from the the database and return the list * param lstCpu - list of CPUs in the database * return indicates if the loading of the cpu list from the database succeeded or not */ public boolean GetCpuList(CPUList lstCpu) { boolean retValue = false;
  • 12. Statement s = null; ResultSet r = null; try { //Get the statement object connected to the database s = c.createStatement(); //Get all of the fields from the cpu table r = s.executeQuery("SELECT * from cputable order by price DESC"); //Get the results set for the query ResultSetMetaData m = r.getMetaData(); //Iterate through the record set and add to the CPU list while( r.next() ){ lstCpu.AddCpu(new CPU(r.getString( "cpuname" ),r.getInt( "performance" ),r.getFloat( "price" ))); } // //How many columns do we have // int col = m.getColumnCount(); // // //Show all of the data in the results set // while( r.next() ){ // for( int i = 1; i <= col; i++ ){ // int t = m.getColumnType( i ); // switch( t ){ // case Types.INTEGER: // System.out.print( r.getInt( i ) ); // break; // case Types.VARCHAR: // System.out.print( r.getString( i ) ); // break; // case Types.DATE: // System.out.print( r.getDate( i ) ); // break; // case Types.FLOAT: // System.out.print( r.getFloat( i ) ); // break;
  • 13. // default: // System.out.print("Unk("+ r.getType() + ")"); // break; // } // System.out.print( ";" ); // } // System.out.println(); // } retValue = true; } catch ( SQLException e) { e.printStackTrace(); } return (retValue); } /** * Clear the data out of the database * return if the table was cleared or not */ public boolean Clear() { boolean retValue = false; Statement s = null; ResultSet r = null; try { //Get the statement object connected to the database s = c.createStatement(); //Get all of the fields from the cpu table s.execute("delete from cputable"); } catch ( SQLException e) { e.printStackTrace(); }
  • 14. return (retValue); } } Project04Data.csv CPU Name,Performance,Price (USD) Intel Core i7-3770K @ 3.50GHz,"9,556",$560.50 Intel Core i7-3770 @ 3.40GHz,"9,327",$335.55 Intel Core i7-3820 @ 3.60GHz,"8,990",$404.38 AMD FX-8350 Eight-Core,"8,940",$149.99 Intel Core i7-2600K @ 3.40GHz,"8,501",$379.97 Intel Core i7-2600 @ 3.40GHz,"8,242",$214.99 Intel Core i7-4720HQ @ 2.60GHz,"8,046",NA AMD FX-8320 Eight-Core,"8,008",$145.99 Intel Core i7-6700HQ @ 2.60GHz,"7,997",$1,509.00 Intel Core i7-4710HQ @ 2.50GHz,"7,826",NA Intel Core i5-6600K @ 3.50GHz,"7,762",$239.99 Intel Core i7-4700HQ @ 2.40GHz,"7,754",$383.00 Intel Core i7-4700MQ @ 2.40GHz,"7,736",$467.40 Intel Core i5-4690K @ 3.50GHz,"7,690",$239.99 AMD FX-8150 Eight-Core,"7,619",$165.99 Intel Core i7-3630QM @ 2.40GHz,"7,604",$304.49 Intel Core i5-4670K @ 3.40GHz,"7,598",$249.99 Intel Core i5-4690 @ 3.50GHz,"7,542",$224.99 Intel Core i7-3610QM @ 2.30GHz,"7,460",$399.99 Intel Core i5-4670 @ 3.40GHz,"7,342",$226.99 Intel Core i5-4590 @ 3.30GHz,"7,174",$199.99 Intel Core i7-4702MQ @ 2.20GHz,"7,146",NA Intel Core i5-3570K @ 3.40GHz,"7,130",$477.23 CpuComparator.java import java.util.Comparator; public class CpuComparator implements Comparator< CPU > { /** * Compare function to return which cpu has better performance * @param c1 - first cpu object
  • 15. * @param c2 - second cpu object * @return */ public int compare(CPU c1, CPU c2 ) { double c1Value = c1.getValue(); double c2Value = c2.getValue(); return (int)(c1Value - c2Value); } }