- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 Jackcess 在 MS Access 数据库中写入一些值。我的值最初是使用 String 表示的。我使用的代码如下:
int nColumns = 0;
// get table from internal representation
ModelDatabaseTable table = this.DB.getTable(tableName);
// create new table
TableBuilder DBTableBuilder = new TableBuilder(tableName);
// get table's columns and their Jackcess datatype
Map<String, DataType> columns = table.getColumns();
// for each column, insert it in the actual database
for (String columnName : columns.keySet()) {
DataType dt = columns.get(columnName);
ColumnBuilder cb = new ColumnBuilder(columnName).setType(dt);
if (dt.isVariableLength()) {
cb.setMaxLength();
}
DBTableBuilder.addColumn(cb);
nColumns += 1;
}
// if columns were inserted
if (nColumns > 0) {
// write table to actual database
Table DBTable = DBTableBuilder.toTable(this.DBConnection);
// for each row
for (ModelDatabaseRow row : table.getRows()) {
// get list of values (represented using String)
List<String> values = new ArrayList<String>();
// for each column get its value and insert it in values
for (String columnName : columns.keySet()) {
String columnValue = row.getColumn(columnName);
values.add(columnValue);
}
// print current row
System.out.println(values.toString());
// insert row in database table. Exception rises here:
// java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
DBTable.addRow(values.toArray());
}
}
下面是一个不起作用的基本示例(常规数据使用 JSON 描述)。在这种情况下,例程在尝试插入 BOOLEAN 值(HasM
、HasZ
)时停止,但它能够插入 DOUBLE 值 - 这些值都作为参数提供给 Table.addRow()
函数作为一个字符串数组。
{
"tables": {
"Table1": {
"rows": [
{
"items": {
"ExtentBottom": "45.050715999999994",
"ExtentLeft": "7.644834000000003",
"ExtentRight": "7.670400999999998",
"ExtentTop": "45.07392899999999",
"FieldName": "Shape",
"HasM": "false",
"HasZ": "false",
"IdxGridSize": "3.7252903001966386E-7",
"IdxOriginX": "0.0",
"IdxOriginY": "0.0",
"MHigh": "NaN",
"MLow": "NaN",
"SRID": "1",
"ShapeType": "4",
"TableName": "GDB_Items",
"ZHigh": "NaN",
"ZLow": "NaN"
}
},
{
"items": {
"ExtentBottom": "4989476.8181",
"ExtentLeft": "393329.1171000004",
"ExtentRight": "395300.25320000015",
"ExtentTop": "4992023.569399999",
"FieldName": "Shape",
"HasM": "false",
"HasZ": "false",
"IdxGridSize": "0.009311329524584121",
"IdxOriginX": "0.0",
"IdxOriginY": "0.0",
"MHigh": "NaN",
"MLow": "NaN",
"SRID": "2",
"ShapeType": "4",
"TableName": "Building_DIMMER_01",
"ZHigh": "NaN",
"ZLow": "NaN"
}
}
],
"columns": {
"ExtentBottom": "DOUBLE",
"ExtentLeft": "DOUBLE",
"ExtentRight": "DOUBLE",
"ExtentTop": "DOUBLE",
"FieldName": "TEXT",
"HasM": "BOOLEAN",
"HasZ": "BOOLEAN",
"IdxGridSize": "DOUBLE",
"IdxOriginX": "DOUBLE",
"IdxOriginY": "DOUBLE",
"MHigh": "DOUBLE",
"MLow": "DOUBLE",
"SRID": "LONG",
"ShapeType": "LONG",
"TableName": "TEXT",
"ZHigh": "DOUBLE",
"ZLow": "DOUBLE"
}
}
}
}
前面的 JSON 表示我的程序使用的数据的内部表示,它的结构是这样的:
{
"tables": {
"TableName": {
"rows": [
{
"items: {
"columnName1": "columnValue1",
...
"columnNameN": "columnValueN"
}
},
{
"items: {
"columnName1": "columnValue1",
...
"columnNameN": "columnValueN"
}
}
],
"columns": {
"columnName1": "columnDataType1",
...
"columnNameN": "columnDataTypeN"
}
}
}
}
不懂的可以问我,
谢谢
最佳答案
Jackcess 通常希望使用强类型的 Java 对象。在这种情况下,Jackcess 必须尝试通过在添加行时自动将 String
转换为 Double
来提供帮助。无论出于何种原因,Jackcess 不愿意自动将 String
转换为 Boolean
*/sup>,即使这种转换看起来很明显(对我们来说),所以对于带有字段的表
ID:自动编号,主键
DoubleField:数字( double )
YesnoField:是/否
下面的代码会抛出你看到的异常
String doubleFieldValue = "3.14159";
String yesnoFieldValue = "true";
tbl.addRow(Column.AUTO_NUMBER, doubleFieldValue, yesnoFieldValue);
但是,这会起作用
String doubleFieldValue = "3.14159";
String yesnoFieldValue = "true";
tbl.addRow(Column.AUTO_NUMBER, doubleFieldValue, Boolean.parseBoolean(yesnoFieldValue));
作为一般规则,最好在使用 Jackcess 时尝试使用正确类型的对象以避免像这样的小“意外”,所以按权利我们确实应该使用
String doubleFieldValue = "3.14159";
String yesnoFieldValue = "true";
tbl.addRow(Column.AUTO_NUMBER, Double.parseDouble(doubleFieldValue), Boolean.parseBoolean(yesnoFieldValue));
* 编辑:2015-03-21
今天发布的 Jackcess 2.0.9 添加了将 String
值自动转换为 Boolean
的功能。
关于java.lang.ClassCastException : java. lang.String 无法转换为 java.lang.Boolean,使用 Table.addRow() 和 Jackcess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28237009/
我想让用户在数据网格中添加单元格。 当我添加一行。我要将行设置为“组”。 因此,“添加行”应位于每个组中。 有什么办法可以实现这一目标? 最佳答案 在添加行时,将相应的字段填充到需要添加新行的组中。
我正在尝试使用 ExcelJS 库将数据写入 Excel 文件。我成功地创建了工作表并添加了列数据。 但是,在尝试实现 addRow() 或 addRows() 方法时,数据不会添加到 Excel 工
我正在尝试使用 google API 绘制折线图。 但是图表没有绘制,我可以在 data.addRows(rows); 中识别出一些错误;因为此 data.addRows 行之后的警报不会弹出。 如果
我一直想知道为什么 jTable 默认情况下没有 .addRow() 方法。为什么您必须先设置模型才能实现此目的? JTable table = new JTable(); table.addRow(
我正在努力将 PHP 中的数据转化为图表。我在 1 个 php 页面上有以下代码片段。首先是简单的部分: $sql = "SELECT * FROM (SELECT timestamp, Curren
function addRow() { var medicinename = document.getElementById("medicinename"); var time = d
我有一个表,我想在列上使用自动完成功能。(medSearch为本栏目设置的类) 我使用 Jquery 的自动完成代码 autocomp_opt={ source: function(reque
我有以下生成 Google 图表的函数,但它不起作用: function drawChart(a) { alert(a.test); var data = ne
我有一个 Google 图表(列),它只会调用数据库中的行,并且该列是由我们定义的。但我遇到了一个问题..图表不会出来,你们所有人都能看到我的源代码有什么问题吗..?非常感谢你...! $qu
代码运行没有错误,但 JTable 没有出现。 import javax.swing.JTable; import javax.swing.table.DefaultTableModel; impor
我是开发领域的新手。这段代码有两个问题。首先,当我单击 add_Row 按钮时,屏幕上会添加一行,但它会在 1-2 秒后消失,同样的事情也会发生在 group_Create() 弹出窗口中。
我遇到的问题不仅仅是问题,希望您能帮助我找到可能的原因。 在一个非常简单的 JTable 中,我使用 DefaultTableModel。我在运行时以编程方式添加一行,如下所示: public voi
我在 MySQL 中有一些数据,必须检索这些数据并在 JTable 中显示。我为此编写的代码如下 PreparedStatement ps = con.prepareStatement("select
我正在尝试制作折线图,但当我尝试添加一行数据时,Google Charts 一直抛出此错误: Error: Every row given must be either null or an arra
我很好奇为什么 DefaultTableModel 有一个 public void addRow(Object[] rowData) 但是没有 public Object[] getR
我正在尝试使用 jqGrid Treegrid 的内联导航“添加新行”功能,但到目前为止我无法正确配置它。我已阅读与其相关的文档和其他帖子,但没有任何效果。我已经设置了 addRow 的选项,但是当我
我想在 data.AddRows 中使用变量作为字符串参数,如下所示... function LanguagesChart(Names, Nums) { var data = n
我正在尝试添加 ID 号为 3791318595 的行。 long l = 3791318595L; myTable.addRow(l,"testing"); 然而 Jackcess 将其转换为整数并
我在下面的解释是,归结起来,有没有一种方法可以在不触发事件的情况下添加行,这样我就可以添加多行并触发事件来一次更新所有行?无需添加代码来包含自定义模型中的表数据? 我有一个从 DefaultTable
我在 swing 中使用 JTable 来显示 MySQL 表,尽管表值存在于行对象中(如屏幕截图中的输出所示),但应用程序中的 jtable 是空的。屏幕截图中的输出包含 Object[] 数组,但
我是一名优秀的程序员,十分优秀!