有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java当jdbc与sqlite3数据库连接时,我应该如何避免“内存不足”的错误?

当jdbc与sqlite3数据库连接时,我必须做些什么来避免“内存不足”的错误

java.sql.SQLException: out of memory
at org.sqlite.DB.throwex(DB.java:288)
    at org.sqlite.NestedDB._open(NestedDB.java:73)
    at org.sqlite.DB.open(DB.java:77)
    at org.sqlite.Conn.<init>(Conn.java:88)
    at org.sqlite.JDBC.connect(JDBC.java:64)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at action.Actions.<init>(Actions.java:18)
    at controler.ClientControler.<init>(ClientControler.java:14)
    at main.Main.main(Main.java:20)


Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:clients.db");

共 (6) 个答案

  1. # 1 楼答案

    就像前面提到的DarkCthulhu一样,在数据库文件的路径中不能有任何空格。即使您声明了它的相对路径(比如在您的案例中),这也适用。我打赌项目的路径包含一个或多个空格

    您可以声明它的完整路径和转义的空格,或者将项目位置更改为不带空格的路径

  2. # 2 楼答案

    我在试图通过Eclipse的“数据源浏览器”连接时遇到了这个问题

    在Mac电脑上,当我在浏览提示中双击文件名时,数据库位置填充了文件夹,数据库中填充了文件名。当我手动将数据库文件添加到“数据库位置”字段时,我就可以连接了

  3. # 3 楼答案

    是的,如果找不到文件,它会生成这样奇怪的异常“内存不足”。 在EclipseIDE中,将数据库文件名放入字段:database location,而不是单独指定数据库名称和路径

    示例:数据库位置:c:\temp\test。分贝

  4. # 4 楼答案

    我也有同样的问题,我想我们遇到了一些错误。这个异常绝对不是由“文件不存在”引起的:我用适当的测试用例仔细检查了它

    数据库本身是使用sqlite3官方命令行工具创建的,因此也没有损坏的数据库。我可以放心地告诉你,图书馆不知怎么坏了

    请告诉我你的操作系统和JVM版本是什么,这样我就可以看看它是否与我的相匹配,然后我们可以准备一份错误报告

  5. # 5 楼答案

    如果数据库路径包含JDBC找不到的任何空间。 例如C:/Program Files是错误的。必须是C:/Program_Files。 我也有同样的问题,现在它可以工作了

  6. # 6 楼答案

    This表示找不到clients.db文件。尝试更恰当地定位该文件。向下滚动到标题为“如何指定数据库文件”的部分

    我下载了SQLite JAR,把它放在我的类路径中,找到了一个教程here,它在不到五分钟的时间内就完美地工作了。这是一个考验。我的项目根目录中的db,如预期的那样

    我已经按照我的方式重写了那个教程<它能用<不要说它什么都没带来

    package sqlite;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Test
    {
    
        private static final String DEFAULT_DRIVER = "org.sqlite.JDBC";
        private static final String DEFAULT_URL = "jdbc:sqlite:data/test.db";
    
        public static void main(String[] args)
        {
            Connection conn = null;
            try
            {
                conn = createConnection(DEFAULT_DRIVER, DEFAULT_URL);
                createTable(conn);
    
                List<Person> people = new ArrayList<Person>();
                people.add(new Person("Gandhi", "politics"));
                people.add(new Person("Wittgenstein", "philosophy"));
                people.add(new Person("Turing", "computers"));
                saveAll(conn, people);
    
                List<Person> rows = findAll(conn);
                System.out.println(rows);
            }
            catch (ClassNotFoundException e)
            {
                e.printStackTrace();
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
            finally
            {
                close(conn);
            }
        }
    
        private static List<Person> findAll(Connection conn) throws SQLException
        {
            List<Person> rows = new ArrayList<Person>();
            ResultSet rs = null;
            Statement stat = null;
    
            try
            {
                stat = conn.createStatement();
                rs = stat.executeQuery("select * from people;");
                while (rs.next())
                {
                    rows.add(new Person(rs.getString("name"), rs.getString("occupation")));
                }
            }
            finally
            {
                close(stat);
                close(rs);
            }
    
            return rows;
        }
    
        private static void saveAll(Connection conn, List<Person> people) throws SQLException
        {
            PreparedStatement prep = null;
            try
            {
                prep = conn.prepareStatement("insert into people values (?, ?);");
    
                for (Person person : people)
                {
                    prep.setString(1, person.getName());
                    prep.setString(2, person.getOccupation());
                    prep.addBatch();
                }
    
                conn.setAutoCommit(false);
                prep.executeBatch();
                conn.setAutoCommit(true);
            }
            finally
            {
                close(prep);
            }
        }
    
        private static void createTable(Connection conn) throws SQLException
        {
            Statement stat = null;
            try
            {
                stat = conn.createStatement();
                stat.executeUpdate("drop table if exists people;");
                stat.executeUpdate("create table people (name, occupation);");
            }
            finally
            {
                close(stat);
            }
        }
    
        private static Connection createConnection(String driver, String url) throws ClassNotFoundException, SQLException
        {
            Class.forName(DEFAULT_DRIVER);
            Connection conn = DriverManager.getConnection(DEFAULT_URL);
    
            return conn;
        }
    
        private static void close(Connection conn)
        {
            try
            {
                if (conn != null)
                {
                    conn.close();
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    
    
        private static void close(Statement stat)
        {
            try
            {
                if (stat != null)
                {
                    stat.close();
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    
        private static void close(ResultSet rs)
        {
            try
            {
                if (rs != null)
                {
                    rs.close();
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }
    
    class Person
    {
        private String name;
        private String occupation;
    
        Person(String name, String occupation)
        {
            this.name = name;
            this.occupation = occupation;
        }
    
        public String getName()
        {
            return this.name;
        }
    
        public String getOccupation()
        {
            return this.occupation;
        }
    
        public String toString() {
            StringBuilder sb = new StringBuilder();
    
            sb.append("{ name: ").append(this.name).append(", occupation: ").append(this.occupation).append(" }");
    
            return sb.toString();
        }
    }