Как связать SQLite с Java?

38

Я использую один простой код для доступа к базе данных SQLite из приложения Java. Мой код

 import java.sql.Connection;  
 import java.sql.DriverManager;  
 import java.sql.ResultSet;  
 import java.sql.Statement;  
 public class ConnectSQLite 
 {  
  public static void main(String[] args) 
  {  
     Connection connection = null;  
     ResultSet resultSet = null;  
     Statement statement = null;  

     try 
     {  
         Class.forName("org.sqlite.JDBC");  
         connection = DriverManager.getConnection("jdbc:sqlite:D:\\testdb.db");  
         statement = connection.createStatement();  
         resultSet = statement  
                 .executeQuery("SELECT EMPNAME FROM EMPLOYEEDETAILS");  
         while (resultSet.next()) 
         {  
             System.out.println("EMPLOYEE NAME:"  
                     + resultSet.getString("EMPNAME"));  
         }  
     } 
     catch (Exception e) 
     {  
         e.printStackTrace();  
     }
     finally 
     {  
         try 
         {  
             resultSet.close();  
             statement.close();  
             connection.close();  
         } 
         catch (Exception e) 
         {  
             e.printStackTrace();  
         }  
     }  
 }  
}  

Но этот код дает одно исключение, например

java.lang.ClassNotFoundException: org.sqlite.JDBC

Как я могу это сказать, пожалуйста, помогите мне.

  • 6
    Я полагаю, вы не помещаете банку SQLite в classpath
Теги:
jdbc
classpath

9 ответов

53
Лучший ответ

В вашем пути к классам должен быть драйвер JDBC SQLite.

Taro L. Saito (xerial) разветкил проект Zentus и теперь поддерживает его под именем sqlite-jdbc. Он объединяет родные драйверы для основных платформ, поэтому вам не нужно настраивать их отдельно.

  • 0
    Я использую этот драйвер, и работает нормально. Но почему он не сжимает базу данных при создании. С плагином FireFox sqlite База данных сжата с 11,5 МБ до 11,3 МБ. как это сделать с Java.
  • 0
    @Dyapa Вам нужно периодически запускать VACUUM ; поскольку JDBC на самом деле не интерпретирует SQL (по очень веским причинам), просто отправьте его. Или используйте прагму для каждого соединения, чтобы работать в режиме автоматического вакуума.
Показать ещё 7 комментариев
8

Если вы используете netbeans Загрузите драйвер sqlitejdbc Щелкните правой кнопкой мыши папку "Библиотеки" в окне "Проект" и выберите "Добавить библиотеку", затем нажмите кнопку "Создать", введите имя библиотеки (SQLite) и нажмите "ОК"

Вы должны добавить драйвер sqlitejdbc в путь к классу, нажмите на Добавьте кнопку Jar/Folder.. и выберите файл sqlitejdbc, который вы загрузили ранее. Нажмите ОК, и вы готовы к работе!

  • 0
    Я много боролся из-за этой проблемы. Я новичок в Java и использую Netbeans. Это было разочарование. Наконец твой ответ спас мой день.
7

Если вы используете Netbeans, используя Maven, чтобы добавить библиотеку проще. Я попытался использовать вышеуказанные решения, но это не сработало.

<dependencies>
    <dependency>
      <groupId>org.xerial</groupId>
      <artifactId>sqlite-jdbc</artifactId>
      <version>3.7.2</version>
    </dependency>
</dependencies>

Я добавил зависимость Maven и ошибка java.lang.ClassNotFoundException: org.sqlite.JDBC.

5

Я использую Eclipse, и я скопировал ваш код и получил ту же ошибку. Затем я открыл свойства проекта → Java Build Path → Libraries- > Add External JARs... C:\jrun4\Lib\sqlitejdbc-v056.jar Работал как шарм. Возможно, вам потребуется перезапустить веб-сервер, если вы только что скопировали файл .jar.

3
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import javax.swing.JOptionPane;
    import org.sqlite.SQLiteDataSource;
    import org.sqlite.SQLiteJDBCLoader;

    public class Test {

        public static final boolean Connected() {
            boolean initialize = SQLiteJDBCLoader.initialize();

            SQLiteDataSource dataSource = new SQLiteDataSource();
            dataSource.setUrl("jdbc:sqlite:/home/users.sqlite");
            int i=0;
            try {
                ResultSet executeQuery = dataSource.getConnection()
                        .createStatement().executeQuery("select * from \"Table\"");
                while (executeQuery.next()) {
i++;
                    System.out.println("out: "+executeQuery.getMetaData().getColumnLabel(i));

                }



            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, ex);
            }

            return initialize;

        }
  • 0
    Я использовал dataSource.setDatabaseName(...) и он не работал. Теперь я вижу, что мне нужно использовать dataSource.setUrl(...) . Благодарю. :-)
2

Эй, я разместил видео-учебник по youtube об этом, вы можете проверить это, и вы можете найти здесь пример кода:

http://myfundatimemachine.blogspot.in/2012/06/database-connection-to-java-application.html

  • 0
    Очень много неуместного кода, чтобы узнать об относительно конкретной проблеме. Не говорю, что это плохое видео / код, но не относится к этой проблеме.
1

Вам нужно загрузить и добавить SQLite JDBC-драйвер в свой путь к классам.
Вы можете скачать отсюда https://bitbucket.org/xerial/sqlite-jdbc/downloads

Если вы используете Gradle, вам нужно будет добавить зависимость SQLite:

dependencies {
    compile 'org.xerial:sqlite-jdbc:3.8.11.2'
} 

Следующее, что вам нужно сделать, это инициализировать драйвер:

try {
    Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException eString) {
    System.err.println("Could not init JDBC driver - driver not found");
}
1
connection = DriverManager.getConnection("jdbc:sqlite:D:\\testdb.db");

Вместо этого поставьте

connection = DriverManager.getConnection("jdbc:sqlite:D:\\testdb");
0
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;   


public class Connectdatabase {

        Connection con = null;

        public static Connection ConnecrDb(){

            try{
                //String dir = System.getProperty("user.dir");
                Class.forName("org.sqlite.JDBC");
                Connection con = DriverManager.getConnection("jdbc:sqlite:D:\\testdb.db");
                return con;
            }
            catch(ClassNotFoundException | SQLException e){
                JOptionPane.showMessageDialog(null,"Problem with connection of database");
                return null;
            }
        }

    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню