命令"pragma table_info('tablename')"列出列信息,"pragma foreign_key_list('tablename')"列出外键.如何显示表的其他约束(检查,唯一)?只解析表"sqlite_master"的字段"sql"?
看来SQLite默认不强制执行外键.我正在使用sqlitejdbc-v056.jar并且我已经读过使用PRAGMA foreign_keys = ON;将打开外键约束,并且需要在每个连接的基础上打开它.
我的问题是:我需要执行哪些Java语句来打开此命令?我试过了:
connection.createStatement().execute("PRAGMA foreign_keys = ON");
Run Code Online (Sandbox Code Playgroud)
和
Properties properties = new Properties();
properties.setProperty("PRAGMA foreign_keys", "ON");
connection = DriverManager.getConnection("jdbc:sqlite:test.db", properties);
Run Code Online (Sandbox Code Playgroud)
和
connection = DriverManager.getConnection("jdbc:sqlite:test.db;foreign keys=true;");
Run Code Online (Sandbox Code Playgroud)
但这些都不起作用.这里有什么我想念的吗?
我已经看到了这个答案,我想做同样的事情,只使用JDBC.
这是我的Python代码 -
cursor.execute("""UPDATE tasks SET task_owner=%s,task_remaining_hours=%s, task_impediments=%s,task_notes=%s WHERE task_id=%s""", (new_task_owner,new_task_remaining_hours,new_task_impediments,
new_task_notes,task_id))
Run Code Online (Sandbox Code Playgroud)
这是我在SQLite3管理器中尝试的SQL语句(Firefox扩展)
UPDATE tasks SET task_owner=%s,task_remaining_hours=%d,task_impediments=%s,task_notes=%s WHERE task_id=%d,("sumod",10,"none","test",1)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是 -
sqlite3.OperationalError: near "%": syntax error
Run Code Online (Sandbox Code Playgroud)
我尝试了很多网络搜索,包括SO,教程和自我排除故障,但这个错误并没有消失.究竟我在这里做错了什么.
我有一个我想查询的SQLite数据库.我想通过ICS定位Android 2.2.我遇到了关于如何执行此操作的文章,但它使用了弃用的代码(不是异步查询,而是在UI线程上).我已经阅读过,我可以使用CursorLoader它LoaderManager来执行此任务的首选,最佳实践方式(以免陷入UI线程).
问题是找到一个简洁的例子向我解释如何做到这一点.1)加载数据库,2)查询它,3)使用结果填充AutoCompletetextBox列表视图.
这样的例子存在吗?
当我开发iPhone应用程序(时间跟踪器,ToDoList等)时,我永远不知道什么是处理数据的最佳方式.一旦我使用了plist,下次使用sqlite或CoreData.
您如何确定最适合您项目的内容?(只讨论数据管理)
例如,如果你想开发:
对于初学者,你能指点我正确的方向吗?(我知道这很大程度上取决于应用程序以及你喜欢用它做什么,但任何想法都会有所帮助)
我远没有开发复杂的应用程序,它们仍然非常简单.
谢谢你的帮助,马克
我试图读出一个示例Northwind sqlite数据库,但在一些具有日期时间的表上得到错误.这是数据库还是System.Data.SQLite的问题?Exception有点像:"字符串不是有效的DateTime"
http://system.data.sqlite.org/
对于cource,我可以通过正确转换datetime来自己读出数据,但这并不像通过简单的dt.Load()读取它那样高效.
SQLiteCommand dbCommand = myConnector.CreateCommand();
dbCommand.CommandText = "SELECT * FROM " + tablename;
SQLiteDataReader executeReader = dbCommand.ExecuteReader(CommandBehavior.SingleResult);
DataTable dt = new DataTable();
dt.Load(executeReader); // <-- FormatException
Run Code Online (Sandbox Code Playgroud)
"bei System.DateTimeParse.ParseExactMultiple(String s,String [] formats,DateTimeFormatInfo dtfi,DateTimeStyles style)\ r \n bei System.DateTime.ParseExact(String s,String [] formats,IFormatProvider provider,DateTimeStyles style)\ r \n bei System.Data.SQLite.SQLiteConvert.ToDateTime(String dateText,SQLiteDateFormats format,DateTimeKind kind),位于c:\ dev\sqlite\dotnet\System.Data.SQLite\SQLiteConvert.cs:Zeile 322."
我需要一个很好的帮助来改进当前的代码.
我正在尝试免费在线托管我的小型个人网站,但我找不到支持Python和使用SQLite3的主机.我看过Heroku但是使用带有Flask的PostgreSQL(没有ORM)对我来说非常困惑.我在哪里可以找到主持人?
我正在开发一个Android应用程序,我在资产文件夹中使用了现有的sqlite数据库.所以我实际上从该文件夹中复制数据库.用户还可以保存自己的数据(将任何内容标记为收藏).
我在市场上上传了一个版本.现在我想在数据库中添加一些新数据并上传新版本.如果用户从市场更新应用程序,我想保留用户数据(从以前的版本)并添加新数据.我做了一些谷歌,发现升级方法应该做的伎俩.但是我正在从代码中更改DATABASE_VERSION,但是on upgrade方法没有得到调用.我想知道我错过了什么.这是我的代码:
public class DataBaseHelper extends SQLiteOpenHelper {
private static String DB_PATH = "/data/data/riskycoder.login/databases/";
public static String DB_NAME = "datenbank_EN.sqlite";
private SQLiteDatabase myDataBase;
private final Context myContext;
private static final int DATABASE_VERSION = 1;
public DataBaseHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
this.myContext = context;
}
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
if (dbExist) {
} else {
this.getWritableDatabase();
try {
this.close();
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
} …Run Code Online (Sandbox Code Playgroud) 有没有办法将这两个语句合并为一个而没有重复的条目?
SELECT * FROM Seq where JULIANDAY('2012-05-25 19:02:00')<=JULIANDAY(TimeP)
order by TimeP limit 50
SELECT * FROM Seq where JULIANDAY('2012-05-29 06:20:50')<=JULIANDAY(TimeI)
order by TimeI limit 50
Run Code Online (Sandbox Code Playgroud)
我的第一个显而易见的尝试不受支持SQLITE(语法错误:限制子句应该在UNION之后而不是之前):
SELECT * FROM Seq where JULIANDAY('2012-05-25 19:02:00')<=JULIANDAY(TimeP)
order by TimeP limit 50
UNION
SELECT * FROM Seq where JULIANDAY('2012-05-29 06:20:50')<=JULIANDAY(TimeI)
order by TimeI limit 50
Run Code Online (Sandbox Code Playgroud) 我有一个ContentProvider处理与我的应用程序相关的所有数据插入和检索,我遵循Virgil Dobjanschi在Google I/O上建议的模式.我正在使用第一种模式.
我的问题是我有一个逻辑实体,由数据库中的多个表表示.
例如,我有一个Articles表和一个ArticleExtras表.文章代表文章本身,而ArticleExtras代表关于某些文章的附加信息,如评论数量.
我在UI中使用CursorAdapter在ListView的一行中显示文章标题和该文章的注释数.
为了实现这一点,我left outer join ArticleExtras on在Article表的ContentProvider查询方法中添加了一个语句,以便CursorAdapter与Article本身一起获取ArticleExtras.
当从Web获取新文章时,我通过ContentProvider将其插入到数据库中,然后通知CursorAdapter并更新UI,这部分按预期工作.
但是,当我取的评论(ArticleExtras)的数量,我想同样的CursorAdapter,这是看在变化content://com.myapp.content/Articles,通知,也让我可以在ListView更新我行.
我当前的实现是这样的:在将ArticleExtras插入数据库之后,我启动一个新查询来检查Articles表是否有任何与我刚刚插入的ArticleExtras相关的行.如果是这样,我将为该文章创建一个新的uri(例如:) content://com.myapp.cotent/Articles/123,并调用getContext().getContentResolver().notifyChange(uri, null),因此正在监视此文章更改的相应CursorAdapter将收到通知.
方法是正确的,还是有更好的方法来实现我想要的?