При попытке подключить базу данных к java выдаёт ошибку

93
13 августа 2021, 06:40

Имеется код следующего вида:

import java.sql.*;
public class conn {
    public static Connection conn;
    public static Statement statmt;
    public static ResultSet resSet;
    // --------ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ--------
    public static void Conn() throws ClassNotFoundException, SQLException {
        conn = null;
        Class.forName("org.sqlite.JDBC");
        conn = DriverManager.getConnection("jdbc:sqlite:TEST1.sdb");
        System.out.println("База Подключена!");
    }
    // --------Создание таблицы--------
    public static void CreateDB() throws ClassNotFoundException, SQLException {
        statmt = conn.createStatement();
        statmt.execute("CREATE TABLE if not exists 'users' ('id' INTEGER PRIMARY KEY AUTOINCREMENT, 'name' text, 'phone' INT);");
        System.out.println("Таблица создана или уже существует.");
    }
    // --------Заполнение таблицы--------
    public static void WriteDB() throws SQLException {
        statmt.execute("INSERT INTO 'users' ('name', 'phone') VALUES ('Petya', 125453); ");
        statmt.execute("INSERT INTO 'users' ('name', 'phone') VALUES ('Vasya', 321789); ");
        statmt.execute("INSERT INTO 'users' ('name', 'phone') VALUES ('Masha', 456123); ");
        System.out.println("Таблица заполнена");
    }
    // -------- Вывод таблицы--------
    public static void ReadDB() throws ClassNotFoundException, SQLException {
        resSet = statmt.executeQuery("SELECT * FROM users");
        while(resSet.next()) {
            int id = resSet.getInt("id");
            String  name = resSet.getString("name");
            String  phone = resSet.getString("phone");
            System.out.println( "ID = " + id );
            System.out.println( "name = " + name );
            System.out.println( "phone = " + phone );
            System.out.println();
        }
        System.out.println("Таблица выведена");
    }
    // --------Закрытие--------
    public static void CloseDB() throws ClassNotFoundException, SQLException {
        conn.close();
        statmt.close();
        resSet.close();
        System.out.println("Соединения закрыты");
    }
}

Также имеется class с главным методом:

import java.sql.SQLException;
public class db {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        conn.Conn();
        conn.CreateDB();
        conn.WriteDB();
        conn.ReadDB();
        conn.CloseDB();
    }
}

Но почему-то при вызове метода Conn в 12 строке вылетает ошибка:

Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at conn.Conn(conn.java:12)
at db.main(db.java:6)

В чём может быть причина? быть может не в той версии коннектора я использую версию sqllite-jdbc-3.7.2.jar и если так, то какую версию посоветуете? Кто-то вообще сталкивался с этой проблемой? Помогите пожалуйста я уже больше полгода не могу подключить базу к проекту. Хочется уже закрыть этот вопрос, а спросить не у кого.

Answer 1

// 
// IntelliJ IDEA Community 2019.2, jdk-12.0.1 
// File\Project Structure\Libraries\Classes - сюда добавить путь 
//                                            к sqlite-jdc-xxx.jar 
// 
// Main.java : 
 
package com.samsoft; 
import java.sql.SQLException; 
 
public class Main { 
 
    public static void main(String[] args) throws SQLException, ClassNotFoundException { 
        myclass.Conn(); 
        myclass.CreateTab(); 
        myclass.WriteTab(); 
        myclass.ReadTab(); 
        myclass.CloseDB(); 
    } 
} 
 
// myclass.java : 
 
package com.samsoft; 
import java.sql.*; 
 
public class myclass { 
    public static Connection conn; 
    public static Statement st; 
    public static ResultSet rs; 
 
    //-------- Для подключения использован драйвер sqlite-jdbc-3.27.2.1.jar ------- 
 
    public static void Conn() throws ClassNotFoundException, SQLException { 
        conn = null; 
        try { 
            Class.forName("org.sqlite.JDBC"); 
            conn = DriverManager.getConnection("jdbc:sqlite:test1.db"); 
        } catch (Exception e) { 
            System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
            System.exit(1); 
        } 
        System.out.println("Соединение с базой установлено."); 
    } 
 
    //-------- Создание таблицы -------- 
    public static void CreateTab() throws ClassNotFoundException, SQLException { 
        try { 
            st = conn.createStatement(); 
            String sql = "CREATE TABLE IF NOT EXISTS users" + 
                    "(id INT PRIMARY KEY NOT NULL," + 
                    "name TEXT NOT NULL," + 
                    "phone TEXT NOT NULL)"; 
            st.executeUpdate(sql); 
            st.close(); 
        } catch (Exception e) { 
            System.err.println( e.getClass().getName() + ": " + e.getMessage()); 
            System.exit(2); 
        } 
         System.out.println("Таблица создана (или уже существует)."); 
    } 
 
    //-------- Заполнение таблицы -------- 
    public static void WriteTab() throws SQLException { 
        try { 
            conn.setAutoCommit(false); 
            st = conn.createStatement(); 
            String sql = "INSERT INTO users (id, name, phone) VALUES (1, 'Petya', 125453);"; 
            st.executeUpdate(sql); 
            sql = "INSERT INTO users (id, name, phone) VALUES (2, 'Vasya', 321789);"; 
            st.executeUpdate(sql); 
            sql = "INSERT INTO users (id, name, phone) VALUES (3, 'Masha', 456123);"; 
            st.executeUpdate(sql); 
            st.close(); 
            conn.commit(); 
        } catch (Exception e) { 
            System.err.println( e.getClass().getName() + ": " + e.getMessage()); 
            System.exit(3); 
        } 
        System.out.println("Записи добавлены в таблицу."); 
    } 
 
    //-------- Чтение и печать таблицы -------- 
    public static void ReadTab() throws ClassNotFoundException, SQLException { 
        try { 
            conn.setAutoCommit(false); 
            st = conn.createStatement(); 
            rs = st.executeQuery("SELECT * FROM users;"); 
            while(rs.next()) { 
                int id = rs.getInt("id"); 
                String name = rs.getString("name"); 
                String phone = rs.getString("phone"); 
                System.out.println("id = " + id); 
                System.out.println("name = " + name); 
                System.out.println("phone = " + phone); 
                System.out.println(); 
            } 
            rs.close(); 
            st.close(); 
        } catch (Exception e) { 
            System .err.println( e.getClass().getName() + ": " + e.getMessage() ); 
            System .exit(4); 
        } 
        System .out.println("Чтение выполнено."); 
    } 
 
    // -------- Закрытие -------- 
    public static void CloseDB() throws ClassNotFoundException, SQLException { 
        conn.close(); 
        System.out.println("Соединение завершено."); 
    } 
}

READ ALSO
Почему в методе main() аргумент массива строк традиционно называется “args”?

Почему в методе main() аргумент массива строк традиционно называется “args”?

Почему в методе main в языке C в роле аргументов принимаются argc и argv, а в Java - args? Как расшифровывается эта короткая форма или почему она именно...

266
Как правильно сопоставить на одну таблицу сущность разделенную на несколько классов

Как правильно сопоставить на одну таблицу сущность разделенную на несколько классов

Есть таблица на 30 и более полейЯ хочу разделить данную таблицу на несколько классов и в каждом классе по 5 полей, чтобы удобней было работать

187
отправка audio на сервер (java android, volley)

отправка audio на сервер (java android, volley)

Я Java изучаю только месяц и никак не могу понять, как правильно отправить audio, файл кодируется в base64 не верно и файл на сервере не открываетсяКак...

181