Ошибка: undefined не является объектом (оценивает 'db.transaction') в ReactNative - PullRequest
0 голосов
/ 08 июня 2018

Я следую всем инструкциям по заполнению значения из существующей базы данных для iOS из этого: ссылка

и использование следующего кода:

import SQLite from 'react-native-sqlite-storage';
var db; 
export default class App extends Component<Props> {
errorCB(err) {
  console.log("SQL Error: " + err);
};

successCB() {
  console.log("SQL executed fine");
};

openCB() {
  console.log("Database OPENED");
};

openDB() {
db = SQLite.openDatabase({name : "sqliteexample", createFromLocation : 1}, this.openCB, this.errorCB);

}

populateDB() {
  db.transaction((tx) => {
    tx.executeSql("SELECT * FROM Users", [], (tx, results) => {
        console.log("Query completed");

        // Get rows with Web SQL Database spec compliance.

        var len = results.rows.length;
        console.log('len' + len)
        for (let i = 0; i < len; i++) {
          let row = results.rows.item(i);
          console.log(`User: ${row}`);
        }
      });
  });
}

render() {
    return (
<View style={styles.container} >
<Button onPress={this. openDB}
         title="open Database"
         color="#841584"/>
<Button onPress={this. populateDB}
         title="Get Data"
         color="#841584"/>
      </View>
    );
  }
}

Я получаюэта ошибка:

undefined не является объектом (оценка 'db.transaction')

Но успешно открытая база данных получает следующее сообщение в консоли:

2018-06-08 11: 43: 40.678 [info] [tid: com.facebook.react.SQLiteQueue] [SQLite.m: 255] открытие cb завершено нормально 2018-06-08 11: 43: 40.679 [info] [tid: com.facebook.react.JavaScript] БД открыта: sqliteexample 2018-06-08 11: 43: 40.679165 + 0530 FlatListAppDemo [1018: 61832] открытие cb завершено нормально 2018-06-08 11: 43: 40.679220 + 0530FlatListAppDemo [1018: 61820] Открыта БД: sqliteexample

Пожалуйста, помогите мне решить эту проблему.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

так что я думаю, что это может быть просто проблема времени.Самый безопасный способ получить объект базы данных - это обратный вызов успеха, который получит действительный объект БД, если все будет хорошо в openDatabase.поэтому измени свой код на это и попробуй ...

openCB(myDB) {
  console.log("Database OPENED");
  db = myDB;
};

openDB() {
  SQLite.openDatabase({name : "sqliteexample", createFromLocation : 1}, this.openCB, this.errorCB);

}
0 голосов
/ 08 июня 2018

Вы можете попробовать вот так

import SQLite from 'react-native-sqlite-storage';
var database_name = "sqliteexample"; // Add your Database name
var database_version = "1.0"; // Add your Database Version
var database_size = 200000; // Add your Database Size
var database_displayname = "SQL Database"; // Add your Database Displayname
var db; 

export default class App extends Component<Props> {
errorCB(err) {
  console.log("SQL Error: " + err);
};

successCB() {
  console.log("SQL executed fine");
};

openCB() {
  console.log("Database OPENED");
};

openDB() {

 db = SQLite.openDatabase(database_name, database_version, database_displayname, database_size, this.openCB, this.errorCB);

}

populateDB() {

  db = SQLite.openDatabase(database_name, database_version, database_displayname, database_size, this.openCB, this.errorCB);
  db.transaction((tx) => {
    tx.executeSql("SELECT * FROM Users", [], (tx, results) => {
        console.log("Query completed");

        // Get rows with Web SQL Database spec compliance.

        var len = results.rows.length;
        console.log('len' + len)
        for (let i = 0; i < len; i++) {
          let row = results.rows.item(i);
          console.log(`User: ${row}`);
        }
      });
  });
}

render() {
    return (
<View style={styles.container} >
<Button onPress={this. openDB}
         title="open Database"
         color="#841584"/>
<Button onPress={this. populateDB}
         title="Get Data"
         color="#841584"/>
      </View>
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...