Q: Problema com a visualização de dados do banco Em cada código vou explicando o problema.
public void onCreate(SQLiteDatabase bd) {
    bd.execSQL("create table tabela(_id integer primary key autoincrement, data text not null, orcamento text not null);");
}

Meu banco tem uma tabela e os campos id, data e orçamento.
public void inserir(MessageEB tabela){
    ContentValues valores = new ContentValues();
    valores.put("data", tabela.getData());
    valores.put("orcamento", tabela.getOrcamento());

    bd.insert("tabela", null, valores);
}

Caso não tenha nenhum dado salvo o programa aciona esse código.
Um dado já deve existir no banco e o usuário deve apenas atualizá-lo. Esse dado deve já existir pro usuário, então se o programa for iniciado pela primeira vez, como não terá nada no banco, aciona a função inserir.
Para atualizar os dados:
public void atualizar(MessageEB tabela){
    ContentValues valores = new ContentValues();
    valores.put("data", tabela.getData());
    valores.put("orcamento", tabela.getOrcamento());

    bd.update("dados", valores, "_id = ?", new String[]{"" + tabela.getId()});
    int linhasAtualizadas = bd.update("dados", valores, "_id = ?", new String[]{"" + tabela.getId()});
    Log.i("LOG", Integer.toString(linhasAtualizadas));

    bd.close();
}

Se eu tirar o bd.close(); o projeto funciona, mas dá um certo erro porque a função não fecha o banco.
O usuário vai atualizar os dados separadamente.
Buscando um dado:
public MessageEB buscarConfiguracoes() {
    MessageEB messageEB = new MessageEB();

    String[] colunas = new String[]{"_id","data", "orcamento"};
    Cursor c = bd.query("tabela", colunas, null, null, null, null, null);

    if(c.getCount() > 0) {
        c.moveToFirst();

        messageEB.setId(c.getLong(0));
        messageEB.setData(c.getString(1));
        messageEB.setOrcamento(c.getString(2));

        Log.i("LOG", "funcao buscar"); //teste
    }

    bd.close();
    return messageEB;
}

No FragmentInicio onde será mostrado o valor dos dados tem essa condição para saber se já tem algo gravado ou não:
MessageEB dados = new MessageEB();
    BD db = new BD(getActivity());
    String data = db.buscarConfiguracoes().getData();

    if(data == null) {
       dados.setData("DD/MM/AAAA");
        dados.setOrcamento("0,00");
        db.inserir(dados);
        txt.setText("DD/MM/AAAA");
        txtOrcamento.setText("0,00");
    } else {
        txt.setText(data);
        String orcamento = db.buscarConfiguracoes().getOrcamento();
        txtOrcamento.setText(orcamento);
    }

Mas, na hora de inserir os dados dá erro:
android.database.sqlite.SQLiteStatement.releaseAndUnlock(SQLiteStatement.java:283)
        at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:116)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1732)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1605)
        at br.com.aplicacao.teste.BancoDeDados.BD.inserir(BD.java:25)
        at br.com.aplicacao.teste.fragment.FragmentInicio.onCreateView(FragmentInicio.java:35)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)

No fragment onde tem os EditTexts eu quero recuperar o valor:
BD db = new BD(getActivity());
    String data = db.buscarConfiguracoes().getData();
    editar.setText(data);
    String orcamento = db.buscarConfiguracoes().getOrcamento();
    editarGasto.setText(orcamento);

Mas, quando chega na string orcamento, dá erro.

A: Me parece que você está tentando acessar o banco quando ele está fechado.
Talvez colocando um db.open() dentro do método de inserção resolva. Não se esqueça do bd.close() também.
