Skip to Main Content

Java Programming

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Using the Insert statement in a Java program without hardcoding the data

807606Mar 16 2007 — edited Mar 16 2007
hello.
this is james mcfadden. i have developed a program called Demo.java, which is used with another program called QueryTableModel.java (a program that allows data to be viewed in a JTable). The Demo.java program displays a menu, connects to a database, allows the user to add data into the database and allows the user to view data that is already in the database. I have a problem with the Demo.java program. I have hardcoded the Insert statement in it. How do you use the Insert statement to put data into a database without hardcoding the data?
import java.awt.*;//Contains all of the classes for creating user interfaces and for painting graphics and images
import java.awt.event.*;//Provides interfaces and classes for dealing with different types of events fired by AWT components
import javax.swing.*;//Provides a set of lightweight components that, to the maximum degree possible, work the same on all platforms
import javax.swing.table.*;//Provides classes and interfaces for dealing with javax.swing.JTable
import javax.swing.JOptionPane;//provides a class that makes it easy to pop up a standard dialog box that prompts users for a value or informs them of something 
import java.sql.*;//Provides the API for accessing and processing data stored in a data source using the Java programming language

public class Demo extends JFrame{
   static String url = "jdbc:odbc:VideoLibrary";//a static variable that allows a connection to be made to a database called VideoLibrary
   static Statement stmt;//a static variable that allows a statement to be made once a connection is set up
   static Connection con;//a static interface that allows a connection to be made to a database
	
	//global variables
	JTextField hostField;//a class that allows a line of text to be changed
   JTextField queryField;//a class that allows a line of text to be changed
   QueryTableModel qtm;//a class that shows and changes regular two-dimensional tables of cells
   JComboBox comboBox;//a class that puts a button or editable field and a drop-down list together  
	
   public static void main(String args[]){	
      int choice=-1;//a variable of type int that is set to -1
			   
		do{
         choice=getChoice();//invokes the method getChoice()
			
         if(choice!=0){
            getSelected(choice);//invokes the method getSelected(choice) 
         }//end if
			//if the user chooses 5, it will cause him or her to exit the system 
      }while(choice!=5);//end do-while
		
      System.exit(0);//closes down the menu screen
   }//end main

   public static int getChoice(){
      String choice;//a variable of type string
      int ch;//a variable of type int
      choice = JOptionPane.showInputDialog(null,"1. Maintain product details\n"+"2. Maintain member details\n"+"3. Maintain rental details\n"+"4. View product, member and rental details\n"+"5. Log Off\n\n"+"Enter your choice");//asks the user for some input    
		ch = Integer.parseInt(choice);//a class that wraps a value of the primitive type int in an object      
		return ch;//a method that returns an integer value
   }//end getChoice

   public static void getSelected(int choice){    
		if(choice==1){
         maintainProductDetails();//invokes the method maintainProductDetails() 
      }//end if
      if(choice==2){
         maintainMemberDetails();//invokes the method maintainMemberDetails()
      }//end if
		if(choice==3){
         maintainRentalDetails();//invokes the method maintainRentalDetails()
      }//end if
		if(choice==4){ 
		   Demo test = new Demo();//invokes the constructor Demo()
         test.setVisible(true);//shows the JTable component by marking it as visible 
		}//end if 
   }//end getSelected

   public static Connection getConnection(){
      try {
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//used to create a JDBC connection using a database
      }//end try 
		catch(java.lang.ClassNotFoundException e){//causes an exception to be thrown when an application tries to load in a class through its string name
         System.err.print("ClassNotFoundException: ");//displays an error message
         System.err.println(e.getMessage());//returns the exception that was raised if an error occurred while attempting to load the ClassNotFoundException class
      }//end catch
      try {
         con=DriverManager.getConnection(url,"","");//tries to create a connection with the database using the DriverManager class
      }//end try 
		catch(SQLException ex) {
         System.err.println("SQLException: " + ex.getMessage());//returns an SQL error message
      }//end catch
      return con;
   }//end getConnection

   public static void maintainProductDetails(){
      Connection con = getConnection();//creates a connection with the database
      String  addProduct1, addProduct2, addProduct3, addProduct4, addProduct5, addProduct6, addProduct7, addProduct8, addProduct9, addProduct10;//string variables that represent information about the different types of product data that will be stored in the database
      addProduct1 = "insert into Product values (110001, 'The Killers - Sams Town', 5.00, 'G', 'CD', 2006)";
      addProduct2 = "insert into Product values (110002, 'Robbie Williams - Rudebox', 5.00, 'G', 'CD', 2006)";
      addProduct3 = "insert into Product values (110003, 'Razorlight - Razorlight', 5.00, 'G', 'CD', 2006)";
      addProduct4 = "insert into Product values (110004, 'My Chemical Romance - The Black Parade', 5.00, 'G', 'CD', 2006)";
      addProduct5 = "insert into Product values (110005, 'Snow Patrol - Eyes Open', 5.00, 'G', 'CD', 2006)";
      addProduct6 = "insert into Product values (110006, 'Scissor Sisters - Ta-Dah!', 5.00, 'G', 'CD', 2006)";
		addProduct7 = "insert into Product values (110007, 'Lovesounds - Justin Timberlake', 5.00, 'G', 'CD', 2006)";
      addProduct8 = "insert into Product values (110008, 'Director - We thrive on big cities', 5.00, 'G', 'CD', 2006)";
      addProduct9 = "insert into Product values (110009, 'Roxette - Roxette hits', 5.00, 'G', 'CD', 2006)";
      addProduct10 = "insert into Product values (110010, 'Pussy Cat Dolls - PCD', 5.00, 'G', 'CD', 2006)";
      
		try {
         stmt = con.createStatement();//Creates a Statement object for sending SQL statements to the database
        
		   //statements are allowed to be made once a connection is set up
		   stmt.executeUpdate(addProduct1);
         stmt.executeUpdate(addProduct2);
         stmt.executeUpdate(addProduct3);
         stmt.executeUpdate(addProduct4);
			stmt.executeUpdate(addProduct5);
         stmt.executeUpdate(addProduct6);
		   stmt.executeUpdate(addProduct7);
         stmt.executeUpdate(addProduct8);
         stmt.executeUpdate(addProduct9);
         stmt.executeUpdate(addProduct10);
         stmt.close();//closes the Statement object
         con.close();//terminates the connection with the database
      }//end try 
		catch(SQLException ex) {
         System.err.println("SQLException: " + ex.getMessage());//returns an SQL error message
      }//end catch
   }//end maintainProductDetails 

   public static void maintainMemberDetails(){
      Connection con = getConnection();//creates a connection with the database
      String addMember1, addMember2, addMember3, addMember4, addMember5, addMember6, addMember7, addMember8, addMember9, addMember10;//string variables that represent information about the member data that will be stored in the database
      addMember1 = "insert into Member values (1234, 'Ann', 'Smyth', 'Upper Killult, Falcarragh, Co. Donegal', '(074)-9135210', '(087)-2030172', #5/11/85#, #5/12/06#)";
      addMember2 = "insert into Member values (2345, 'John', 'Murphy', 'Lower Killult, Falcarragh, Co. Donegal', '(074)-9135211', '(087)-2030173', #4/12/85#, #6/13/06#)";
      addMember3 = "insert into Member values (1324, 'James', 'McFadden', 'Lower Ardsbeg, Gortahork, Co. Donegal', '(074)-9165314', '(087)-2030171', #4/11/85#, #6/14/06#)";
      addMember4 = "insert into Member values (1235, 'Frankie', 'Ferry', 'Ardsmore, Gortahork, Co. Donegal', '(074)-9165325', '(087)-2031234', #6/13/60#, #6/15/06#)";
      addMember5 = "insert into Member values (1236, 'Daniel', 'McKimm', 'Ballyness, Falcarragh, Co. Donegal', '(074)-9135212', '(087)-2030184', #5/14/73#, #6/16/06#)";
      addMember6 = "insert into Member values (2346, 'Stephen', 'Doohan', 'Ballyness, Falcarragh, Co. Donegal', '(074)-9135213', '(087)-2030185', #6/13/85#, #5/13/06#)";
      addMember7 = "insert into Member values (2347, 'James', 'Ferry', 'Meenlaragh, Gortahork, Co.Donegal', '(074)-9165360', '(087)-2031345', #9/12/85#, #5/14/06#)";
      addMember8 = "insert into Member values (2348, 'Liam', 'Cannon', 'Derryconner, Gortahork, Co.Donegal', '(074)-9165324', '(087)-2031456', #4/11/86#, #5/15/06#)";
      addMember9 = "insert into Member values (2401, 'Ciaran', 'Ferry', 'Brinalack, Gweedore, Co.Donegal', '(074)-9176425', '(087)-2030282', #9/12/85#, #5/16/06#)";
      addMember10 = "insert into Member values (2402, 'Ciaran', 'McGee', 'Derrybeg, Gweedore, Co.Donegal', '(074)-9176536', '(087)-2030393', #9/14/85#, #5/18/06#)";


      try{
         stmt = con.createStatement();//Creates a Statement object for sending SQL statements to the database
         
			//statements are allowed to be made once a connection is set up
			stmt.executeUpdate(addMember1);
         stmt.executeUpdate(addMember2);
         stmt.executeUpdate(addMember3);
			stmt.executeUpdate(addMember4);
			stmt.executeUpdate(addMember5);
			stmt.executeUpdate(addMember6);
			stmt.executeUpdate(addMember7);
			stmt.executeUpdate(addMember8);
			stmt.executeUpdate(addMember9);
			stmt.executeUpdate(addMember10);
         stmt.close();//closes the Statement object
         con.close();//terminates the connection with the database
      }//end try 
		catch(SQLException ex) {
         System.err.println("SQLException: " + ex.getMessage());//returns an SQL error message
      }//end catch
   }//end maintainMemberDetails
	
	public static void maintainRentalDetails(){
      Connection con = getConnection();//creates a connection with the database
      String addRental1, addRental2, addRental3, addRental4, addRental5, addRental6, addRental7, addRental8, addRental9, addRental10;//string variables that represent information about the loan data that will be stored in the database
      addRental1 = "insert into Rental values (110001, 'The Killers - Sams Town', 1234, 'Ann', 'Smyth', #9/01/06#, #9/10/06#, 'Yes', 2.00)";
      addRental2 = "insert into Rental values (120001, 'Mission Impossible 3', 2345, 'John', 'Murphy', #9/02/06#, #9/09/06#, 'No', 0.00)";
      addRental3 = "insert into Rental values (130001, 'Need for Special Carbon', 1324, 'James', 'McFadden', #9/03/06#, #9/12/06#, 'Yes', 2.00)";
      addRental4 = "insert into Rental values (110002, 'Robbie Williams - Rudebox', 1235, 'Frankie', 'Ferry', #9/04/06#, #9/11/06#, 'No', 0.00)";
      addRental5 = "insert into Rental values (120015, 'Prime', 1236, 'Daniel', 'McKimm', #9/05/06#, #9/14/06#, 'Yes', 2.00)";
      addRental6 = "insert into Rental values (130015, 'FIFA 07', 2346, 'Stephen', 'Doohan', #9/06/06#, #9/13/06#, 'No', 0.00)";
      addRental7 = "insert into Rental values (110009, 'Roxette - Roxette hits', 2347, 'James', 'Ferry', #9/07/06#, #9/16/06#, 'Yes', 2.00)";
      addRental8 = "insert into Rental values (120003, 'The Break Up', 2348, 'Liam', 'Cannon', #9/08/06#, #9/15/06#, 'No', 0.00)";
      addRental9 = "insert into Rental values (130027, 'Gears of War', 2401, 'Ciaran', 'Ferry', #9/09/06#, #9/18/06#, 'Yes', 2.00)";
      addRental10 = "insert into Rental values (110021, 'Scooter - Mind the Gap', 2402, 'Ciaran', 'McGee', #9/10/06#, #9/17/06#, 'No', 0.00)";

      try{
         stmt = con.createStatement();//Creates a Statement object for sending SQL statements to the database
         
			//statements are allowed to be made once a connection is set up
			stmt.executeUpdate(addRental1);
         stmt.executeUpdate(addRental2);
         stmt.executeUpdate(addRental3);
			stmt.executeUpdate(addRental4);
			stmt.executeUpdate(addRental5);
			stmt.executeUpdate(addRental6);
			stmt.executeUpdate(addRental7);
			stmt.executeUpdate(addRental8);
			stmt.executeUpdate(addRental9);
			stmt.executeUpdate(addRental10);
         stmt.close();//closes the Statement object
         con.close();//terminates the connection with the database
      }//end try 
		catch(SQLException ex) {
         System.err.println("SQLException: " + ex.getMessage());//returns an SQL error message
      }//end catch
   }//end maintainRentalDetails
	
   public Demo(){//a constructor
      super("Demo Test Frame");//overrides the constructor
      setSize(350, 200);//Resizes this component so that it has width of 350 and height of 200  
      comboBox = new JComboBox();//invokes the class JComboBox
      comboBox.addItem("jdbc:odbc:VideoLibrary");//adds the specified item to the end of the scrolling list
      qtm = new QueryTableModel();//invokes the class QueryTableModel 
      JTable table = new JTable(qtm);//a class that shows and changes regular two-dimensional tables of cells
      JScrollPane scrollpane = new JScrollPane(table);//a class that provides a scrollable view of a lightweight component
      JPanel p1 = new JPanel();//a class that puts the combo box and query field in a panel
      p1.setLayout(new GridLayout(3, 2));//Sets the layout manager for this container
      p1.add(comboBox);//Appends the specified component to the end of this container
      p1.add(new JLabel("Enter your query: "));//Appends the specified component to the end of this container
      p1.add(queryField = new JTextField());//Appends the specified component to the end of this container
      p1.add(new JLabel("Click here to send: "));//Appends the specified component to the end of this container
      JButton jb = new JButton("Search");//a class that is an implementation of a "push" button
			
      jb.addActionListener(new ActionListener(){//Adds an ActionListener to the button
         public void actionPerformed(ActionEvent e){
            qtm.setHostURL();//invokes the method setHostURL 
            qtm.setQuery(queryField.getText().trim());//invokes the method setQuery; and returns the text that is presented by this text component and returns a copy of the string, with leading and trailing whitespaces omitted 
         }
      } );//end addActionListener
			
      p1.add(jb);//Appends the specified component to the end of this container
      getContentPane().add(p1, BorderLayout.NORTH);//Returns the content pane
      getContentPane().add(scrollpane, BorderLayout.CENTER);//Returns the content pane
   }//end Demo
}//end class Demo
import java.sql.*;//Provides the API for accessing and processing data stored in a data source using the Java programming language
import java.io.*;//Provides for system input and output through data streams, serialization and the file system
import java.util.Vector;//provides a class that implements a growable array of objects
import javax.swing.*;//Provides a set of lightweight components that, to the maximum degree possible, work the same on all platforms
import javax.swing.table.*;//Provides classes and interfaces for dealing with javax.swing.JTable

public class QueryTableModel extends AbstractTableModel{
	Vector cache;//a class that constructs an empty vector so that its internal data array has size 10 and its standard capacity increment is zero  
	int colCount;//a variable that counts the number of columns in the three tables 
	String[] headers;//a class that represents character strings and all string literals in this program are implemented as instances of the String class
	Connection db;//an interface that allows a connection to be made to a database
	Statement statement;//an interface that allows executes the given SQL statement, which returns a single ResultSet object
	String currentURL;//a variable that allows the URL to be displayed in a combo box

	public QueryTableModel(){//a constructor
		cache=new Vector();//constructs an empty vector so that its internal data array has size 10 and its standard capacity increment is zero
		
		try{
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//used by opening a JDBC connection using an URL
		}//end try
		catch(Exception e){ 
			System.out.println("problem loading the driver ");//an error message 
		}//end catch
	}//end QueryTableModel

	public String getColumnName(int i){//Returns the designated column's name
	   return headers;//returns the name of each column in the three table 
}//end getColumnName

public int getColumnCount(){//Returns the number of columns in the column model
return colCount;//returns the number of columns in the three tables
}//end getColumnCount

public int getRowCount(){//Returns the number of rows in this table's model
return cache.size();//returns the number of components in the vector
}//end getRowCount

public Object getValueAt(int row, int col){//Returns the cell value at row and column
return ((String[])cache.elementAt(row))[col];//Returns the component at the specified index
}//end getValueAt

public void setHostURL(){//sets the URL for the database
String url = "jdbc:odbc:VideoLibrary";//a variable that allows a connection to be made to a database called VideoLibrary
closeDB();//invokes the method closeDB()

try{
db=DriverManager.getConnection(url,"","");//tries to create a connection with the database using the DriverManager class
statement=db.createStatement();//Creates a Statement object for sending SQL statements to the database
}//end try
catch(Exception e){
System.out.println("Could not initialize the database.");//an error message
e.printStackTrace();//a Throwable method that prints this throwable and it's backtrace to the standard error stream
}//end catch
}//end setHostURL

public void setQuery(String q){//sets the kind of query that is to be sent to the database
cache=new Vector();//constructs an empty vector so that its internal data array has size 10 and its standard capacity increment is zero
String s="select * from Product";//a variable that causes all the data that is in the product table to be displayed in a JTable, which also means that all the data that is in both the member and rental tables can also be displayed in a JTable

try{
ResultSet rs=statement.executeQuery(q);//an interface that is used to generate a database result set by executing a statement that queries the database
ResultSetMetaData meta=rs.getMetaData();//an interface that is used to get information about the types and properties of the columns in a ResultSet object
colCount=meta.getColumnCount();//Returns the number of columns in this ResultSet object
headers=new String[colCount];//gets the name of each column in the three tables

for(int h=1;h<=colCount;h++){
headers[h-1]=meta.getColumnName(h);//Get the designated column's name
}//end for

while(rs.next()){
String[] record=new String[colCount];//stores the name of each column in the three tables in memory

for(int i=0;i<colCount;i++){
record[i]=rs.getString(i+1);//Retrieves the value of the designated column in the current row of this ResultSet object as a String
}//end for
cache.addElement(record);//Adds the specified component to the end of this vector, increasing its size by one
}//end while
fireTableChanged(null);//Forwards the given notification event to all TableModelListeners that registered themselves as listeners for this table model
}//end try
catch(Exception e){
cache=new Vector();//constructs an empty vector so that its internal data array has size 10 and its standard capacity increment is zero
e.printStackTrace();//a Throwable method that prints this throwable and it's backtrace to the standard error stream
}//end catch
}//end setQuery

public void initDB(String url){
try{
db=DriverManager.getConnection(url);//tries to create a connection with the database using the DriverManager class
statement=db.createStatement();//Creates a Statement object for sending SQL statements to the database
}//end try
catch(Exception e){
System.out.println("Could not initialize the database.");//an error message
e.printStackTrace();//a Throwable method that prints this throwable and it's backtrace to the standard error stream
}//end catch
}//end initDB

public void closeDB(){
try{
if(statement!=null){
statement.close();//Releases this Statement object's database and JDBC resources immediately instead of waiting for this to happen when it is automatically closed
}//end if
if(db!=null){
db.close();//Releases this Connection object's database and JDBC resources immediately instead of waiting for them to be automatically released
}//end if
}//end try
catch(Exception e){
System.out.println("Could not close the current connection.");//an error message
e.printStackTrace();//a Throwable method that prints this throwable and it's backtrace to the standard error stream
}//end catch
}//end closeDB
}//end class QueryTableModel
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Apr 13 2007
Added on Mar 16 2007
5 comments
878 views