Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SchemaUtils.create make app crashes #1398

Closed
SepidehAkbarinezhad opened this issue Dec 1, 2021 · 7 comments
Closed

SchemaUtils.create make app crashes #1398

SepidehAkbarinezhad opened this issue Dec 1, 2021 · 7 comments

Comments

@SepidehAkbarinezhad
Copy link

SepidehAkbarinezhad commented Dec 1, 2021

hi
I have an app using exposed for database . when I run h2 in my computer and i run the app in my emulator from andoid studio every thing goes well.
The problem is when I run the app from another android device and try to connect to the database .

class DatabaseImpl : AppDatabase {

override fun open(url: String, driver: String, username: String, password: String): Boolean {
    val database by lazy {
        Database.connect(url = url, driver = driver, user = username, password = password)
    }
    TransactionManager.defaultDatabase = database
    return transaction { !connection.isClosed }.also { if (it) initDatabase() }
}

private fun initDatabase() {
    transaction {
        //here is where app crashes
            SchemaUtils.create(
                Test1Table,
                Test2Table,
                Test3Table,
               )
    }
}

}

the app crash in : SchemaUtils.create .
here is the logcat message : AndroidRuntime: FATAL EXCEPTION: main
I wonder how I should use exposed in this scenario as I want to set client server relation between two android devices .
I would appreciate any help

@Tapac
Copy link
Contributor

Tapac commented Dec 1, 2021

Is there some stacktrace? How do you run H2 database (please provide a sample jdbc-URL)

@SepidehAkbarinezhad
Copy link
Author

Is there some stacktrace? How do you run H2 database (please provide a sample jdbc-URL)

url : jdbc:h2:tcp://192.168.0.101:49710/C:/data/sample

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.projectName, PID: 4152 java.lang.NoClassDefFoundError: org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$identifierManager$2$$ExternalSyntheticLambda0 at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$identifierManager$2.invoke(JdbcDatabaseMetadataImpl.kt:59) at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$identifierManager$2.invoke(JdbcDatabaseMetadataImpl.kt:58) at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$lazyMetadata$1.invoke(JdbcDatabaseMetadataImpl.kt:251) at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl.getIdentifierManager(JdbcDatabaseMetadataImpl.kt:58) at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$tableNamesFor$1$2.invoke(JdbcDatabaseMetadataImpl.kt:113) at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$tableNamesFor$1$2.invoke(JdbcDatabaseMetadataImpl.kt:107) at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImplKt.iterate(JdbcDatabaseMetadataImpl.kt:261) at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImplKt.access$iterate(JdbcDatabaseMetadataImpl.kt:1) at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl.tableNamesFor(JdbcDatabaseMetadataImpl.kt:107) at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl.access$tableNamesFor(JdbcDatabaseMetadataImpl.kt:18) at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$tableNames$1.invoke(JdbcDatabaseMetadataImpl.kt:95) at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$tableNames$1.invoke(JdbcDatabaseMetadataImpl.kt:94) at org.jetbrains.exposed.sql.statements.jdbc.JdbcDatabaseMetadataImpl$CachableMapWithDefault.get(JdbcDatabaseMetadataImpl.kt:87) at kotlin.collections.MapsKt__MapWithDefaultKt.getOrImplicitDefaultNullable(MapWithDefault.kt:105) at kotlin.collections.MapsKt__MapsKt.getValue(Maps.kt:344) at org.jetbrains.exposed.sql.vendors.VendorDialect.tableExists(Default.kt:686) at org.jetbrains.exposed.sql.QueriesKt.exists(Queries.kt:236) at org.jetbrains.exposed.sql.SchemaUtils.createStatements(SchemaUtils.kt:89) at org.jetbrains.exposed.sql.SchemaUtils.create(SchemaUtils.kt:233) at org.jetbrains.exposed.sql.SchemaUtils.create$default(SchemaUtils.kt:231) at com.projectName.data.DatabaseImpl$initDatabase$1.invoke(DatabaseImpl.kt:45) at com.projectName.data.DatabaseImpl$initDatabase$1.invoke(DatabaseImpl.kt:43) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:189) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.access$inTopLevelTransaction$run(ThreadLocalTransactionManager.kt:1) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$1.invoke(ThreadLocalTransactionManager.kt:215) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:223) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:214) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$transaction$1.invoke(ThreadLocalTransactionManager.kt:165) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:223) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:135) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:132) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:131) at com.projectName.data.DatabaseImpl.initDatabase(DatabaseImpl.kt:43) at com.projectName.data

@Tapac
Copy link
Contributor

Tapac commented Dec 2, 2021

What android API version do you use?

@SepidehAkbarinezhad
Copy link
Author

What android API version do you use?

android version : 6.0.1

@Tapac
Copy link
Contributor

Tapac commented Dec 4, 2021

I see, the ConcurrentHashMap.computeIfAbsent available in Android SDK since 7.0.
I'll try to replace the function with analog.

@SepidehAkbarinezhad
Copy link
Author

I see, the ConcurrentHashMap.computeIfAbsent available in Android SDK since 7.0. I'll try to replace the function with analog.

you mean with this replacement "commit #9b52a85" the problem should be solved?
but I still have the same problem with the same error :(

@Tapac
Copy link
Contributor

Tapac commented Dec 6, 2021

The new version with that fix wasn't released yet.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants