coding,

Portabilitas SQLite dan Penyebab Error java.sql.SQLException: path to ‘bla.. bla..’ does not exist

Hangga Aji Sayekti Hangga Aji Sayekti Follow Aug 19, 2020 · 1 min read
Portabilitas SQLite dan Penyebab Error java.sql.SQLException: path to ‘bla.. bla..’ does not exist
Share this

Untuk membuat sebuah aplikasi desktop – Java, dengan kebutuhan transaksi sederhana, tanpa hubungan client-server a.k.a hanya main local-an saja, SQLite adalah pilihan yang tepat karena performanya(cepat dan ringan).

Ketika menghubungkan aplikasi dengan SQLite umumnya pada tutorial-tutorial yang ada adalah dengan cara seperti ini.

Connection conn = DriverManager.getConnection( "jdbc:sqlite::resource:database/test.db" );

atau, seperti ini (tergantung nama file-nya).

Connection conn = DriverManager.getConnection( "jdbc:sqlite::resource:database/data.sqlite" );

Dalam kasus ini, sy menggunakan IDE faforit sy yaitu Intellij IDEA Community Edition.

Ketika project di Run dari IDE berjalan dengan lancar. Namun ketika di build menjadi app.jar, kemudian dijalankan, terjadi error kurang lebih semacam ini:

Mengapa terjadi?

Ketika kita run dengan meng-klik tombol run dari IDE, working directory-nya berada pada direktori project atau sesuai konfig anda saat create project.

Namun ketika project sudah di build menjadi app.jar, working directory-nya bukan lagi di dalam project directory. Tapi berada di direktori dimana app.jar itu berada. Biasanya di <project name>/out/artifacts/project\_name\_jar/

Saya terbiasa mengatur app direktori seperti ini.

Bagaimana Triknya.. 🤓

Agar data.sqllite lebih portable mengikuti working directory app.jar berada, sy mengakalinya dengan trik berikut ini dan terbukti LANCAR JAYAA..

Pada kelas System Utilities milik Java, ada sebuah method untuk mendapatkan user directory yaitu System.getProperty(“user.dir”).

Nah, ini bisa kita manfaatkan.

Connection getSqlite() {

String dbdir = "file:" + System.getProperty("user.dir") + "/data/db/data.sqlite";

try {
return DriverManager.getConnection("jdbc:sqlite::resource:" + dbdir);
} catch (SQLException e) {
System.out.println(e.getMessage());
return null;
}
}

Run di laptop sy dg OS Linux Mint lancar jaya. Wal hamdulillah ‘ala ni’matillah..

Eiits, tapi urusanya belum selesai. Ternyata test di Windows 7 masih error no such file or directory.

Saya ubah jadi seperti ini:

String dbdir = new File(Utils.getDbPath()).toURI().toString(); // Stable on Windows & Linux

Wal hamdulillah, lantjar djaja. Nanti malam sudah bisa tidur nyenyak.

Semoga bermanfaat.

Referensi:

Hangga Aji Sayekti
Written by Hangga Aji Sayekti
A passionate Software Engineer from Indonesia with experience since 2008. Bachelor's degree in Mathematics and loves Science and Computers.