Jay Patel
Jay Patel

Reputation: 11

How to INSERT rows using UCanAccess?

I am using Windows 8 64 bit and NetBeans 8.1, Java 8

I know that in Java 8 the jdbc-odbc bridge was removed. I am using ucanaccess but I have one problem

I am trying to read data from MS Access using this code

(1)

package javaapplication1;
/**
*
* @author JAY
*/
import java.sql.*;

public class JavaApplication1 {
public static void main(String[] args) {

  Connection cn;
  Statement st;
  ResultSet re;
  try{

    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
    cn=DriverManager.getConnection("jdbc:ucanaccess://D://J//DB//database.accdb");
    st = cn.createStatement();
    re=st.executeQuery("select * from db1");
    while(re.next())
    {
       System.out.println(re.getString(1));     
    }
    catch(ClassNotFoundException | SQLException e)
    {
      System.out.println(e);
    }
}    
}

I have already inserted data manually in msaccess we got this out

run:

a
a
b
BUILD SUCCESSFUL (total time: 1 second)

But when I try to insert data using the following Java code

(2)

package javaapplication1;
/**
*
* @author JAY
*/
import java.sql.*;

public class JavaApplication1 {
public static void main(String[] args) {

  Connection cn;
  Statement st;
  ResultSet re;
  try{

    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
    cn=DriverManager.getConnection("jdbc:ucanaccess://D://J//DB//database.accdb");
    st = cn.createStatement();
    re=st.executeQuery("insert into db1 values('a','a')");

    System.out.println("inserted")     

    catch(ClassNotFoundException | SQLException e)
    {
      System.out.println(e);
    }
}  
}

I got this error:

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.3.1 java.lang.NullPointerException java.lang.NullPointerException
BUILD SUCCESSFUL (total time: 0 seconds)

after 3rd way try

(3)

/**
*
* @author JAY
*/
import java.sql.*;

public class JavaApplication1 {
public static void main(String[] args) {

  Connection cn;
  Statement st;
  ResultSet re;
  String ID ="username"; 
  String NAME="password";  


  try{

    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
    cn=DriverManager.getConnection("jdbc:ucanaccess://D://J//DB//database.accdb");
    st = cn.createStatement();
    String q ="insert into db1 values('"+ID+"','"+NAME+"'))";
    st.executeQuery(q);

    System.out.println("inserted")     

    catch(ClassNotFoundException | SQLException e)
    {
      System.out.println(e);
    }

}
}

I tried many different ways of inserting:

String q ="insert into db1 (ID,NAME) values('"+ID+"','"+NAME+"'))";

when I comment already passed upper side and try direct values inserted

String q ="insert into db1 (ID,NAME) values('a','b'))";

but got this error

run:
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.3.1 unexpected token: )
BUILD SUCCESSFUL (total time: 0 seconds)

Upvotes: 1

Views: 6498

Answers (1)

Gord Thompson
Gord Thompson

Reputation: 123549

You are trying to use executeQuery to perform an INSERT, but executeQuery is only for SELECT queries. Try using executeUpdate instead.

String q = "INSERT INTO db1 ([ID], [NAME]) VALUES (?, ?)";
PreparedStatement st = cn.prepareStatement (q);
st.setString(1, "a");
st.setString(2, "b");
st.executeUpdate();

Upvotes: 7

Related Questions