BUG - xutils3的数据库模块org.xutils.ex.DbException: <init> []

2019-10-15 05:42:26


解决这个问题,和类序列化时报错以样的,有了其他的构造方法,就必须填写一个无参的构造方法。

在使用xutil3的数据库模块的时候出现报错org.xutils.ex.DbException: <init> []

问题原因:创建数据库的bean在生成有参数的构造方法时覆盖了没参数的构造方法

解决:生成不带参数的构造方法



这个问题遇到不止一次了,但是每次遇到又忘记了,因为这个提示不明不白的也没说明是什么原因造成的,所以每次都又折腾老半天,这里记录下,以防下次又遇到


原来报错的代码如下


try {

    List<Student> students = mDbManager.selector(Order.class).findAll();

} catch (DbException e) {

    e.printStackTrace();

}

@Table(name="student")

private class Student {

    @Column(name = "id", isId = true)

    public int id;

    @Column(name = "name")

    public String name;

    @Column(name = "age")

    public int age;

    

    public Student(String name, int age) {

        this.name = name;

        this.age = age;

    }

}

报错的原因是Student没有一个public的空构造方法导致的,因为xUtils3框架是利用反射通过空构造方法来生成对象的,而如果没有空构造函数,或者构造函数不为public则无法通过反射生成对象,就会报错


所以数据库bean类的正确写法如下所示,不管空构造函数是否用到,保留着是个好习惯


@Table(name="student")

private class Student {

    @Column(name = "id", isId = true)

    public int id;

    @Column(name = "name")

    public String name;

    @Column(name = "age")

    public int age;

 

    public Student() {

        

    }

    

    public Student(String name, int age) {

        this.name = name;

        this.age = age;

    }

}

 


  • 2017-07-17 14:48:15

    通过node.js保存emoji到mysql

    但是emoji通过utf-8编码后,每个字符占4个字节,属于宽字符。而老版本的mysql只支持一个字符占3个字节,所以老版本的mysql是无法存储emoji的。新版本的mysql增加了字符集utf8mb4,可以支持单字符最多占4个字节。utf8mb4是utf8的超集,可以无需修改地支持原来的utf8字符 要让mysql存储emoji,需要满足2个条件:

  • 2017-07-17 14:48:20

    通过node.js保存emoji到mysql

    但是emoji通过utf-8编码后,每个字符占4个字节,属于宽字符。而老版本的mysql只支持一个字符占3个字节,所以老版本的mysql是无法存储emoji的。新版本的mysql增加了字符集utf8mb4,可以支持单字符最多占4个字节。utf8mb4是utf8的超集,可以无需修改地支持原来的utf8字符 要让mysql存储emoji,需要满足2个条件:

  • 2017-07-17 17:05:03

    大白话讲解Promise(一)

    去年6月份, ES2015正式发布(也就是ES6,ES6是它的乳名),其中Promise被列为正式规范。作为ES6中最重要的特性之一,我们有必要掌握并理解透彻。本文将由浅到深,讲解Promise的基本概念与使用方法。

  • 2017-07-19 07:54:11

    Javascript中delete运算符

    Delete是Javascript语言中使用频率较低的操作之一,但是有些时候,当我们需要做delete或者清空动作时,就需要delete操作。在这篇文章中,我们将深入探讨如何使用它,以及它是如何工作的。

  • 2017-07-26 11:57:00

    Laravel 定时任务

    在 php 中使用定时器是一件不太简单的事情,之前大概只能通过 cron 来实现定时任务。但是在 Laravel5 中,定时任务将会变得很简单。