sqlite3: 用脚本批量导出sqlite数据库中的表格数据

sqlite3: 用脚本批量导出sqlite数据库中的表格数据,第1张

应用场景:kobas3.0的注释库中,有很多关系对应表。如果你单独把它提取出来,用来做自己的注释也是不错的。

假设你需要nta.db中的表格信息如何做?

第一步:查看这个文件中有哪些表格。

第二步:在txt文本中编辑好脚本信息,最后复制粘贴到shell中运行即可。

类似的内容也可以这样改。

下面的程序能将SQlite数据库信息怎么转成excel文件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

package zhaoxing.android.tool

import java.io.File

import java.io.IOException

import jxl.Workbook

import jxl.write.Label

import jxl.write.WritableSheet

import jxl.write.WritableWorkbook

import jxl.write.WriteException

import jxl.write.biff.RowsExceededException

import android.database.Cursor

import android.database.sqlite.SQLiteDatabase

public class DatabaseDump {

private String mDestXmlFilename

private SQLiteDatabase mDb

public DatabaseDump(SQLiteDatabase db, String destXml) {

mDb = db

mDestXmlFilename = destXml

}

public void exportData() {

try {

// Log.i("mdb", mDb.getPath())

// get the tables out of the given sqlite database

String sql = "SELECT * FROM sqlite_master"

Cursor cur = mDb.rawQuery(sql, new String[0])

cur.moveToFirst()

String tableName

while (cur.getPosition() <cur.getCount()) {

tableName = cur.getString(cur.getColumnIndex("name"))

// don't process these two tables since they are used

// for metadata

if (!tableName.equals("android_metadata")

&&!tableName.equals("sqlite_sequence")) {

writeExcel(tableName)

}

cur.moveToNext()

}

} catch (Exception e) {

e.printStackTrace()

}

}

/**

* 生成一个Excel文件

*

* @param fileName

*要生成的Excel文件名

*/

public void writeExcel(String tableName) {

WritableWorkbook wwb = null

String fileName

fileName = "/sdcard/QuestionData/" + tableName + ".xls"

int r = 0

String sql = "select * from " + tableName

Cursor cur = mDb.rawQuery(sql, new String[0])

int numcols = cur.getColumnCount()

int numrows = cur.getCount()

// Log.i("row", numrows + "")

// Log.i("col", numcols + "")

String records[][] = new String[numrows + 1][numcols]// 存放答案,多一行标题行

if (cur.moveToFirst()) {

while (cur.getPosition() <cur.getCount()) {

for (int c = 0c <numcolsc++) {

if (r == 0) {

records[r][c] = cur.getColumnName(c)

records[r + 1][c] = cur.getString(c)

} else {

records[r + 1][c] = cur.getString(c)

}

// Log.i("value" + r + " " + c, records[r][c])

}

cur.moveToNext()

r++

}

cur.close()

}

try {

// 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象

wwb = Workbook.createWorkbook(new File(fileName))

} catch (IOException e) {

e.printStackTrace()

}

if (wwb != null) {

// 创建一个可写入的工作表

// Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置

WritableSheet ws = wwb.createSheet("sheet1", 0)

// 下面开始添加单元格

for (int i = 0i <numrows + 1i++) {

for (int j = 0j <numcolsj++) {

// 这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行

Label labelC = new Label(j, i, records[i][j])

// Log.i("Newvalue" + i + " " + j, records[i][j])

try {

// 将生成的单元格添加到工作表中

ws.addCell(labelC)

} catch (RowsExceededException e) {

e.printStackTrace()

} catch (WriteException e) {

e.printStackTrace()

}

}

}

try {

// 从内存中写入文件中

wwb.write()

// 关闭资源,释放内存

wwb.close()

} catch (IOException e) {

e.printStackTrace()

} catch (WriteException e) {

e.printStackTrace()

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9996032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存