在Java中使用Jackess将一行添加到表中



我正在尝试使用Java代码将新行添加到Java中预先存在的表中。该表位于Access.mdb数据库文件中。这是我的全部代码,包括我用来创建.mdb.的代码

注意:我希望能够使用Jackess和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();
    }
}

问题中的代码适用于旧的(已弃用的)1.x版本的Jackcess,因此可能会让寻求当前2.x版本的帮助的人感到困惑。下面是相应的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);
        }
    }
}

您提供的代码是有效的。我得到输出

User    Pass    Enabled
Max     John    true

readDatabase方法中,请注意,您没有一对平衡的双引号。我使用了jaccess 1.2.8、commons lang 2.6和commons logger 1.1作为我的导入库,并且我使用Java 1.6运行。

您编写的代码与这些示例非常一致,因此除了兼容性或文件/目录访问问题外,我认为您所做的操作没有任何错误。如果你仍然有问题,也许可以尝试填充你的异常块,看看发生了什么。

相关内容

  • 没有找到相关文章

最新更新