将声音存入SQLite3数据库

本文介绍了如何在iOS开发中,通过将声音文件存入SQLite3数据库来减少Resources中的文件数量,包括创建数据库实例、读取文件并将其保存到数据库的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iPhone开发中,很多时候要用到播放声音,但是直接将声音放入工程中势必造成Resources中文件太多,这样就需要将声音存入SQLite3数据库。以下为代码:


public class WriteVoice2DB {

public void WriteVoice2DB() {
System.out.println("Create WriteVoice2DB instance!");
}

public static void main(String[] args) {
try {
WriteVoice2DB wvdb = new WriteVoice2DB();
wvdb.savabinay();

} catch (Exception e) {
e.printStackTrace();
}

}


public void savabinay() throws rdeSQLiteException {
rdeSqlite3DB database = new rdeSqlite3DB();
database.open("Spanish_voice1.dat");
database.ExecSQL("CREATE TABLE voice_binary_table('id' CHAR(30) PRIMARY KEY, 'filename' CHAR(30), 'audioBinary' blob)");

//read the file stream
byte[] dataArray = {};
try {
File f = new File("C:/Documents and Settings/liu/My Documents/My Music/waiting.wav");
dataArray = read2list(f);
System.out.println(dataArray.length);

//save in DB
StringBuffer sb = new StringBuffer();
String insertSql = "INSERT INTO voice_binary_table(id,audioBinary) VALUES(?,?);";
Object[] parims = new Object[2];

parims[0] = new String(f.getName());
parims[1] = dataArray;

database.ExecSQL(insertSql, sb, parims);
System.out.println("the tail is " + sb.toString());

database.ExecSQL(insertSql);
} catch (Exception e) {
e.printStackTrace();
}

database.close();
System.out.println("SaveBinary Successful!");

}


public byte[] read2list(File file) throws IOException {

InputStream is = null;
byte[] buf = null;
int bufLen = 20000*1024;

try {
is = new BufferedInputStream(new FileInputStream(file));
buf = new byte[bufLen];
byte[] tmp = null;
int len = 0;

ArrayList data = new ArrayList(24);
while ((len = is.read(buf, 0, bufLen)) != -1) {
tmp = new byte[len];
System.arraycopy(buf, 0, tmp, 0, len);
data.add(tmp);
}

len = 0;
if (data.size() == 1)
return (byte[])data.get(0);
for (int i = 0; i < data.size(); i++) {
tmp = (byte[])data.get(i);
System.arraycopy(tmp, 0, buf, len, tmp.length);

len += tmp.length;
}

} finally {
if (is != null) {
try {
is.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}

return buf;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值