2013-04-06 65 views
0

我找不到用JAVA计算数据库中的表的数量和要滚动的系统的方法。计算数据库中表的数量sqlite

我有一个矩阵M的大小100000列x 100行,我不得不分裂复制多个表上的数据库的各种原因,我在那里解释。 现在我必须读取数据库以重新加载矩阵M2,其中M2 = M,M的全部内容,但不知道该怎么办,因为我找不到计算组成数据库的表的数量的方法包含M. 我发现这个话题:

Count the number of tables in the sqlite database

,但我无法找到 “光标” 和 “getReadableDatabase。” 我在哪里可以下载适用于java的最新版SQLite? 我使用以下版本:

“的sqlite-JDBC-3.7.15-快照2.jar”


如果我写:

int numero_tabelle = 0; 
     try { 
      Class.forName("org.sqlite.JDBC").getInterfaces(); 
      String nome = "jdbc:sqlite:" + nome_database; 
      Connection conn = DriverManager.getConnection(nome); 
      Statement stat = conn.createStatement(); 
      ResultSet rs = stat.executeQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = 'table'"); 
      //ResultSet rs = stat.executeQuery("SELECT * FROM sqlite_master WHERE type = 'table'"); 
      numero_tabelle = rs.getInt("sqlite_master"); 
      conn.close(); 
      rs.close(); 
     } catch (ClassNotFoundException a) { 
      System.out.println("Manca la libreria SQLITE."); 
     } catch (SQLException b) { 
      System.out.println(nome_database + " inesistente."); 
      System.out.println("E' anche possibile " 
        + "che le risorse hardware siano insufficienti."); 
     } 
     System.out.println("Number of tables: " + numero_tabelle); 

我得到:

SuperM.sqlite inesistente. 
E' anche possibile che le risorse hardware siano insufficienti. 
Number of tables: 0 

:(

+0

'Cursor'和'getReadableDatabase'是Android API。你知道如何用JDBC执行查询吗? – 2013-04-06 19:18:27

+0

是的我知道这样的代码: rs = stat.executeQuery(“SELECT * FROM”+ nome_tabella); 但它提供了记录的数量,而不是表格... :( )除了sqlite-jdbc-3.7.15-SNAPSHOT-2.jar之外,我必须导入一些.jar文件才能使用Cursor和getReadableDatabase? – 2013-04-06 19:28:45

+0

但我必须下载这个.jar文件?!?!? http://developer.android.com/sdk/index.html – 2013-04-06 21:59:00

回答

2

SQLite有一个系统表sqlite_master,它包含每个数据库对象的记录。

要得到表的数量,执行这样的查询:

rs = stat.executeQuery("SELECT * FROM sqlite_master WHERE type = 'table'"); 

这将返回一条记录为每个表。

另外,执行这样的查询:

rs = stat.executeQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = 'table'"); 
int tableCount = rs.getInt(1); 

将返回一个纪录表的数量。

+0

你能看到代码 – 2013-04-08 09:34:45

+0

Wawwwww !!!!!!!!是!!!!!!! 非常感谢!为什么这个正确的代码是这样的? rs = stat.executeQuery(“SELECT COUNT(*)FROM sqlite_master WHERE type ='table'“); int tableCount = rs。getInt(1)-1; ??? sqlite_master是第一个表吗? – 2013-04-10 13:26:55

+0

您是否阅读过我链接到的文档? – 2013-04-10 14:21:17

3

使用下面的查询来实现自己的目标,

SELECT count(*) FROM sqlite_master WHERE type = 'table' AND name != 'android_metadata' AND name != 'sqlite_sequence'; 

它将返回数据表的计数。