<prompt> Andika programu ya Java inayounganishwa na hifadhidata ya PostgreSQL na kufanya shughuli za CRUD kwenye jedwali lililo na habari kuhusu vitabu kichwa, mwandishi, tarehe ya kuchapishwa, n.k..  <response>: Hapa kuna programu ya Java inayounganishwa na hifadhidata ya PostgreSQL na kufanya shughuli za CRUD kwenye jedwali iliyo na habari kuhusu vitabu kichwa, mwandishi, tarehe ya kuchapishwa, n.k.. Tafadhali hakikisha kuwa umeongeza kiendeshi cha PostgreSQL JDBC kama tegemezi katika mradi wako. javakuagiza java.sql.Connection;agiza java.sql.DriverManager;agiza java.sql.PreparedStatement;agiza java.sql.ResultSet;agiza java.sql.SQLException;agiza java.sql.Statement;Hifadhidata ya darasa la umma Private tuli final String DB_URL jdbc:postgresql:localhost:5432bookdb; faragha tuli final Kamba USER your_username; Private tuli final Kamba PASSWORD your_password; utupu tuli wa umma String args jaribu Unganisha kwenye hifadhidata Muunganisho wa muunganisho DriverManager.getConnectionDB_URL, USER, PASSWORD; Unda meza ya vitabu ikiwa haipo createBooksTablemuunganisho; Ingiza kitabu kwenye meza kuingizaKitabumuunganisho, Mshikaji katika Rye, J.D. Salinger, 1951-07-16; Sasisha kichwa cha kitabu updateBookTitlemuunganisho, 1, Mshikaji katika Rye; Rejesha vitabu vyote kutoka kwa meza getAllBooksmuunganisho; Futa kitabu kwa kitambulisho deleteBookByIdmuunganisho, 1; Funga muunganisho connection.close; catch SQLException e System.err.printlnHitilafu ya kuunganisha kwenye hifadhidata; e.printStackTrace; utupu tuli wa kibinafsi createBooksTableConnection connection hutupa SQLException Taarifa ya taarifa connection.createStatement; String sql UNDA JEDWALI IKIWA HAIPO vitabu id SERIAL FUNGUO MSINGI, kichwa VARCHAR255, mwandishi VARCHAR255, tarehe_ya_kuchapishwa DATE; statement.executeUpdatesql; taarifa.funga; Kitabu cha faragha cha utupu tuli Muunganisho wa muunganisho, kichwa cha kamba, mwandishi wa kamba, uchapishaji wa kamba hutupa SQLException String sql INGIZA KWENYE vitabu jina, mwandishi, tarehe_ya kuchapishwa THAMANI ?, ?, ?; PreparedStatement preparedTaarifa connection.prepareStatementsql; preparedStatement.setString1, title; preparedStatement.setString2, mwandishi; readyStatement.setDate3, java.sql.Date.valueOftarehe ya kuchapishwa; readyStatement.executeUpdate; TayariTaarifa.funga; sasisho la utupu la kibinafsiBookTitleMuunganisho wa muunganisho, kitambulisho cha int, String newTitle hutupa SQLException String sql UPDATE vitabu SET title ? WHERE id ?; PreparedStatement preparedTaarifa connection.prepareStatementsql; preparedStatement.setString1, newTitle; tayariStatement.setInt2, id; readyStatement.executeUpdate; TayariTaarifa.funga; GetAllBooks zisizo na tuli za kibinafsi unganisho la muunganisho hutupa SQLException Taarifa ya taarifa connection.createStatement; ResultSet resultSet statement.executeQueryCHAGUA KUTOKA vitabu; wakati resultSet.next System.out.printlnID: resultSet.getIntid , Kichwa: resultSet.getStringtitle , Mwandishi: resultSet.getStringmwandishi , Tarehe ya Kuchapishwa: resultSet.getDatepublication_date; resultSet.close; taarifa.funga; utupu tuli wa kibinafsi kufutaBookByIdMuunganisho wa unganisho, kitambulisho cha int hutupa SQLException String sql FUTA KUTOKA kwa vitabu WHERE id ?; PreparedStatement preparedTaarifa connection.prepareStatementsql; tayariStatement.setInt1, id; readyStatement.executeUpdate; TayariTaarifa.funga; Badilisha jina_la_la_mtumiaji na nenosiri_lako na jina lako la mtumiaji na nenosiri la PostgreSQL. Mpango huu unadhania kuwa una seva ya PostgreSQL inayoendesha eneo la ndani kwenye bandari chaguo-msingi 5432 na hifadhidata inayoitwa bookdb. Unaweza kubadilisha thamani hizi katika viunga vya DB_URL, USER na PASSWORD.Mpango huu unaonyesha jinsi ya kuunda jedwali, kuingiza kitabu, kusasisha kichwa cha kitabu, kurejesha vitabu vyote na kufuta kitabu kwa kitambulisho. Unaweza kurekebisha msimbo ili kufanya shughuli zingine za CRUD inavyohitajika. 