Tag: sqlite

Android:如何保存parcelable对象的实例?

我正在尝试保存StatusBarNotification的实例,以便我可以稍后向用户显示通知。 我注意到StatusBarNotifcation不是Serializable而是Parcelable 。 有没有办法在数据库中存储确切的实例状态,这样即使用户关闭了他的手机,也会存储实例对象。 我知道将Parcelable对象存储在数据库中并不是最好的做法。 但我需要这样做。 如果有任何方法我可以得到实例的字节数组,我愿意接受建议。 编辑 我今天发现,如果我通过一些未出席的通知关闭我的Android手机,当我重新启动手机时,我仍然可以看到相同的通知。 话虽这么说,android以某种方式保存相同的通知实例。 现在我的问题是,怎么样? 如果android确实为什么不能我们。

Android – SQLite + SharedPreferences,2个线程同时读/写?

我有一个程序的两个部分(实际的应用程序和一个BroadcastReceiver)可能尝试连接和修改SQLite数据库和SharedPreferences文件。 1)我知道你可以与一个SQLite数据库建立多个连接。 我还读到SQLite可以在尝试修改或读取数据库(UPDATE,INSERT等)时“锁定”数据库,因此如何正确处理2个线程尝试修改/读取单个SQLite数据库的情况同一时间? 现在,我的数据库连接代码/类中有这个代码片段: private SQLiteDatabase myDatabase; public boolean insert(ContentValues columnValueMap) throws Exception { long result = 0; int attempt =0; do { if(!myDatabase.isDbLockedByOtherThreads() && !myDatabase.isDbLockedByCurrentThread()) { synchronized (myDatabase) { result=myDatabase.insertOrThrow(TABLE_NAME, TEXT, columnValueMap); if(result ==0 || result == -1) { return false; } return true; } } else { Thread.sleep(50); } attempt++; }while(attempt<=5); throw new […]

如何在Android应用关闭或失去焦点时调用方法?

因为我正在构建的应用程序将处理相当敏感的数据,我希望每次用户登录时都将SQLite数据库与服务器同步,并在每次应用程序失去焦点时删除emty数据库(因为用户移动到主屏幕或另一个应用)。 看到Activity生命周期 ,我的想法是通过清空每个Activity的onDestroy中的数据库来做到这一点。 为了测试所描述的生命周期,我只是覆盖所有生命周期方法(onCreate,onStart,onResume,onPause,onStop和onDestroy),在其中包含一些日志消息,并启动我的应用程序。 日志消息包含在我的SettingsActivity中。 当我进入我的应用程序并移动到设置时,它运行onCreate,onStart和onResume(如预期的那样)。 然后,当我单击一个设置并移动到下一个屏幕时,它将在onPause和onStop上运行(仍然按预期方式)。 要返回到设置屏幕,我单击后退按钮,它再次运行onStart和onResume(仍然按预期),当我现在再次单击后退按钮以返回到初始屏幕时,它(令我惊讶的是)运行onPause, onStop AND onDestroy。 所以我的问题; 为什么在应用程序未完成时会破坏活动? 更重要的是:当应用程序关闭或失去焦点时,如何运行我的CleanUp方法?

为什么android SQLite可以将double值(java 8字节)存储到float列中

Create Table: db.execSQL(“CREATE TABLE ” + PERSONS_TABLE + ” (” + PersonsColumns.ID + ” INTEGER PRIMARY KEY AUTOINCREMENT, ” … + PersonsColumns.HEIGHT + ” FLOAT, ” + PersonsColumns.CITY + ” STRING);”); Write Data: ContentValues values = new ContentValues(); alues.put(PersonsColumns.HEIGHT, 1.7976931348623157E308); db.insertOrIgnore(values); 您可以在sqlite中看到值1.7976931348623157E308超出FLOAT值范围(4个字节)。 为什么它可以正确存储这个值?

如何在首次运行时填充大型sqlite数据库

我正在开发一个基于SQLite数据库的字典应用程序,其中包含超过300,000行。 问题是最终forms的数据库文件由全文索引表组成,重量超过150Mb 。 我已经设法通过创建无内容的fts4表将.db文件大小降到最低。 数据库不能小一些 。 我还设法将预先填充的数据库放在应用程序中,它运行正常。 问题是我不能将最终的.db文件保存在/ assets中并在第一次运行时将其复制到sdcard,因为它太大了。 我也不想在第一次运行时下载它。 批量INSERT数据,即使对事务和sqlite进行了优化,并且启动时没有索引,因此它也不是一个选项。 好处是用于构建数据库的原始数据,以CSV格式和压缩,是30Mb和sqlite的命令行.import选项非常快(100,000行~1s)但是…它无法从没有root权限的应用。 我很乐意将应用程序与/ assets中的压缩CSV文件捆绑在一起,解压缩,在SD卡上创建数据库,然后导入CSV,但在我看来这是不可能的。 虽然有很多字典应用程序似乎正在这样做。 (下载的应用程序是十几兆字节,首次运行时构建数据库,并在SD卡上占用数百兆字节的空间)。 我该如何做到这一点? 过去两周我一直在研究这个问题,而且只是没有想法。 我是Android开发的新手,所以任何帮助都会非常感激。

BlackBerry SQLite:将一个SQLite数据库附加到另一个

我正在尝试使用SQLite ATTACH DATABASE命令在BlackBerry上将一个SQLite数据库附加到另一个SQLite 数据库 。 Database d1, d2; Statement st; URI dbURI1 = URI.create(“file:///SDCard/Databases/SQLiteExample/MyTestDatabase1.db”) if (DatabaseFactory.exists(dbURI1)) { d1 = DatabaseFactory.open(dbURI1); } else { d1 = DatabaseFactory.create(dbURI1); st = d1.createStatement(“CREATE TABLE ‘People’ ( ‘Name’ TEXT, ‘Age’ INTEGER )”); st.prepare(); st.execute(); st.close(); } URI dbURI2 = URI.create(“file:///SDCard/Databases/SQLiteExample/MyTestDatabase2.db”); if (DatabaseFactory.exists(dbURI2)) { d2 = DatabaseFactory.open(dbURI2); } else { d2 […]

Hibernate + SQLite没有创建数据库

这是我的问题: 我有一个使用JavaFX + Hibernate + SQLite的桌面应用程序。 这是我的模特: @Entity @Table(name = “usuario”) public class Usuario implements AbstractModel, Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @NotNull @Size(min=5, max=100) private String username; @NotNull @Size(min=5, max=100) private String password; @NotNull private Boolean administrador; @Version private Integer version; public Usuario() { } public Usuario(Integer id, String username, String […]

将SQL Query结果转换为字符串数组

我使用SQLiteJDBC(SQLite的Java JDBC驱动程序)在Java中查询SQLite3数据库。 如果我创建SQL查询SELECT名称,则传递FROM loginTable WHERE name =’%s’; 是否有函数返回或转换名称并将查询返回的字符串传递给String数组或ArrayList? 下面的代码尝试将查询返回到数组列表但它失败了,我知道SQL数据库很好并且我的查询是因为当我在命令行中执行此操作时它可以工作。 ArrayList result = new ArrayList(); ResultSet rs = stat.executeQuery( “SELECT …” ); for (int i=0; rs.next(); i++) { result.add( rs.getString(i) ); } 它失败,因为表loginTable有列:Index,name,pass。 所以看看上面,当i = 0时,我去了rs.getString(0),它试图在Index列中获取字符串。 错误输出是 java.sql.SQLException:第0列超出范围[1,1] 有谁知道如何将SQL查询(ResultSet对象)的所有结果放在ArrayList或数组中?

Java和C ++之间的IPC

我的目标是从同一个SQLite数据库中读取两个独立的应用程序(一个在Java中,另一个在C ++中,在同一台机器上)。 C ++实现已经有效,并且具有我进行该通信所需的所有方法。 它使用sqlite3.h库。 要做的第一个理性的事情是在Java应用程序中使用JDBC或SQLite包装器。 问题是我的嵌入式系统(POSIX)具有非常有限的资源,并且当我将必要的* .jar包含在其中时执行简单查询需要很长时间。 我已经尝试过Christian Werner的Xerial JDBC,sqlite4java,sqljet和Javasqlite Wrapper / JDBC驱动程序。 JavaVM只需要很长时间来加载所有内容并执行它,性能是一个关键问题。 作为一种解决方法,我管理Java应用程序以使用系统命令并运行sqlite3命令shell来执行查询并获得答案。 我正在寻找更“时尚”和安全的解决方案。 我实际上需要Java应用程序来使用C ++中的方法。 它们只是在实现方法时返回一个字符串,只返回一个值。 经过大量的IPC阅读,我得出的结论是我必须使用命名管道。 问题是我必须使用JNI,但我有一个初学Java级别,到目前为止,JNI对我来说太复杂了。 在这种情况下,JNI是否过度杀伤? 我可以在这里实施哪些其他解决方案

如何将数据库写入a​​ndroid中的文本文件

我正在为我的大学项目目的开发间谍应用程序。 为此,我记录了设备的呼叫,位置和SMS,并将它们存储在数据库中。 现在我想将数据库的内容导出到文本文件..我尝试了下面的代码。 private void readAndWriteCallsData() { File dataBaseFile = getDatabasePath(“DATABASE”); File callDataFile = new File(Environment.getDataDirectory()+”/data/com.example.myapp/databases/”+”DATABASE”); try { BufferedReader dbFileReader = new BufferedReader(new FileReader(callDataFile)); String eachLine; while((eachLine = dbFileReader.readLine()) != null) { Callslog.append(eachLine); Callslog.append(“\n”); } } catch (IOException e) { e.printStackTrace(); } } 但那不行……请帮帮我……