Добавление строки в таблицу с использованием Jackcess в Java - PullRequest
0 голосов
/ 17 февраля 2012

Я пытаюсь использовать код Java для добавления новой строки в уже существующую таблицу в Java.Таблица находится в файле базы данных Access .mdb.Вот весь мой код, включая тот, который я использовал для создания .mdb.

Примечание: я хочу иметь возможность добавлять строки в таблицу с помощью Jackcess и в методе Java.

import com.healthmarketscience.jackcess.*;
import org.apache.commons.logging.*;
import org.apache.commons.lang.*;


import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;
import java.util.List;
import java.util.Map;

public class DataManagement {
    static Database db;
    static Table Users;

    public static void createNewDataBase(){
        try{
            db = Database.create(new File("test.mdb"));
            Users = new TableBuilder("Users")
                    .addColumn(new ColumnBuilder("User")
                    .setSQLType(Types.VARCHAR)
                    .toColumn())
                    .addColumn(new ColumnBuilder("Pass")
                    .setSQLType(Types.VARCHAR)
                    .toColumn())
                    .addColumn(new ColumnBuilder("Enabled")
                    .setSQLType(Types.BOOLEAN)
                    .toColumn())
                    .toTable(db);


        }
        catch(Exception ex){
        }
    }

    public static void readDatabase(){
        try{
            System.out.println(Database.open(new File(test.mdb"))
                    .getTable("Users").display());
        }
        catch(Exception e){}
    }

    public static void addUser(String name, String pass){
        try{
            Users.addRow(name, pass, true);
        }
        catch(Exception e){

        }

    }

    // This main is present for testing purposes only
    public static void main(String args[]){
        //createNewDataBase();
        //addUser("Max", "John");
        //readDatabase();

    }
}

Ответы [ 2 ]

1 голос
/ 27 апреля 2017

Код в вопросе предназначен для более старых (устаревших) версий 1.x Jackcess и, следовательно, может вводить в заблуждение людей, которые ищут помощь с текущими версиями 2.x Jackcess. Вот соответствующий код 2.x для создания файла базы данных, создания новой таблицы и добавления строки:

package so9318569;

import java.io.File;

import com.healthmarketscience.jackcess.ColumnBuilder;
import com.healthmarketscience.jackcess.DataType;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.Database.FileFormat;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import com.healthmarketscience.jackcess.Table;
import com.healthmarketscience.jackcess.TableBuilder;

public class So9318569Main {

    public static void main(String[] args) {
        try (Database db = DatabaseBuilder.create(FileFormat.V2003, new File("test.mdb"))) {
            Table tblUsers = new TableBuilder("Users")
                    .addColumn(new ColumnBuilder("User", DataType.TEXT))
                    .addColumn(new ColumnBuilder("Pass", DataType.TEXT))
                    .addColumn(new ColumnBuilder("Enabled", DataType.BOOLEAN))
                    .toTable(db);
            tblUsers.addRow("Max", "John", true);
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }

}
1 голос
/ 11 октября 2012

Код, который вы предоставили, работает. Я получаю вывод

User    Pass    Enabled
Max     John    true

В вашем readDatabase методе обратите внимание, что у вас нет сбалансированной пары двойных кавычек. Я использовал jackcess 1.2.8, commons-lang 2.6 и commons-logger 1.1 в качестве своих импортированных библиотек, и я работаю с Java 1.6.

Код, который вы написали, очень соответствует этим примерам , и поэтому, кроме проблем с совместимостью или доступом к файлу / каталогу, я не вижу ничего плохого в том, что вы сделали. Если у вас все еще есть проблемы, возможно, попробуйте заполнить блоки исключений, чтобы увидеть, что происходит.

...