Проблема со вставкой данных в Ms Access - PullRequest
0 голосов
/ 26 декабря 2009
 import java.sql.*;

   public class NewConnection{   private static Connection con;
   private static ResultSet rs;
   private static Statement sm;
   private static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
   private static final String URL = "jdbc:odbc:Driver={Microsoft Access driver (*.mdb)};DBQ=E:\\Database.mdb;";
   private static String query;
   int i;
  private void getConnection(){

    try {
        Class.forName(DRIVER);
        System.out.println("Driver Connected");
        con=DriverManager.getConnection(URL);
        System.out.println("Database Connected");
        sm=con.createStatement();

         }  catch (Exception e) {
     }

    }

   private int ExecuteUpdate(String query1)
   {

    try {
        System.out.println(query1);
          i=sm.executeUpdate(query1);
        } catch (Exception e) {
          e.printStackTrace();
        }

        return i;
    }



     public static void main(String []args){
     NewConnection n= new NewConnection();
     n.getConnection();
         query="insert into Emp values('samr','sam','sa','aas')";
         System.out.println(n.ExecuteUpdate(query));
   }
}

Это код для вставки данных в d MS Access Database. Databse - это имя d базы данных. Но я не могу вставить данные в него. Запрос выполняется успешно, но не добавляет данные в базу данных. Не знаю, у ..? Код успешно создает таблицу в базе данных, если запрос изменился.

Может кто-нибудь сказать мне, в чем проблема или Где я не прав ..

Спасибо

Ответы [ 3 ]

0 голосов
/ 26 декабря 2009

Никогда не делай этого!

catch (Exception e) 
{
}

Прежде всего вы ловите все виды вещей, которые вы не должны ловить - NullPointerException, ArrayIndexOutOfBoundsException и т. Д. - вещи, которые указывают на ошибки в вашем коде.

Поймайте только то, что вам скажет компилятор, если только у вас нет для этого веской причины.

Во-вторых, если есть какие-то исключения, вы никогда не узнаете об этом, потому что ничего не делаете. По крайней мере, выполните e.printStackTrace () или зарегистрируйте его, чтобы увидеть, что пошло не так.

0 голосов
/ 26 декабря 2009

Вы действительно совершили транзакцию? как в java.sql.Connection.commit () после того, как вы отправили оператор вставки в базу данных? теоретически он должен быть установлен на «автоматическую фиксацию», которую вы можете проверить, запросив java.sql.Connection.getAutoCommit ().

private int ExecuteUpdate(String query1)
   {

    try {
        System.out.println(query1);
          i=sm.executeUpdate(query1);
          con.commit();                //try to commit the query
        } catch (Exception e) {
          e.printStackTrace();
        }
        return i;
    }

Также и это очень важно: не используйте статику для ваших объектов Connection, Statement и Query , поскольку они могут и будут переопределены другими Экземплярами вашего NewConnection. Используя эту архитектуру, вы должны быть абсолютно уверены, что NewConnection является синглтоном или что в Parallell никогда не будет больше одного из этих объектов (и они сбрасываются при каждом повторном использовании).

Проверьте здесь для получения дополнительной информации о java.sql.Connection

0 голосов
/ 26 декабря 2009

Измените оператор catch в методе getConnection (), чтобы сначала сделать это, и посмотрите, нет ли ошибок

private void getConnection(){
  try {
    Class.forName(DRIVER);
    System.out.println("Driver Connected");
    con=DriverManager.getConnection(URL);
    System.out.println("Database Connected");
    sm=con.createStatement();
  }  catch (Exception e) {
     e.printStacktrace();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...